Re: [PATCH 6.8 015/715] io_uring: remove unconditional looping in local task_work handling

From: Jiri Slaby
Date: Thu Apr 04 2024 - 03:07:44 EST


On 02. 04. 24, 15:41, Jens Axboe wrote:
On 4/2/24 2:12 AM, Jiri Slaby wrote:
On 24. 03. 24, 23:23, Sasha Levin wrote:
From: Jens Axboe <axboe@xxxxxxxxx>

[ Upstream commit 9fe3eaea4a3530ca34a8d8ff00b1848c528789ca ]

If we have a ton of notifications coming in, we can be looping in here
for a long time. This can be problematic for various reasons, mostly
because we can starve userspace. If the application is waiting on N
events, then only re-run if we need more events.

This commit breaks test/recv-multishot.c from liburing:
early error: res 4
test stream=1 wait_each=0 recvmsg=0 early_error=0 defer=1 failed

The behaviour is the same in 6.9-rc2 (which contains the commit too).

Reverting the commit on the top of 6.8.2 makes it pass again.

Should the test be updated or is the commit wrong?

The commit is fine, it's the test that is buggy. Sometimes test cases
make odd assumptions that are just wrong but happen to work, for some
definition of work. Eg it would work fine on an idle system, but not
necessarily if not. For this one, the fix is in liburing:

https://git.kernel.dk/cgit/liburing/commit/test/recv-multishot.c?id=a1d5e4b863a60af93d0cab9d4bbf578733337a90

Thanks, that worked.

Any plans to release 2.6 with the above?

Note that for 2.4->2.5 update I also needed to take 9dc95a03e4a76 from post-2.5.

thanks,
--
js
suse labs