Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'io_uring-6.15-20250522' of git://git.kernel.dk/linux

Pull io_uring fixes from Jens Axboe:

- Kill a duplicate function definition, which can cause linking issues
in certain .config configurations. Introduced in this cycle.

- Fix for a potential overflow CQE reordering issue if a re-schedule is
done during posting. Heading to stable.

- Fix for an issue with recv bundles, where certain conditions can lead
to gaps in the buffers, where a contiguous buffer range was expected.
Heading to stable.

* tag 'io_uring-6.15-20250522' of git://git.kernel.dk/linux:
io_uring/net: only retry recv bundle for a full transfer
io_uring: fix overflow resched cqe reordering
io_uring/cmd: axe duplicate io_uring_cmd_import_fixed_vec() declaration

+11 -10
+1
io_uring/io_uring.c
··· 636 636 * to care for a non-real case. 637 637 */ 638 638 if (need_resched()) { 639 + ctx->cqe_sentinel = ctx->cqe_cached; 639 640 io_cq_unlock_post(ctx); 640 641 mutex_unlock(&ctx->uring_lock); 641 642 cond_resched();
+10 -4
io_uring/net.c
··· 827 827 cflags |= IORING_CQE_F_SOCK_NONEMPTY; 828 828 829 829 if (sr->flags & IORING_RECVSEND_BUNDLE) { 830 - cflags |= io_put_kbufs(req, *ret, io_bundle_nbufs(kmsg, *ret), 830 + size_t this_ret = *ret - sr->done_io; 831 + 832 + cflags |= io_put_kbufs(req, *ret, io_bundle_nbufs(kmsg, this_ret), 831 833 issue_flags); 832 834 if (sr->retry) 833 835 cflags = req->cqe.flags | (cflags & CQE_F_MASK); 834 836 /* bundle with no more immediate buffers, we're done */ 835 837 if (req->flags & REQ_F_BL_EMPTY) 836 838 goto finish; 837 - /* if more is available, retry and append to this one */ 838 - if (!sr->retry && kmsg->msg.msg_inq > 0 && *ret > 0) { 839 + /* 840 + * If more is available AND it was a full transfer, retry and 841 + * append to this one 842 + */ 843 + if (!sr->retry && kmsg->msg.msg_inq > 0 && this_ret > 0 && 844 + !iov_iter_count(&kmsg->msg.msg_iter)) { 839 845 req->cqe.flags = cflags & ~CQE_F_MASK; 840 846 sr->len = kmsg->msg.msg_inq; 841 - sr->done_io += *ret; 847 + sr->done_io += this_ret; 842 848 sr->retry = true; 843 849 return false; 844 850 }
-6
io_uring/uring_cmd.h
··· 17 17 struct io_uring_task *tctx, bool cancel_all); 18 18 19 19 void io_cmd_cache_free(const void *entry); 20 - 21 - int io_uring_cmd_import_fixed_vec(struct io_uring_cmd *ioucmd, 22 - const struct iovec __user *uvec, 23 - size_t uvec_segs, 24 - int ddir, struct iov_iter *iter, 25 - unsigned issue_flags);