]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
io_uring/eventfd: reset deferred signal state
authorYufan Chen <ericterminal@gmail.com>
Sun, 3 May 2026 17:57:10 +0000 (01:57 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 4 May 2026 05:21:40 +0000 (23:21 -0600)
commit04fe9aeb4f3c0999e6715385664c677469dfd8f4
treeb9e827e2087baab671144fc008b48119028d3a78
parentb8c2e9e27636b92dc96c12f16894cbc60c58a306
io_uring/eventfd: reset deferred signal state

Recursive eventfd wakeups must defer io_uring eventfd signaling because
eventfd_signal_mask() rejects reentry from eventfd wakeup handlers. The
io_ev_fd ops bit tracks an outstanding deferred signal so that the same
rcu_head is not queued twice.

That bit is only set today. Once the first deferred callback runs, later
recursive notifications still see the bit set and skip queueing another
deferred signal. This can leave new completions without a matching
eventfd wake after the first recursive deferral.

Clear the pending bit before issuing the deferred signal. If the wakeup
path recurses while the callback runs, a new signal can be queued for
the next RCU grace period while the current callback keeps its reference
until it returns.

Signed-off-by: Yufan Chen <ericterminal@gmail.com>
Fixes: 60b6c075e8eb ("io_uring/eventfd: move to more idiomatic RCU free usage")
Link: https://patch.msgid.link/20260503175710.37209-1-yufan.chen@linux.dev
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/eventfd.c