diff --git a/fs/io_uring.c b/fs/io_uring.c
index 74dcc4471e9bdd196a784a6af1c725b7f2db1d35..2f6af230e86e82e838967809f8078bf672e0ad85 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -4959,8 +4959,10 @@ static int io_poll_double_wake(struct wait_queue_entry *wait, unsigned mode,
 		/* make sure double remove sees this as being gone */
 		wait->private = NULL;
 		spin_unlock(&poll->head->lock);
-		if (!done)
-			__io_async_wake(req, poll, mask, io_poll_task_func);
+		if (!done) {
+			/* use wait func handler, so it matches the rq type */
+			poll->wait.func(&poll->wait, mode, sync, key);
+		}
 	}
 	refcount_dec(&req->refs);
 	return 1;