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
Unified · Split
| @@ -404,7 +404,7 @@ enum io_uring_op { · 403 unmodified lines | ||
| 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) |
| @@ -29,7 +29,7 @@ · 28 unmodified lines | ||
| 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 |
| @@ -230,13 +230,14 @@ static int io_waitid_wait(struct wait_queue_entry *wait, unsigned mode, · 229 unmodified lines | ||
| 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 | |
| @@ -1079,6 +1079,7 @@ static ssize_t io_copy_page(struct io_copy_cache *cc, struct page *src_page, · 1078 unmodified lines | ||
| 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 | } |
| @@ -1236,12 +1237,16 @@ io_zcrx_recv_skb(read_descriptor_t *desc, struct sk_buff *skb, · 151 unmodified lines | ||
| 1236 | 1237 | |
| 1237 | 1238 | end = start + frag_iter->len; |
| 1238 | 1239 | if (offset < end) { |
| 1240 | + size_t count; | |
| 1241 | + | |
| 1239 | 1242 | copy = end - offset; |
| 1240 | 1243 | if (copy > len) |
| 1241 | 1244 | copy = len; |
| 1242 | 1245 | |
| 1243 | 1246 | off = offset - start; |
| 1247 | + count = desc->count; | |
| 1244 | 1248 | ret = io_zcrx_recv_skb(desc, frag_iter, off, copy); |
| 1249 | + desc->count = count; | |
| 1245 | 1250 | if (ret < 0) |
| 1246 | 1251 | goto out; |
| 1247 | 1252 | |