io_uring: fix task_work cap overshooting
authorJens Axboe <axboe@kernel.dk>
Tue, 26 Nov 2024 20:42:27 +0000 (13:42 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 Nov 2024 20:42:27 +0000 (13:42 -0700)
commit49c5c63d48eb5b110580e4c4b937f0006fcc9b10
tree2833900889cb4ff8ab784b5a17af306694c5f533
parent0c0a4eae26ac78379d0c1db053de168a8febc6c9
io_uring: fix task_work cap overshooting

A previous commit fixed task_work overrunning by a lot more than what
the user asked for, by adding a retry list. However, it didn't cap the
overall count, hence for multiple task_work runs inside the same wait
loop, it'd still overshoot the target by potentially a large amount.

Cap it generally inside the wait path. Note that this will still
overshoot the default limit of 20, but should overshoot by no more than
limit-1 in addition to the limit. That still provides a ceiling over how
much task_work will be run, rather than still having gaps where it was
uncapped essentially.

Fixes: f46b9cdb22f7 ("io_uring: limit local tw done")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c