]> git.baikalelectronics.ru Git - kernel.git/commit
io_uring: make poll refs more robust
authorPavel Begunkov <asml.silence@gmail.com>
Sun, 20 Nov 2022 16:57:42 +0000 (16:57 +0000)
committerJens Axboe <axboe@kernel.dk>
Fri, 25 Nov 2022 13:54:46 +0000 (06:54 -0700)
commitaaecbf51788fe0bb3cc445d9497f645f68a06a29
tree710f2eb7d12de9e10511de73ed979cf3adb772d0
parent37b86e80e1037ba8e11632d0cdbe1635b3ee9133
io_uring: make poll refs more robust

poll_refs carry two functions, the first is ownership over the request.
The second is notifying the io_poll_check_events() that there was an
event but wake up couldn't grab the ownership, so io_poll_check_events()
should retry.

We want to make poll_refs more robust against overflows. Instead of
always incrementing it, which covers two purposes with one atomic, check
if poll_refs is elevated enough and if so set a retry flag without
attempts to grab ownership. The gap between the bias check and following
atomics may seem racy, but we don't need it to be strict. Moreover there
might only be maximum 4 parallel updates: by the first and the second
poll entries, __io_arm_poll_handler() and cancellation. From those four,
only poll wake ups may be executed multiple times, but they're protected
by a spin.

Cc: stable@vger.kernel.org
Reported-by: Lin Ma <linma@zju.edu.cn>
Fixes: e814270056832 ("io_uring: poll rework")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/c762bc31f8683b3270f3587691348a7119ef9c9d.1668963050.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/poll.c