FAILED: patch "[PATCH] io_uring/net: don't lose partial send_zc on fail" failed to apply to 6.0-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.0-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
5693bcce892d ("io_uring/net: don't lose partial send_zc on fail") 7e6b638ed501 ("io_uring/net: don't lose partial send/recv on fail")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 5693bcce892d7b8b15a7a92b011d3d40a023b53c Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Wed, 21 Sep 2022 12:17:49 +0100
Subject: [PATCH] io_uring/net: don't lose partial send_zc on fail
Partial zc send may end up in io_req_complete_failed(), which not only would return invalid result but also mask out the notification leading to lifetime issues.
io_uring/net.c +16 -0
@@ -1103,6 +1103,22 @@ void io_sendrecv_fail(struct io_kiocb *req)io_req_set_res (req, res, req->cqe.flags); } +void io_send_zc_fail (struct io_kiocb *req) +{ + struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); +int res = req->cqe.res; + +if (req->flags &REQ_F_PARTIAL_IO ) { +if (req->flags &REQ_F_NEED_CLEANUP ) { +io_notif_flush (sr->notif); + sr->notif =NULL ; + req->flags &= ~REQ_F_NEED_CLEANUP ; + } + res = sr->done_io; + } +io_req_set_res (req, res, req->cqe.flags); +} +int io_accept_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe) { struct io_accept *accept = io_kiocb_to_cmd(req, struct io_accept);
io_uring/net.h +1 -0
@@ -58,6 +58,7 @@ int io_connect(struct io_kiocb *req, unsigned int issue_flags);int io_sendzc (struct io_kiocb *req,unsigned int issue_flags);int io_sendzc_prep (struct io_kiocb *req,const struct io_uring_sqe *sqe);void io_sendzc_cleanup (struct io_kiocb *req); +void io_send_zc_fail (struct io_kiocb *req);void io_netmsg_cache_free (struct io_cache_entry *entry);#else
io_uring/opdef.c +1 -0
@@ -497,6 +497,7 @@ const struct io_op_def io_op_defs[] = { .issue = io_sendzc, .prep_async = io_sendzc_prep_async, .cleanup = io_sendzc_cleanup, + .fail = io_send_zc_fail, #else .prep = io_eopnotsupp_prep,#endif