FAILED: patch "[PATCH] io_uring/rw: fix missing ERESTARTSYS conversion in read paths" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-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]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x ab05caca123c6d0b41850b7c05b246e4dca4a770
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072912-barn-caddy-3cea@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ab05caca123c6d0b41850b7c05b246e4dca4a770 Mon Sep 17 00:00:00 2001
From: Yitang Yang <[email protected]>
Date: Wed, 22 Jul 2026 20:45:51 +0800
Subject: [PATCH] io_uring/rw: fix missing ERESTARTSYS conversion in read paths
Both read and write may receive internal restart error codes from the filesystem layer and should be converted to -EINTR. However, when multishot read support was added, the error code normalization was lost for both io_read() and io_read_mshot().
Extract the conversion into io_fixup_restart_res() and apply it in all three locations: io_rw_done(), io_read(), and io_read_mshot().
io_uring/rw.c +25 -17
@@ -615,6 +615,24 @@ static void io_complete_rw_iopoll(struct kiocb *kiocb, long res)smp_store_release (&req->iopoll_completed,1 ); } +static inline ssize_t io_fixup_restart_res (ssize_t ret) +{ +switch (ret) { +case -ERESTARTSYS : +case -ERESTARTNOINTR : +case -ERESTARTNOHAND : +case -ERESTART_RESTARTBLOCK : +/* +* We can't just restart the syscall, since previously +* submitted sqes may already be in progress. Just fail +* this IO with EINTR. +*/ +return -EINTR ; +default : +return ret; + } +} +static inline void io_rw_done (struct io_kiocb *req,ssize_t ret) { struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);
@@ -624,21 +642,8 @@ static inline void io_rw_done(struct io_kiocb *req, ssize_t ret)return ;/* transform internal restart error codes */ -if (unlikely (ret <0 )) { -switch (ret) { -case -ERESTARTSYS : -case -ERESTARTNOINTR : -case -ERESTARTNOHAND : -case -ERESTART_RESTARTBLOCK : -/* -* We can't just restart the syscall, since previously -* submitted sqes may already be in progress. Just fail -* this IO with EINTR. -*/ - ret = -EINTR ; -break ; - } - } +if (unlikely (ret <0 )) + ret =io_fixup_restart_res (ret);if (req->flags &REQ_F_IOPOLL )io_complete_rw_iopoll (&rw->kiocb, ret);
@@ -1034,7 +1039,8 @@ int io_read(struct io_kiocb *req, unsigned int issue_flags)if (req->flags &REQ_F_BUFFERS_COMMIT )io_kbuf_recycle (req, sel.buf_list, issue_flags); -return ret; + +return io_fixup_restart_res (ret); }int io_read_mshot (struct io_kiocb *req,unsigned int issue_flags)
@@ -1068,8 +1074,10 @@ int io_read_mshot(struct io_kiocb *req, unsigned int issue_flags)return IOU_RETRY ; }else if (ret <=0 ) {io_kbuf_recycle (req, sel.buf_list, issue_flags); -if (ret <0 ) +if (ret <0 ) { + ret =io_fixup_restart_res (ret);req_set_fail (req); + } }else if (!(req->flags &REQ_F_APOLL_MULTISHOT )) { cflags =io_put_kbuf (req, ret, sel.buf_list); }else {
Jens Axboe
maintainerQuoted 8 lines · On 7/29/26 7:50 AM, [email protected] wrote:
The patch below does not apply to the 6.1-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]>.To reproduce the conflict and resubmit, you may use the following commands:
Quoted 8 lines
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkoutFETCH_HEAD
git cherry-pick -xab05caca123c6d0b41850b7c05b246e4dca4a770
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072912-barn-caddy-3cea@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'Possible dependencies:
Here's a version for 6.12 - which begs the question, why aren't we just having LLMs do this work? Is it really worth punting this to the maintainer? We could still punt for review, but trivial conflict resolution seems like an area where we'd be better of having an LLM do it. At least compared to using maintainer time.
Signature · 1 line
Jens Axboe
From 694056a4170df694f0689aa62d413f8728638c9b Mon Sep 17 00:00:00 2001
From: Yitang Yang <[email protected]>
Date: Wed, 22 Jul 2026 20:45:51 +0800
Subject: [PATCH] io_uring/rw: fix missing ERESTARTSYS conversion in read paths
Commit ab05caca123c6d0b41850b7c05b246e4dca4a770 upstream.
Both read and write may receive internal restart error codes from the filesystem layer and should be converted to -EINTR. However, when multishot read support was added, the error code normalization was lost for both io_read() and io_read_mshot().
Extract the conversion into io_fixup_restart_res() and apply it in all three locations: io_rw_done(), io_read(), and io_read_mshot().
--- io_uring/rw.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-)
io_uring/rw.c +25 -17
@@ -560,6 +560,24 @@ static void io_complete_rw_iopoll(struct kiocb *kiocb, long res)smp_store_release (&req->iopoll_completed,1 ); } +static inline ssize_t io_fixup_restart_res (ssize_t ret) +{ +switch (ret) { +case -ERESTARTSYS : +case -ERESTARTNOINTR : +case -ERESTARTNOHAND : +case -ERESTART_RESTARTBLOCK : +/* +* We can't just restart the syscall, since previously +* submitted sqes may already be in progress. Just fail +* this IO with EINTR. +*/ +return -EINTR ; +default : +return ret; + } +} +static inline void io_rw_done (struct kiocb *kiocb,ssize_t ret) {/* IO was queued async, completion will happen later */
@@ -567,21 +585,8 @@ static inline void io_rw_done(struct kiocb *kiocb, ssize_t ret)return ;/* transform internal restart error codes */ -if (unlikely (ret <0 )) { -switch (ret) { -case -ERESTARTSYS : -case -ERESTARTNOINTR : -case -ERESTARTNOHAND : -case -ERESTART_RESTARTBLOCK : -/* -* We can't just restart the syscall, since previously -* submitted sqes may already be in progress. Just fail -* this IO with EINTR. -*/ - ret = -EINTR ; -break ; - } - } +if (unlikely (ret <0 )) + ret =io_fixup_restart_res (ret);INDIRECT_CALL_2 (kiocb->ki_complete, io_complete_rw_iopoll, io_complete_rw, kiocb, ret);
@@ -961,7 +966,8 @@ int io_read(struct io_kiocb *req, unsigned int issue_flags)if (req->flags &REQ_F_BUFFERS_COMMIT )io_kbuf_recycle (req, sel.buf_list, issue_flags); -return ret; + +return io_fixup_restart_res (ret); }int io_read_mshot (struct io_kiocb *req,unsigned int issue_flags)
@@ -995,8 +1001,10 @@ int io_read_mshot(struct io_kiocb *req, unsigned int issue_flags)return -EAGAIN ; }else if (ret <=0 ) {io_kbuf_recycle (req, sel.buf_list, issue_flags); -if (ret <0 ) +if (ret <0 ) { + ret =io_fixup_restart_res (ret);req_set_fail (req); + } }else if (!(req->flags &REQ_F_APOLL_MULTISHOT )) { cflags =io_put_kbuf (req, ret, sel.buf_list); }else {
Signature · 1 line
2.53.0
Jens Axboe
maintainerQuoted 6 lines · On 7/29/26 7:50 AM, [email protected] wrote:
The patch below does not apply to the 6.1-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]>.
Quoted 8 lines
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkoutFETCH_HEAD
git cherry-pick -xab05caca123c6d0b41850b7c05b246e4dca4a770
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072912-barn-caddy-3cea@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'
And here's the actual 6.1-stable one, that should be all 3.
Signature · 1 line
Jens Axboe
Jens Axboe
maintainerQuoted 8 lines · On 7/29/26 7:50 AM, [email protected] wrote:
The patch below does not apply to the 6.1-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]>.To reproduce the conflict and resubmit, you may use the following commands:
Quoted 8 lines
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkoutFETCH_HEAD
git cherry-pick -xab05caca123c6d0b41850b7c05b246e4dca4a770
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072912-barn-caddy-3cea@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'Possible dependencies:
And here's the _actual_ 6.1-stable patch.
Signature · 1 line
Jens Axboe
Sasha Levin
maintainerQuoted 1 line
And here's the _actual_ 6.1-stable patch.
The 6.12 and 6.6 ones came through fine and are queued, thanks.
The 6.1 one didn't make it out though - both of your mails in this thread arrived here with no attachment and an empty body apart from the quoted notice. The only attachment in this thread is identical to the 6.12 patch, and its pre-image doesn't match 6.1.
Could you resend the 6.1 version?
Signature · 2 lines
Thanks, Sasha
Jens Axboe
maintainerQuoted 10 lines · Sasha Levin
Quoted 1 line
And here's the _actual_ 6.1-stable patch.
The 6.12 and 6.6 ones came through fine and are queued, thanks.
The 6.1 one didn't make it out though - both of your mails in this thread arrived here with no attachment and an empty body apart from the quoted notice. The only attachment in this thread is identical to the 6.12 patch, and its pre-image doesn't match 6.1.
Could you resend the 6.1 version?
Here it is.
Signature · 1 line
Jens Axboe
From 7e0da7c4de7278bff3bd42a1f29c2176dbfb44e1 Mon Sep 17 00:00:00 2001
From: Yitang Yang <[email protected]>
Date: Wed, 22 Jul 2026 20:45:51 +0800
Subject: [PATCH] io_uring/rw: fix missing ERESTARTSYS conversion in read paths
Commit ab05caca123c6d0b41850b7c05b246e4dca4a770 upstream.
Both read and write may receive internal restart error codes from the filesystem layer and should be converted to -EINTR. However, when multishot read support was added, the error code normalization was lost for both io_read() and io_read_mshot().
Extract the conversion into io_fixup_restart_res() and apply it in all three locations: io_rw_done(), io_read(), and io_read_mshot().
--- io_uring/rw.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-)
io_uring/rw.c +19 -9
@@ -129,27 +129,37 @@ void io_readv_writev_cleanup(struct io_kiocb *req)kfree (io->free_iovec); } -static inline void io_rw_done (struct kiocb *kiocb,ssize_t ret) +static inline ssize_t io_fixup_restart_res (ssize_t ret) {switch (ret) { -case -EIOCBQUEUED : -break ;case -ERESTARTSYS :case -ERESTARTNOINTR :case -ERESTARTNOHAND :case -ERESTART_RESTARTBLOCK :/* * We can't just restart the syscall, since previously -* submitted sqes may already be in progress. Just fail this -* IO with EINTR. +* submitted sqes may already be in progress. Just fail +* this IO with EINTR. */ - ret = -EINTR ; - fallthrough; +return -EINTR ;default : - kiocb->ki_complete (kiocb, ret); +return ret; } } +static inline void io_rw_done (struct kiocb *kiocb,ssize_t ret) +{ +/* IO was queued async, completion will happen later */ +if (ret == -EIOCBQUEUED ) +return ; + +/* transform internal restart error codes */ +if (unlikely (ret <0 )) + ret =io_fixup_restart_res (ret); + + kiocb->ki_complete (kiocb, ret); +} +static inline loff_t *io_kiocb_update_pos (struct io_kiocb *req) { struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);
@@ -854,7 +864,7 @@ int io_read(struct io_kiocb *req, unsigned int issue_flags)if (ret >=0 )return kiocb_done (req, ret, issue_flags); -return ret; +return io_fixup_restart_res (ret); }static bool io_kiocb_start_write (struct io_kiocb *req,struct kiocb *kiocb)
Signature · 1 line
2.53.0
Quoted 3 lines · Jens Axboe
Quoted 1 line
Could you resend the 6.1 version?
Here it is.
Queued for 6.1, thanks.
Signature · 2 lines
Thanks, Sasha