]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 Oct 2022 09:35:49 +0000 (11:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 Oct 2022 09:35:49 +0000 (11:35 +0200)
added patches:
io_uring-net-don-t-lose-partial-send_zc-on-fail.patch
io_uring-net-don-t-skip-notifs-for-failed-requests.patch
io_uring-net-fix-notif-cqe-reordering.patch
io_uring-net-refactor-io_sr_msg-types.patch
io_uring-net-rename-io_sendzc.patch
io_uring-net-use-io_sr_msg-for-sendzc.patch

queue-6.0/io_uring-net-don-t-lose-partial-send_zc-on-fail.patch [new file with mode: 0644]
queue-6.0/io_uring-net-don-t-skip-notifs-for-failed-requests.patch [new file with mode: 0644]
queue-6.0/io_uring-net-fix-notif-cqe-reordering.patch [new file with mode: 0644]
queue-6.0/io_uring-net-refactor-io_sr_msg-types.patch [new file with mode: 0644]
queue-6.0/io_uring-net-rename-io_sendzc.patch [new file with mode: 0644]
queue-6.0/io_uring-net-use-io_sr_msg-for-sendzc.patch [new file with mode: 0644]
queue-6.0/series

diff --git a/queue-6.0/io_uring-net-don-t-lose-partial-send_zc-on-fail.patch b/queue-6.0/io_uring-net-don-t-lose-partial-send_zc-on-fail.patch
new file mode 100644 (file)
index 0000000..d934537
--- /dev/null
@@ -0,0 +1,72 @@
+From foo@baz Mon Oct 17 11:35:32 AM CEST 2022
+From: Pavel Begunkov <asml.silence@gmail.com>
+Date: Sun, 16 Oct 2022 21:33:27 +0100
+Subject: io_uring/net: don't lose partial send_zc on fail
+To: stable@vger.kernel.org
+Cc: Jens Axboe <axboe@kernel.dk>, asml.silence@gmail.com
+Message-ID: <3493fc0ee75f3cf8a111e2e8e1a35f833f29aaf2.1665951939.git.asml.silence@gmail.com>
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ upstream commit 5693bcce892d7b8b15a7a92b011d3d40a023b53c ]
+
+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.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Link: https://lore.kernel.org/r/5673285b5e83e6ceca323727b4ddaa584b5cc91e.1663668091.git.asml.silence@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/net.c   |   16 ++++++++++++++++
+ io_uring/net.h   |    1 +
+ io_uring/opdef.c |    1 +
+ 3 files changed, 18 insertions(+)
+
+--- a/io_uring/net.c
++++ b/io_uring/net.c
+@@ -1093,6 +1093,22 @@ void io_sendrecv_fail(struct io_kiocb *r
+       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);
+--- a/io_uring/net.h
++++ b/io_uring/net.h
+@@ -58,6 +58,7 @@ int io_connect(struct io_kiocb *req, uns
+ 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
+--- a/io_uring/opdef.c
++++ b/io_uring/opdef.c
+@@ -494,6 +494,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
diff --git a/queue-6.0/io_uring-net-don-t-skip-notifs-for-failed-requests.patch b/queue-6.0/io_uring-net-don-t-skip-notifs-for-failed-requests.patch
new file mode 100644 (file)
index 0000000..fd088ac
--- /dev/null
@@ -0,0 +1,90 @@
+From foo@baz Mon Oct 17 11:35:32 AM CEST 2022
+From: Pavel Begunkov <asml.silence@gmail.com>
+Date: Sun, 16 Oct 2022 21:33:29 +0100
+Subject: io_uring/net: don't skip notifs for failed requests
+To: stable@vger.kernel.org
+Cc: Jens Axboe <axboe@kernel.dk>, asml.silence@gmail.com
+Message-ID: <6e84a6e0dbfbbb43379a82abd262ce0bd4311ca2.1665951939.git.asml.silence@gmail.com>
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ upstream commit 6ae91ac9a6aa7d6005c3c6d0f4d263fbab9f377f ]
+
+We currently only add a notification CQE when the send succeded, i.e.
+cqe.res >= 0. However, it'd be more robust to do buffer notifications
+for failed requests as well in case drivers decide do something fanky.
+
+Always return a buffer notification after initial prep, don't hide it.
+This behaviour is better aligned with documentation and the patch also
+helps the userspace to respect it.
+
+Cc: stable@vger.kernel.org # 6.0
+Suggested-by: Stefan Metzmacher <metze@samba.org>
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Link: https://lore.kernel.org/r/9c8bead87b2b980fcec441b8faef52188b4a6588.1664292100.git.asml.silence@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/net.c |   22 ++++++----------------
+ 1 file changed, 6 insertions(+), 16 deletions(-)
+
+--- a/io_uring/net.c
++++ b/io_uring/net.c
+@@ -879,7 +879,6 @@ void io_send_zc_cleanup(struct io_kiocb
+ {
+       struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+-      zc->notif->flags |= REQ_F_CQE_SKIP;
+       io_notif_flush(zc->notif);
+       zc->notif = NULL;
+ }
+@@ -996,7 +995,7 @@ int io_send_zc(struct io_kiocb *req, uns
+       struct msghdr msg;
+       struct iovec iov;
+       struct socket *sock;
+-      unsigned msg_flags, cflags;
++      unsigned msg_flags;
+       int ret, min_ret = 0;
+       sock = sock_from_file(req->file);
+@@ -1064,8 +1063,6 @@ int io_send_zc(struct io_kiocb *req, uns
+                       req->flags |= REQ_F_PARTIAL_IO;
+                       return io_setup_async_addr(req, addr, issue_flags);
+               }
+-              if (ret < 0 && !zc->done_io)
+-                      zc->notif->flags |= REQ_F_CQE_SKIP;
+               if (ret == -ERESTARTSYS)
+                       ret = -EINTR;
+               req_set_fail(req);
+@@ -1078,8 +1075,7 @@ int io_send_zc(struct io_kiocb *req, uns
+       io_notif_flush(zc->notif);
+       req->flags &= ~REQ_F_NEED_CLEANUP;
+-      cflags = ret >= 0 ? IORING_CQE_F_MORE : 0;
+-      io_req_set_res(req, ret, cflags);
++      io_req_set_res(req, ret, IORING_CQE_F_MORE);
+       return IOU_OK;
+ }
+@@ -1096,17 +1092,11 @@ void io_sendrecv_fail(struct io_kiocb *r
+ 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);
++      if (req->flags & REQ_F_PARTIAL_IO)
++              req->cqe.res = sr->done_io;
++      if (req->flags & REQ_F_NEED_CLEANUP)
++              req->cqe.flags |= IORING_CQE_F_MORE;
+ }
+ int io_accept_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
diff --git a/queue-6.0/io_uring-net-fix-notif-cqe-reordering.patch b/queue-6.0/io_uring-net-fix-notif-cqe-reordering.patch
new file mode 100644 (file)
index 0000000..6aa82d2
--- /dev/null
@@ -0,0 +1,46 @@
+From foo@baz Mon Oct 17 11:35:32 AM CEST 2022
+From: Pavel Begunkov <asml.silence@gmail.com>
+Date: Sun, 16 Oct 2022 21:33:30 +0100
+Subject: io_uring/net: fix notif cqe reordering
+To: stable@vger.kernel.org
+Cc: Jens Axboe <axboe@kernel.dk>, asml.silence@gmail.com
+Message-ID: <54ecb468aac60ed3f6165be94144044cf62bbe58.1665951939.git.asml.silence@gmail.com>
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ upstream commit 108893ddcc4d3aa0a4a02aeb02d478e997001227 ]
+
+send zc is not restricted to !IO_URING_F_UNLOCKED anymore and so
+we can't use task-tw ordering trick to order notification cqes
+with requests completions. In this case leave it alone and let
+io_send_zc_cleanup() flush it.
+
+Cc: stable@vger.kernel.org
+Fixes: 53bdc88aac9a2 ("io_uring/notif: order notif vs send CQEs")
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Link: https://lore.kernel.org/r/0031f3a00d492e814a4a0935a2029a46d9c9ba06.1664486545.git.asml.silence@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/net.c |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- a/io_uring/net.c
++++ b/io_uring/net.c
+@@ -1073,8 +1073,14 @@ int io_send_zc(struct io_kiocb *req, uns
+       else if (zc->done_io)
+               ret = zc->done_io;
+-      io_notif_flush(zc->notif);
+-      req->flags &= ~REQ_F_NEED_CLEANUP;
++      /*
++       * If we're in io-wq we can't rely on tw ordering guarantees, defer
++       * flushing notif to io_send_zc_cleanup()
++       */
++      if (!(issue_flags & IO_URING_F_UNLOCKED)) {
++              io_notif_flush(zc->notif);
++              req->flags &= ~REQ_F_NEED_CLEANUP;
++      }
+       io_req_set_res(req, ret, IORING_CQE_F_MORE);
+       return IOU_OK;
+ }
diff --git a/queue-6.0/io_uring-net-refactor-io_sr_msg-types.patch b/queue-6.0/io_uring-net-refactor-io_sr_msg-types.patch
new file mode 100644 (file)
index 0000000..9a879f6
--- /dev/null
@@ -0,0 +1,56 @@
+From foo@baz Mon Oct 17 11:35:32 AM CEST 2022
+From: Pavel Begunkov <asml.silence@gmail.com>
+Date: Sun, 16 Oct 2022 21:33:25 +0100
+Subject: io_uring/net: refactor io_sr_msg types
+To: stable@vger.kernel.org
+Cc: Jens Axboe <axboe@kernel.dk>, asml.silence@gmail.com
+Message-ID: <b14da215103e573d42100d252cfd130b7a4fbdba.1665951939.git.asml.silence@gmail.com>
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ upstream commit 0b048557db761d287777360a100e1d010760d209 ]
+
+In preparation for using struct io_sr_msg for zerocopy sends, clean up
+types. First, flags can be u16 as it's provided by the userspace in u16
+ioprio, as well as addr_len. This saves us 4 bytes. Also use unsigned
+for size and done_io, both are as well limited to u32.
+
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Link: https://lore.kernel.org/r/42c2639d6385b8b2181342d2af3a42d3b1c5bcd2.1662639236.git.asml.silence@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/net.c |   14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+--- a/io_uring/net.c
++++ b/io_uring/net.c
+@@ -56,21 +56,21 @@ struct io_sr_msg {
+               struct user_msghdr __user       *umsg;
+               void __user                     *buf;
+       };
++      unsigned                        len;
++      unsigned                        done_io;
+       unsigned                        msg_flags;
+-      unsigned                        flags;
+-      size_t                          len;
+-      size_t                          done_io;
++      u16                             flags;
+ };
+ struct io_sendzc {
+       struct file                     *file;
+       void __user                     *buf;
+-      size_t                          len;
++      unsigned                        len;
++      unsigned                        done_io;
+       unsigned                        msg_flags;
+-      unsigned                        flags;
+-      unsigned                        addr_len;
++      u16                             flags;
++      u16                             addr_len;
+       void __user                     *addr;
+-      size_t                          done_io;
+       struct io_kiocb                 *notif;
+ };
diff --git a/queue-6.0/io_uring-net-rename-io_sendzc.patch b/queue-6.0/io_uring-net-rename-io_sendzc.patch
new file mode 100644 (file)
index 0000000..2e4c2b2
--- /dev/null
@@ -0,0 +1,85 @@
+From foo@baz Mon Oct 17 11:35:32 AM CEST 2022
+From: Pavel Begunkov <asml.silence@gmail.com>
+Date: Sun, 16 Oct 2022 21:33:28 +0100
+Subject: io_uring/net: rename io_sendzc()
+To: stable@vger.kernel.org
+Cc: Jens Axboe <axboe@kernel.dk>, asml.silence@gmail.com
+Message-ID: <7f580aebe73419deff39d7300544b1ca559a9057.1665951939.git.asml.silence@gmail.com>
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ upstream commit b0e9b5517eb12fa80c72e205fe28534c2e2f39b9 ]
+
+Simple renaming of io_sendzc*() functions in preparatio to adding
+a zerocopy sendmsg variant.
+
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Link: https://lore.kernel.org/r/265af46829e6076dd220011b1858dc3151969226.1663668091.git.asml.silence@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/net.c   |    6 +++---
+ io_uring/net.h   |    6 +++---
+ io_uring/opdef.c |    6 +++---
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+--- a/io_uring/net.c
++++ b/io_uring/net.c
+@@ -875,7 +875,7 @@ out_free:
+       return ret;
+ }
+-void io_sendzc_cleanup(struct io_kiocb *req)
++void io_send_zc_cleanup(struct io_kiocb *req)
+ {
+       struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+@@ -884,7 +884,7 @@ void io_sendzc_cleanup(struct io_kiocb *
+       zc->notif = NULL;
+ }
+-int io_sendzc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
++int io_send_zc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
+ {
+       struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+       struct io_ring_ctx *ctx = req->ctx;
+@@ -989,7 +989,7 @@ static int io_sg_from_iter(struct sock *
+       return ret;
+ }
+-int io_sendzc(struct io_kiocb *req, unsigned int issue_flags)
++int io_send_zc(struct io_kiocb *req, unsigned int issue_flags)
+ {
+       struct sockaddr_storage __address, *addr = NULL;
+       struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+--- a/io_uring/net.h
++++ b/io_uring/net.h
+@@ -55,9 +55,9 @@ int io_connect_prep_async(struct io_kioc
+ int io_connect_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
+ 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);
++int io_send_zc(struct io_kiocb *req, unsigned int issue_flags);
++int io_send_zc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
++void io_send_zc_cleanup(struct io_kiocb *req);
+ void io_send_zc_fail(struct io_kiocb *req);
+ void io_netmsg_cache_free(struct io_cache_entry *entry);
+--- a/io_uring/opdef.c
++++ b/io_uring/opdef.c
+@@ -490,10 +490,10 @@ const struct io_op_def io_op_defs[] = {
+               .manual_alloc           = 1,
+ #if defined(CONFIG_NET)
+               .async_size             = sizeof(struct io_async_msghdr),
+-              .prep                   = io_sendzc_prep,
+-              .issue                  = io_sendzc,
++              .prep                   = io_send_zc_prep,
++              .issue                  = io_send_zc,
+               .prep_async             = io_sendzc_prep_async,
+-              .cleanup                = io_sendzc_cleanup,
++              .cleanup                = io_send_zc_cleanup,
+               .fail                   = io_send_zc_fail,
+ #else
+               .prep                   = io_eopnotsupp_prep,
diff --git a/queue-6.0/io_uring-net-use-io_sr_msg-for-sendzc.patch b/queue-6.0/io_uring-net-use-io_sr_msg-for-sendzc.patch
new file mode 100644 (file)
index 0000000..a4acefb
--- /dev/null
@@ -0,0 +1,79 @@
+From foo@baz Mon Oct 17 11:35:32 AM CEST 2022
+From: Pavel Begunkov <asml.silence@gmail.com>
+Date: Sun, 16 Oct 2022 21:33:26 +0100
+Subject: io_uring/net: use io_sr_msg for sendzc
+To: stable@vger.kernel.org
+Cc: Jens Axboe <axboe@kernel.dk>, asml.silence@gmail.com
+Message-ID: <b76d955ed29df5670f47dbc6bbb581a1b22ffdb3.1665951939.git.asml.silence@gmail.com>
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ upstream commit ac9e5784bbe72f4f603d1af84760ec09bc0b5ccd ]
+
+Reuse struct io_sr_msg for zerocopy sends, which is handy. There is
+only one zerocopy specific field, namely .notif, and we have enough
+space for it.
+
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Link: https://lore.kernel.org/r/408c5b1b2d8869e1a12da5f5a78ed72cac112149.1662639236.git.asml.silence@gmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/net.c |   18 +++++-------------
+ 1 file changed, 5 insertions(+), 13 deletions(-)
+
+--- a/io_uring/net.c
++++ b/io_uring/net.c
+@@ -60,15 +60,7 @@ struct io_sr_msg {
+       unsigned                        done_io;
+       unsigned                        msg_flags;
+       u16                             flags;
+-};
+-
+-struct io_sendzc {
+-      struct file                     *file;
+-      void __user                     *buf;
+-      unsigned                        len;
+-      unsigned                        done_io;
+-      unsigned                        msg_flags;
+-      u16                             flags;
++      /* used only for sendzc */
+       u16                             addr_len;
+       void __user                     *addr;
+       struct io_kiocb                 *notif;
+@@ -188,7 +180,7 @@ static int io_sendmsg_copy_hdr(struct io
+ int io_sendzc_prep_async(struct io_kiocb *req)
+ {
+-      struct io_sendzc *zc = io_kiocb_to_cmd(req, struct io_sendzc);
++      struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+       struct io_async_msghdr *io;
+       int ret;
+@@ -885,7 +877,7 @@ out_free:
+ void io_sendzc_cleanup(struct io_kiocb *req)
+ {
+-      struct io_sendzc *zc = io_kiocb_to_cmd(req, struct io_sendzc);
++      struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+       zc->notif->flags |= REQ_F_CQE_SKIP;
+       io_notif_flush(zc->notif);
+@@ -894,7 +886,7 @@ void io_sendzc_cleanup(struct io_kiocb *
+ int io_sendzc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
+ {
+-      struct io_sendzc *zc = io_kiocb_to_cmd(req, struct io_sendzc);
++      struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+       struct io_ring_ctx *ctx = req->ctx;
+       struct io_kiocb *notif;
+@@ -1000,7 +992,7 @@ static int io_sg_from_iter(struct sock *
+ int io_sendzc(struct io_kiocb *req, unsigned int issue_flags)
+ {
+       struct sockaddr_storage __address, *addr = NULL;
+-      struct io_sendzc *zc = io_kiocb_to_cmd(req, struct io_sendzc);
++      struct io_sr_msg *zc = io_kiocb_to_cmd(req, struct io_sr_msg);
+       struct msghdr msg;
+       struct iovec iov;
+       struct socket *sock;
index 2ad3d2d50a4de652f4df8301e3a2ab63c64f61df..bb2a322946212a887072323278fbb290cbacf898 100644 (file)
@@ -932,3 +932,9 @@ net-sparx5-fix-return-type-of-sparx5_port_xmit_impl.patch
 perf-skip-and-warn-on-unknown-format-confign-attrs.patch
 perf-intel-pt-fix-segfault-in-intel_pt_print_info-with-uclibc.patch
 perf-intel-pt-fix-system_wide-dummy-event-for-hybrid.patch
+io_uring-net-refactor-io_sr_msg-types.patch
+io_uring-net-use-io_sr_msg-for-sendzc.patch
+io_uring-net-don-t-lose-partial-send_zc-on-fail.patch
+io_uring-net-rename-io_sendzc.patch
+io_uring-net-don-t-skip-notifs-for-failed-requests.patch
+io_uring-net-fix-notif-cqe-reordering.patch