mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
io_uring/net: let io_recv_buf_select return the length of the buffer region
In preparation to using this field as an upper limit to truncation,
return the size of the allocated region.
Fixes: ae98dbf43d ("io_uring/kbuf: add support for incremental buffer consumption")
Cc: stable@vger.kernel.org
Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de>
Link: https://patch.msgid.link/20260902230041.1320658-2-krisman@suse.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
796aa05475
commit
dcbd1c0548
|
|
@ -1108,6 +1108,7 @@ static int io_recv_buf_select(struct io_kiocb *req, struct io_async_msghdr *kmsg
|
||||||
struct io_br_sel *sel, unsigned int issue_flags)
|
struct io_br_sel *sel, unsigned int issue_flags)
|
||||||
{
|
{
|
||||||
struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg);
|
struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg);
|
||||||
|
size_t len;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -1153,13 +1154,14 @@ static int io_recv_buf_select(struct io_kiocb *req, struct io_async_msghdr *kmsg
|
||||||
/* special case 1 vec, can be a fast path */
|
/* special case 1 vec, can be a fast path */
|
||||||
if (ret == 1) {
|
if (ret == 1) {
|
||||||
sr->buf = arg.iovs[0].iov_base;
|
sr->buf = arg.iovs[0].iov_base;
|
||||||
sr->len = arg.iovs[0].iov_len;
|
len = sr->len = arg.iovs[0].iov_len;
|
||||||
goto map_ubuf;
|
goto map_ubuf;
|
||||||
}
|
}
|
||||||
iov_iter_init(&kmsg->msg.msg_iter, ITER_DEST, arg.iovs, ret,
|
iov_iter_init(&kmsg->msg.msg_iter, ITER_DEST, arg.iovs, ret,
|
||||||
arg.out_len);
|
arg.out_len);
|
||||||
|
len = arg.out_len;
|
||||||
} else {
|
} else {
|
||||||
size_t len = sel->val;
|
len = sel->val;
|
||||||
|
|
||||||
*sel = io_buffer_select(req, &len, sr->buf_group, issue_flags);
|
*sel = io_buffer_select(req, &len, sr->buf_group, issue_flags);
|
||||||
if (!sel->addr)
|
if (!sel->addr)
|
||||||
|
|
@ -1173,7 +1175,7 @@ static int io_recv_buf_select(struct io_kiocb *req, struct io_async_msghdr *kmsg
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int io_recv(struct io_kiocb *req, unsigned int issue_flags)
|
int io_recv(struct io_kiocb *req, unsigned int issue_flags)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user