From: Jens Axboe <axboe@kernel.dk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: io-uring <io-uring@vger.kernel.org>
Subject: [GIT PULL] io_uring updates and fixes for 7.4-rc
Date: Wed, 21 Oct 2026 08:40:25 -0600 [thread overview]
Message-ID: <8bbd8607-bc13-4070-8791-07cdfa31b45c@kernel.dk> (raw)
Hi Linus,
The bulk of this is a big robustness pass over cancelation, io-wq,
timeouts, and poll. Outside of that:
- Large series from Josef hardening the cancelation, io-wq, timeout,
poll, and wait paths. Fixes for lost wakeups and lost cancels as io-wq
arms poll/timeouts, work stranding on worker exit, CQE32 resize
handling, napi entry timeouts, and a pile of smaller correctness
issues across the board.
- Rework of how io-wq posts completions, posting from the last request
reference and dropping the request file before the completion, and
running ring release cancelations synchronously - canceling and
waiting for all in-flight requests and dropping registered files and
buffers at release time.
- Don't charge the SQ/CQ rings or provided buffer rings to
RLIMIT_MEMLOCK, which the region API conversion had started doing.
- Split io_uring_cmd_set_res() out from io_uring_cmd_done() so a command
can set the result from its ->end_io() handler, used by nvme.
- CQE32 ring fixes for the free entry check, aux CQE big_cqe zeroing,
and the dummy skip CQE.
- Timeout fixes for sequence handling and multishot updates.
- net fixes for MSG_TRUNC buffer overconsumption and keeping recv buffer
select length within MAX_RW_COUNT.
- Wake real-time waiters from hard interrupt context.
- Don't spin on local work an exiting task can't run, reachable by an
unprivileged user.
- Various other fixes and cleanups.
Please pull!
The following changes since commit df2908090cda368b01ff43709f51890076c56157:
Linux 7.3-rc2 (2026-09-06 15:07:20 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux.git tags/for-7.4/io_uring-20261021
for you to fetch changes up to ecb6817b769fd7d71af2c9f446188649020b2e53:
io_uring: end the drain when the drain request completes (2026-10-20 08:35:27 -0600)
----------------------------------------------------------------
for-7.4/io_uring-20261021
----------------------------------------------------------------
Austin Schuh (2):
io_uring/wait: wake real-time waiters from hard interrupt context
io_uring/futex: return a wait's data to the cache when it fails to arm
Caleb Sander Mateos (4):
io_uring/rw: keep CQE flags on iopoll requests when adding kbuf flags
io_uring: move req_set_*() to public header
io_uring/cmd: split io_uring_cmd_set_res() from io_uring_cmd_done()
nvme/ioctl: call io_uring_cmd_set_res32() in ->end_io()
Cen Zhang (Microsoft Security FORGE Labs) (1):
io_uring/cancel: don't spin on local work the task can't run
Christoph Hellwig (2):
io_uring: cleanup __io_prep_rw
io_uring: cleanup the io_uring_attr_pi definition
David Wei (1):
io_uring/memmap: fix non-compound alloc fallback with memcg accounting
Eugene Gvozdetsky (1):
io_uring/register: don't exempt disabled rings from task restrictions
Gabriel Krisman Bertazi (2):
io_uring/net: let io_recv_buf_select return the length of the buffer region
io_uring/net: don't overconsume buffers when using MSG_TRUNC
Hengyu Liang (1):
io_uring: do not charge the SQ/CQ rings to RLIMIT_MEMLOCK
Hui Peng (6):
io_uring/bpf_filter: mark source as COW when cloning filters
io_uring: only post the dummy skip CQE on CQE_MIXED rings
io_uring: fix free entry check for 32b CQEs on CQE32 rings
io_uring: zero big_cqe for aux CQEs on CQE32 rings
io_uring: check for room before posting the dummy skip CQE
io_uring/rsrc: fix accounting for cloned buffers with huge pages
Jann Horn (1):
io_uring/fdinfo: ignore IORING_CQE_F_32 in last CQ array slot
Jens Axboe (20):
io_uring/rw: end write accounting from ->ki_complete
Merge branch 'io_uring-7.3' into for-7.4/io_uring
io_uring/io-wq: put the request file before posting a completion
io_uring: post io-wq completions from the last request reference
io_uring/rw: don't reap io-wq IOPOLL completions while io-wq has a reference
io_uring: put request files before posting the completions
io_uring/uring_cmd: only cancel requests of the given task
io_uring/notif: count pending zerocopy notifications per ring
io_uring/cancel: cancel and wait for all requests on process exit
io_uring: run cancelations synchronously on ring release
io_uring: drop registered files and buffers at release time
io_uring: wait for in-flight requests on ring release
io_uring: fix task_work add use-after-free with SQPOLL
io_uring/kbuf: don't charge provided buffer rings to RLIMIT_MEMLOCK
Merge branch 'io_uring-7.3' into for-7.4/io_uring
io_uring/timeout: don't put a sequence target behind the last flush
io_uring/timeout: don't flush with the sequence behind the last flush
io_uring/timeout: don't lose a cancel as io-wq arms a timeout
io_uring/poll: don't loop on HUP with multiple references
io_uring: end the drain when the drain request completes
Josef Bacik (43):
io_uring/waitid: own the request before clearing ->head
io_uring/cmd: don't leave list poison in ->hash_node
io_uring/wait: don't spin on a stuck overflow list
io_uring/io-wq: don't lose the signal that ends work
io_uring/io-wq: don't hide a link from cancellations
io_uring: don't flood a cancelling task with task_work
io_uring: don't lose the DEFER_TASKRUN wake up
io_uring/cancel: rearm local work wake up before sleep
io_uring/mpscq: disable preemption while pushing
io_uring/io-wq: don't go to sleep on pending work
io_uring/io-wq: don't strand work when a worker exits
io_uring/io-wq: don't exit with a creation pending
io_uring/io-wq: let cancel find picked up hashed work
io_uring/poll: don't lose a cancel as io-wq arms poll
io_uring: don't lose a cancel as io-wq parks a request
io_uring/cancel: don't forget that the work was running
io_uring/cancel: recognize "no timeout" on 32-bit
io_uring/cancel: let CANCEL_ALL find parked requests
io_uring: wake ring pollers for local task_work
io_uring/wait: look at all CQ waiters on wake up
io_uring/poll: drop stale double poll entry on rearm
io_uring/futex: allocate private hash before waiting
io_uring: drop the CQE cache if a refill fails
io_uring: don't split 128b SQEs at the SQPOLL cap
io_uring/register: don't wrap 32b CQEs when resizing
io_uring/register: handle index wrap when resizing
io_uring/register: keep 128b SQEs intact on resize
io_uring/fdinfo: fix CQE dump of CQE32 rings
io_uring/timeout: don't skip over reached sequences
io_uring/timeout: keep repeat count on multishot update
io_uring/timeout: use the right clock for ABS updates
io_uring/wait: no early -ETIME if min_wait finds work
io_uring/napi: make stale entries time out after 60s
io_uring/napi: don't busy poll past an expired timeout
io_uring/zcrx: fix buffer offsets in areas above 4GB
io_uring/kbuf: handle index wrap in last buffer check
io_uring/sqpoll: let the thread sleep on disabled rings
io_uring/openclose: keep the lock in io_pipe_fixed()
io_uring: don't pass restart error codes to userspace
io_uring/net: don't retry recv on uncommitted buffers
io_uring/timeout: no ABS update of multishot timeouts
io_uring/timeout: don't end a linked timeout with 1
io_uring: look up the file before queueing to io-wq
Juanlu Herrero (1):
io_uring/poll: avoid retry wakeup loss when dropping ownership
Junyeong Lee (1):
io_uring/waitid: prevent cancel reference wrap
Junyuan Feng (1):
io_uring/zcrx: requeue multishot receives stopped by a local resource
Natasha Klaus (1):
io_uring/net: populate CONNECT filter fields for 24-byte sockaddr_in6
Nickolai Zeldovich (1):
io_uring/waitid: return -EAGAIN for a non-blocking pidfd
Oleg Nesterov (1):
io_uring/io-wq: don't call try_to_wake_up() twice in io_wq_worker_wake()
Tamaki Yanagawa (1):
io_uring/net: keep recv buffer select length within MAX_RW_COUNT
Xiaochuan Li (1):
io_uring/io-wq: release raw spinlock before calling wake_up()
Yao Kai (1):
io_uring: initialize task context before running the BPF loop
lollipopkit (1):
io_uring/cmd_net: end TX_TIMESTAMP multishot when the CQ is full
drivers/nvme/host/ioctl.c | 19 +-
include/linux/io_uring.h | 32 ++++
include/linux/io_uring/cmd.h | 34 +++-
include/linux/io_uring_types.h | 9 +
include/uapi/linux/io_uring.h | 15 +-
io_uring/bpf_filter.c | 1 +
io_uring/cancel.c | 135 +++++++++++--
io_uring/cancel.h | 15 +-
io_uring/cmd_net.c | 19 +-
io_uring/fdinfo.c | 23 ++-
io_uring/futex.c | 38 +++-
io_uring/io-wq.c | 138 +++++++++++---
io_uring/io_uring.c | 417 ++++++++++++++++++++++++++++++++---------
io_uring/io_uring.h | 67 ++++---
io_uring/kbuf.c | 8 +-
io_uring/loop.c | 13 +-
io_uring/memmap.c | 18 +-
io_uring/memmap.h | 2 +-
io_uring/mpscq.h | 14 +-
io_uring/napi.c | 4 +-
io_uring/net.c | 81 ++++++--
io_uring/notif.c | 2 +
io_uring/openclose.c | 11 +-
io_uring/poll.c | 38 +++-
io_uring/refs.h | 27 +++
io_uring/register.c | 75 +++++++-
io_uring/rsrc.c | 42 ++++-
io_uring/rw.c | 74 ++++----
io_uring/sqpoll.c | 7 +
io_uring/timeout.c | 120 +++++++++---
io_uring/timeout.h | 2 +
io_uring/tw.c | 39 +++-
io_uring/uring_cmd.c | 25 +--
io_uring/uring_cmd.h | 2 +-
io_uring/wait.c | 48 +++--
io_uring/wait.h | 15 ++
io_uring/waitid.c | 23 ++-
io_uring/zcrx.c | 13 +-
38 files changed, 1297 insertions(+), 368 deletions(-)
--
Jens Axboe
reply other threads:[~2026-10-21 14:40 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8bbd8607-bc13-4070-8791-07cdfa31b45c@kernel.dk \
--to=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox