diff mbox series

[1/1] io_uring/net: fix zc fixed buf lifetime

Message ID dd6406ff8a90887f2b36ed6205dac9fda17c1f35.1663366886.git.asml.silence@gmail.com (mailing list archive)
State New
Headers show
Series [1/1] io_uring/net: fix zc fixed buf lifetime | expand

Commit Message

Pavel Begunkov Sept. 16, 2022, 10:22 p.m. UTC
Notifications usually outlive requests, so we need to pin buffers with
it by assigning a rsrc to it instead of the request.

Fixed: b48c312be05e8 ("io_uring/net: simplify zerocopy send user API")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 io_uring/net.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

Comments

Stefan Metzmacher Sept. 17, 2022, 10:27 a.m. UTC | #1
Am 17.09.22 um 00:22 schrieb Pavel Begunkov:
> Notifications usually outlive requests, so we need to pin buffers with
> it by assigning a rsrc to it instead of the request.
> 
> Fixed: b48c312be05e8 ("io_uring/net: simplify zerocopy send user API")
> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>

Looks good to me :-)

metze
Jens Axboe Sept. 17, 2022, 11:58 a.m. UTC | #2
On 9/17/22 4:27 AM, Stefan Metzmacher wrote:
> Am 17.09.22 um 00:22 schrieb Pavel Begunkov:
>> Notifications usually outlive requests, so we need to pin buffers with
>> it by assigning a rsrc to it instead of the request.
>>
>> Fixed: b48c312be05e8 ("io_uring/net: simplify zerocopy send user API")
>> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
> 
> Looks good to me :-)

Can I turn that into an acked-by or reviewed-by?
Stefan Metzmacher Sept. 18, 2022, 9:29 a.m. UTC | #3
Am 17.09.22 um 13:58 schrieb Jens Axboe:
> On 9/17/22 4:27 AM, Stefan Metzmacher wrote:
>> Am 17.09.22 um 00:22 schrieb Pavel Begunkov:
>>> Notifications usually outlive requests, so we need to pin buffers with
>>> it by assigning a rsrc to it instead of the request.
>>>
>>> Fixed: b48c312be05e8 ("io_uring/net: simplify zerocopy send user API")
>>> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
>>
>> Looks good to me :-)
> 
> Can I turn that into an acked-by or reviewed-by?

reviewed-by is fine.

metze
Jens Axboe Sept. 18, 2022, 11:10 a.m. UTC | #4
On Fri, 16 Sep 2022 23:22:57 +0100, Pavel Begunkov wrote:
> Notifications usually outlive requests, so we need to pin buffers with
> it by assigning a rsrc to it instead of the request.
> 
> 

Applied, thanks!

[1/1] io_uring/net: fix zc fixed buf lifetime
      commit: e3366e0234971a09f0e16f0e6fa16f4cbae45e47

Best regards,
diff mbox series

Patch

diff --git a/io_uring/net.c b/io_uring/net.c
index e9efed40cf3d..60e392f7f2dc 100644
--- a/io_uring/net.c
+++ b/io_uring/net.c
@@ -905,6 +905,13 @@  int io_sendzc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 	if (zc->flags & ~(IORING_RECVSEND_POLL_FIRST |
 			  IORING_RECVSEND_FIXED_BUF))
 		return -EINVAL;
+	notif = zc->notif = io_alloc_notif(ctx);
+	if (!notif)
+		return -ENOMEM;
+	notif->cqe.user_data = req->cqe.user_data;
+	notif->cqe.res = 0;
+	notif->cqe.flags = IORING_CQE_F_NOTIF;
+	req->flags |= REQ_F_NEED_CLEANUP;
 	if (zc->flags & IORING_RECVSEND_FIXED_BUF) {
 		unsigned idx = READ_ONCE(sqe->buf_index);
 
@@ -912,15 +919,8 @@  int io_sendzc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 			return -EFAULT;
 		idx = array_index_nospec(idx, ctx->nr_user_bufs);
 		req->imu = READ_ONCE(ctx->user_bufs[idx]);
-		io_req_set_rsrc_node(req, ctx, 0);
+		io_req_set_rsrc_node(notif, ctx, 0);
 	}
-	notif = zc->notif = io_alloc_notif(ctx);
-	if (!notif)
-		return -ENOMEM;
-	notif->cqe.user_data = req->cqe.user_data;
-	notif->cqe.res = 0;
-	notif->cqe.flags = IORING_CQE_F_NOTIF;
-	req->flags |= REQ_F_NEED_CLEANUP;
 
 	zc->buf = u64_to_user_ptr(READ_ONCE(sqe->addr));
 	zc->len = READ_ONCE(sqe->len);