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.18-20251009' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux

Pull io_uring fixes from Jens Axboe:

- Fixup indentation in the UAPI header

- Two fixes for zcrx. One fixes receiving too much in some cases, and
the other deals with not correctly incrementing the source in the
fallback copy loop

- Fix for a race in the IORING_OP_WAITID command, where there was a
small window where the request would be left on the wait_queue_head
list even though it was being canceled/completed

- Update liburing git URL in the kernel tree

* tag 'io_uring-6.18-20251009' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux:
io_uring/zcrx: increment fallback loop src offset
io_uring/zcrx: fix overshooting recv limit
io_uring: use tab indentation for IORING_SEND_VECTORIZED comment
io_uring/waitid: always prune wait queue entry in io_waitid_wait()
io_uring: update liburing git URL

+9 -3
+1 -1
include/uapi/linux/io_uring.h
··· 404 404 * will be contiguous from the starting buffer ID. 405 405 * 406 406 * IORING_SEND_VECTORIZED If set, SEND[_ZC] will take a pointer to a io_vec 407 - * to allow vectorized send operations. 407 + * to allow vectorized send operations. 408 408 */ 409 409 #define IORING_RECVSEND_POLL_FIRST (1U << 0) 410 410 #define IORING_RECV_MULTISHOT (1U << 1)
+1 -1
io_uring/io_uring.c
··· 29 29 * 30 30 * Also see the examples in the liburing library: 31 31 * 32 - * git://git.kernel.dk/liburing 32 + * git://git.kernel.org/pub/scm/linux/kernel/git/axboe/liburing.git 33 33 * 34 34 * io_uring also uses READ/WRITE_ONCE() for _any_ store or load that happens 35 35 * from data shared between the kernel and application. This is done both
+2 -1
io_uring/waitid.c
··· 230 230 if (!pid_child_should_wake(wo, p)) 231 231 return 0; 232 232 233 + list_del_init(&wait->entry); 234 + 233 235 /* cancel is in progress */ 234 236 if (atomic_fetch_inc(&iw->refs) & IO_WAITID_REF_MASK) 235 237 return 1; 236 238 237 239 req->io_task_work.func = io_waitid_cb; 238 240 io_req_task_work_add(req); 239 - list_del_init(&wait->entry); 240 241 return 1; 241 242 } 242 243
+5
io_uring/zcrx.c
··· 1079 1079 1080 1080 cc->size -= n; 1081 1081 cc->offset += n; 1082 + src_offset += n; 1082 1083 len -= n; 1083 1084 copied += n; 1084 1085 } ··· 1237 1236 1238 1237 end = start + frag_iter->len; 1239 1238 if (offset < end) { 1239 + size_t count; 1240 + 1240 1241 copy = end - offset; 1241 1242 if (copy > len) 1242 1243 copy = len; 1243 1244 1244 1245 off = offset - start; 1246 + count = desc->count; 1245 1247 ret = io_zcrx_recv_skb(desc, frag_iter, off, copy); 1248 + desc->count = count; 1246 1249 if (ret < 0) 1247 1250 goto out; 1248 1251