FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.18-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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 09007af2b627f0f195c6c53c4829b285cc3990ec Mon Sep 17 00:00:00 2001
From: Dylan Yudaken <[email protected]>
Date: Thu, 30 Jun 2022 06:20:06 -0700
Subject: [PATCH] io_uring: fix provided buffer import
io_import_iovec uses the s pointer, but this was changed immediately after the iovec was re-imported and so it was imported into the wrong place.
Change the ordering.
fs/io_uring.c +4 -3
@@ -4318,18 +4318,19 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags)if (unlikely (ret <0 ))return ret; }else { + rw = req->async_data; + s = &rw->s; +/* * Safe and required to re-import if we're using provided * buffers, as we dropped the selected one before retry. */ -if (req->flags &REQ_F_BUFFER_SELECT ) { +if (io_do_buffer_select (req)) { ret =io_import_iovec (READ , req, &iovec, s, issue_flags);if (unlikely (ret <0 ))return ret; } - rw = req->async_data; - s = &rw->s;/* * We come here from an earlier attempt, restore our state to * match in case it doesn't. It's cheap enough that we don't
Quoted 58 lines · On Mon, 2022-07-04 at 15:24 +0200, [email protected] wrote:
The patch below does not apply to the 5.18-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]>.thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
09007af2b627f0f195c6c53c4829b285cc3990ecMon Sep 17 00:00:00 2001
From: Dylan Yudaken <[email protected]>
Date: Thu, 30 Jun 2022 06:20:06 -0700
Subject: [PATCH]io_uring: fix provided buffer import
io_import_iovecuses the s pointer, but this was changed immediately after the iovec was re-imported and so it was imported into the wrong place.Change the ordering.
Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selectedbuffers")
Signed-off-by Dylan Yudaken <[email protected]>Link:
https://lore.kernel.org/r/[email protected][axboe: ensure we don't half-import as well]Signed-off-by Jens Axboe <[email protected]>fs/io_uring.c +3
-0@@ -4318,18 +4318,19 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags) if (unlikely(ret < 0)) return ret; } else { + rw = req->async_data; + s = &rw->s; + /** Safe and required to re-import if we're using provided
* buffers, as we dropped the selected one before retry.
*/
- if (req->flags&REQ_F_BUFFER_SELECT) { + if (io_do_buffer_select(req)) {
ret =io_import_iovec(READ, req, &iovec, s, issue_flags);
if (unlikely(ret < 0))
return ret;
}
Quoted 9 lines
- rw =req->async_data;
- s =&rw->s;
/*
* We come here from an earlier attempt, restore our state to
* match in case it doesn't. It's cheap enough that we don't
Hi,
I have attached a fixed patch which fixes the problem on 5.18
Thanks,
Dylan
From 48e76e81093dc2e4e7f2fd2d95f0a39c1078e7bd Mon Sep 17 00:00:00 2001
From: Dylan Yudaken <[email protected]>
Date: Thu, 30 Jun 2022 06:20:06 -0700
Subject: [PATCH] io_uring: fix provided buffer import
commit 09007af2b627f0f195c6c53c4829b285cc3990ec upstream.
io_import_iovec uses the s pointer, but this was changed immediately after the iovec was re-imported and so it was imported into the wrong place.
Change the ordering.
--- fs/io_uring.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
fs/io_uring.c +11 -3
@@ -3495,6 +3495,13 @@ static ssize_t io_iov_buffer_select(struct io_kiocb *req, struct iovec *iov,return __io_iov_buffer_select (req, iov, issue_flags); } +static inline bool io_do_buffer_select (struct io_kiocb *req) +{ +if (!(req->flags &REQ_F_BUFFER_SELECT )) +return false; +return !(req->flags &REQ_F_BUFFER_SELECTED ); +} +static struct iovec *__io_import_iovec (int rw,struct io_kiocb *req,struct io_rw_state *s,unsigned int issue_flags)
@@ -3854,18 +3861,19 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags)if (unlikely (ret <0 ))return ret; }else { + rw = req->async_data; + s = &rw->s; +/* * Safe and required to re-import if we're using provided * buffers, as we dropped the selected one before retry. */ -if (req->flags &REQ_F_BUFFER_SELECT ) { +if (io_do_buffer_select (req)) { ret =io_import_iovec (READ , req, &iovec, s, issue_flags);if (unlikely (ret <0 ))return ret; } - rw = req->async_data; - s = &rw->s;/* * We come here from an earlier attempt, restore our state to * match in case it doesn't. It's cheap enough that we don't
base-commit: 64ef7e725db41552c219a155ab8c1f6caf2e7cb4
Signature · 1 line
2.30.2
Quoted 71 lines · Dylan Yudaken
Quoted 63 lines · On Mon, 2022-07-04 at 15:24 +0200, [email protected] wrote:
The patch below does not apply to the 5.18-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]>.thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
09007af2b627f0f195c6c53c4829b285cc3990ecMon Sep 17 00:00:00 2001
From: Dylan Yudaken <[email protected]>
Date: Thu, 30 Jun 2022 06:20:06 -0700
Subject: [PATCH]io_uring: fix provided buffer import
io_import_iovecuses the s pointer, but this was changed immediately after the iovec was re-imported and so it was imported into the wrong place.Change the ordering.
Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selectedbuffers")
Signed-off-by Dylan Yudaken <[email protected]>Link:
https://lore.kernel.org/r/[email protected][axboe: ensure we don't half-import as well]Signed-off-by Jens Axboe <[email protected]>fs/io_uring.c +3
-0@@ -4318,18 +4318,19 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags)if (unlikely (ret <0 ))return ret; }else { + rw = req->async_data; + s = &rw->s; +/* * Safe and required to re-import if we're using provided
* buffers, as we dropped the selected one before
retry.*/fs/io_uring.c +1
-1-if (req->flags &REQ_F_BUFFER_SELECT ) { +if (io_do_buffer_select (req)) { ret = io_import_iovec(READ, req, &iovec, s,issue_flags); if (unlikely(ret < 0)) return ret; }fs/io_uring.c +0
-2- rw = req->async_data; - s = &rw->s;/* * We come here from an earlier attempt, restore our Quoted 4 lines
state to
* match in case it doesn't. It's cheap enough that
we don'tHi,
Quoted 1 line
I have attached a fixed patch which fixes the problem on 5.18
Looks good to me, thanks Dylan!
Signature · 1 line
Jens Axboe
[email protected]
maintainerQuoted 72 lines · Jens Axboe
Quoted 71 lines · Dylan Yudaken
Quoted 63 lines · On Mon, 2022-07-04 at 15:24 +0200, [email protected] wrote:
The patch below does not apply to the 5.18-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]>.thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
09007af2b627f0f195c6c53c4829b285cc3990ecMon Sep 17 00:00:00 2001
From: Dylan Yudaken <[email protected]>
Date: Thu, 30 Jun 2022 06:20:06 -0700
Subject: [PATCH]io_uring: fix provided buffer import
io_import_iovecuses the s pointer, but this was changed immediately after the iovec was re-imported and so it was imported into the wrong place.Change the ordering.
Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selectedbuffers")
Signed-off-by Dylan Yudaken <[email protected]>Link:
https://lore.kernel.org/r/[email protected][axboe: ensure we don't half-import as well]Signed-off-by Jens Axboe <[email protected]>fs/io_uring.c +3
-0@@ -4318,18 +4318,19 @@ static int io_read(struct io_kiocb *req, unsigned int issue_flags)if (unlikely (ret <0 ))return ret; }else { + rw = req->async_data; + s = &rw->s; +/* * Safe and required to re-import if we're using provided
* buffers, as we dropped the selected one before
retry.*/fs/io_uring.c +1
-1-if (req->flags &REQ_F_BUFFER_SELECT ) { +if (io_do_buffer_select (req)) { ret = io_import_iovec(READ, req, &iovec, s,issue_flags); if (unlikely(ret < 0)) return ret; }fs/io_uring.c +0
-2- rw = req->async_data; - s = &rw->s;/* * We come here from an earlier attempt, restore our Quoted 4 lines
state to
* match in case it doesn't. It's cheap enough that
we don'tHi,
Quoted 3 lines
Quoted 1 line
I have attached a fixed patch which fixes the problem on 5.18
Looks good to me, thanks Dylan!
Now queued up, thanks.
greg k-h