Skip to contentSkip to conversation

FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree

PATCH [email protected] 3 participants 4 messages Jul 4, 2022 – Jul 7, 2022

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

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 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.

Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selected buffers")
[axboe: ensure we don't half-import as well]
fs/io_uring.c +4 -3
index aeb042ba5cc5..0d491ad15b66 100644
@@ -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
#1 lore raw
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 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.

Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selected

buffers")

Link:
https://lore.kernel.org/r/[email protected]

[axboe: ensure we don't half-import as well]
fs/io_uring.c +3 -0
index aeb042ba5cc5..0d491ad15b66 100644
@@ -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.

Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selected buffers")
[axboe: ensure we don't half-import as well]
---
 fs/io_uring.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)
fs/io_uring.c +11 -3
index 7c190e885340..4d488ffb297c 100644
@@ -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
#2 lore raw
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 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.

Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selected

buffers")

Link:
https://lore.kernel.org/r/[email protected]

[axboe: ensure we don't half-import as well]
fs/io_uring.c +3 -0
index aeb042ba5cc5..0d491ad15b66 100644
@@ -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't

Hi,

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
author maintainer
#3 lore raw
Quoted 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 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.

Fixes 2be2eb02e2f5 ("io_uring: ensure reads re-import for selected

buffers")

Link:
https://lore.kernel.org/r/[email protected]

[axboe: ensure we don't half-import as well]
fs/io_uring.c +3 -0
index aeb042ba5cc5..0d491ad15b66 100644
@@ -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't

Hi,

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