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 |
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
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?
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
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 --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);
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(-)