On 25/10/2020 15:53, Jens Axboe wrote:
On 10/25/20 8:26 AM, Pavel Begunkov wrote:
io_poll_double_wake() is called for both: poll requests and as apoll (internal poll to make rw and other requests), hence when it calls __io_async_wake() it should use a right callback depending on the current poll type.
Can we do something like this instead? Untested...
It should work, but looks less comprehensible. Though, it'll need some refactoring in the future either way.
diff --git a/fs/io_uring.c b/fs/io_uring.c index b42dfa0243bf..a0147c0e5320 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -4978,7 +4978,7 @@ static int io_poll_double_wake(struct wait_queue_entry *wait, unsigned mode, wait->private = NULL; spin_unlock(&poll->head->lock); if (!done)
__io_async_wake(req, poll, mask, io_poll_task_func);
} refcount_dec(&req->refs); return 1;poll->wait.func(wait, mode, sync, key);