]> git.itanic.dy.fi Git - linux-stable/commit
io_uring: remove looping around handling traditional task_work
authorJens Axboe <axboe@kernel.dk>
Tue, 30 Jan 2024 14:00:47 +0000 (07:00 -0700)
committerSasha Levin <sashal@kernel.org>
Tue, 26 Mar 2024 22:16:26 +0000 (18:16 -0400)
commit7d430002358dcbba5a32ed7d283ca7e8f64ccdfc
treeb32d4dd8707af9b789712bd5af04b21a514db047
parent038cc4a5089b89fec04cb46ba3598dc5db17f6d2
io_uring: remove looping around handling traditional task_work

[ Upstream commit 592b4805432af075468876771c0f7d41273ccb3c ]

A previous commit added looping around handling traditional task_work
as an optimization, and while that may seem like a good idea, it's also
possible to run into application starvation doing so. If the task_work
generation is bursty, we can get very deep task_work queues, and we can
end up looping in here for a very long time.

One immediately observable problem with that is handling network traffic
using provided buffers, where flooding incoming traffic and looping
task_work handling will very quickly lead to buffer starvation as we
keep running task_work rather than returning to the application so it
can handle the associated CQEs and also provide buffers back.

Fixes: 3a0c037b0e16 ("io_uring: batch task_work")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
io_uring/io_uring.c