mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
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
This commit is contained in:
@@ -404,7 +404,7 @@ enum io_uring_op {
|
||||
* will be contiguous from the starting buffer ID.
|
||||
*
|
||||
* IORING_SEND_VECTORIZED If set, SEND[_ZC] will take a pointer to a io_vec
|
||||
* to allow vectorized send operations.
|
||||
* to allow vectorized send operations.
|
||||
*/
|
||||
#define IORING_RECVSEND_POLL_FIRST (1U << 0)
|
||||
#define IORING_RECV_MULTISHOT (1U << 1)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
*
|
||||
* Also see the examples in the liburing library:
|
||||
*
|
||||
* git://git.kernel.dk/liburing
|
||||
* git://git.kernel.org/pub/scm/linux/kernel/git/axboe/liburing.git
|
||||
*
|
||||
* io_uring also uses READ/WRITE_ONCE() for _any_ store or load that happens
|
||||
* 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,
|
||||
if (!pid_child_should_wake(wo, p))
|
||||
return 0;
|
||||
|
||||
list_del_init(&wait->entry);
|
||||
|
||||
/* cancel is in progress */
|
||||
if (atomic_fetch_inc(&iw->refs) & IO_WAITID_REF_MASK)
|
||||
return 1;
|
||||
|
||||
req->io_task_work.func = io_waitid_cb;
|
||||
io_req_task_work_add(req);
|
||||
list_del_init(&wait->entry);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1079,6 +1079,7 @@ static ssize_t io_copy_page(struct io_copy_cache *cc, struct page *src_page,
|
||||
|
||||
cc->size -= n;
|
||||
cc->offset += n;
|
||||
src_offset += n;
|
||||
len -= n;
|
||||
copied += n;
|
||||
}
|
||||
@@ -1236,12 +1237,16 @@ io_zcrx_recv_skb(read_descriptor_t *desc, struct sk_buff *skb,
|
||||
|
||||
end = start + frag_iter->len;
|
||||
if (offset < end) {
|
||||
size_t count;
|
||||
|
||||
copy = end - offset;
|
||||
if (copy > len)
|
||||
copy = len;
|
||||
|
||||
off = offset - start;
|
||||
count = desc->count;
|
||||
ret = io_zcrx_recv_skb(desc, frag_iter, off, copy);
|
||||
desc->count = count;
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user