• Jens Axboe's avatar
    io_uring: include task_work run after scheduling in wait for events · 35d90f95
    Jens Axboe authored
    It's quite possible that we got woken up because task_work was queued,
    and we need to process this task_work to generate the events waited for.
    If we return to the wait loop without running task_work, we'll end up
    adding the task to the waitqueue again, only to call
    io_cqring_wait_schedule() again which will run the task_work. This is
    less efficient than it could be, as it requires adding to the cq_wait
    queue again. It also triggers the wakeup path for completions as
    cq_wait is now non-empty with the task itself, and it'll require another
    lock grab and deletion to remove ourselves from the waitqueue.
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    35d90f95
io_uring.c 110 KB