]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.7
authorSasha Levin <sashal@kernel.org>
Mon, 19 Feb 2024 20:58:52 +0000 (15:58 -0500)
committerSasha Levin <sashal@kernel.org>
Mon, 19 Feb 2024 20:58:52 +0000 (15:58 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-6.7/block-fix-partial-zone-append-completion-handling-in.patch [new file with mode: 0644]
queue-6.7/md-bypass-block-throttle-for-superblock-update.patch [new file with mode: 0644]
queue-6.7/series

diff --git a/queue-6.7/block-fix-partial-zone-append-completion-handling-in.patch b/queue-6.7/block-fix-partial-zone-append-completion-handling-in.patch
new file mode 100644 (file)
index 0000000..e952ac6
--- /dev/null
@@ -0,0 +1,58 @@
+From 69b1066b4fc96797c7d61f836afe0263dc2338d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 10 Jan 2024 18:29:42 +0900
+Subject: block: fix partial zone append completion handling in req_bio_endio()
+
+From: Damien Le Moal <dlemoal@kernel.org>
+
+[ Upstream commit 748dc0b65ec2b4b7b3dbd7befcc4a54fdcac7988 ]
+
+Partial completions of zone append request is not allowed but if a zone
+append completion indicates a number of completed bytes different from
+the original BIO size, only the BIO status is set to error. This leads
+to bio_advance() not setting the BIO size to 0 and thus to not call
+bio_endio() at the end of req_bio_endio().
+
+Make sure a partially completed zone append is failed and completed
+immediately by forcing the completed number of bytes (nbytes) to be
+equal to the BIO size, thus ensuring that bio_endio() is called.
+
+Fixes: 297db731847e ("block: fix req_bio_endio append error handling")
+Cc: stable@kernel.vger.org
+Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
+Reviewed-by: Hannes Reinecke <hare@suse.de>
+Link: https://lore.kernel.org/r/20240110092942.442334-1-dlemoal@kernel.org
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ block/blk-mq.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/block/blk-mq.c b/block/blk-mq.c
+index a71974a5e57c..a02d3d922c58 100644
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -772,11 +772,16 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
+               /*
+                * Partial zone append completions cannot be supported as the
+                * BIO fragments may end up not being written sequentially.
++               * For such case, force the completed nbytes to be equal to
++               * the BIO size so that bio_advance() sets the BIO remaining
++               * size to 0 and we end up calling bio_endio() before returning.
+                */
+-              if (bio->bi_iter.bi_size != nbytes)
++              if (bio->bi_iter.bi_size != nbytes) {
+                       bio->bi_status = BLK_STS_IOERR;
+-              else
++                      nbytes = bio->bi_iter.bi_size;
++              } else {
+                       bio->bi_iter.bi_sector = rq->__sector;
++              }
+       }
+       bio_advance(bio, nbytes);
+-- 
+2.43.0
+
diff --git a/queue-6.7/md-bypass-block-throttle-for-superblock-update.patch b/queue-6.7/md-bypass-block-throttle-for-superblock-update.patch
new file mode 100644 (file)
index 0000000..3f92d6d
--- /dev/null
@@ -0,0 +1,48 @@
+From 890857e15cdb434f94d116f343280d29201045e6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Nov 2023 10:22:15 -0800
+Subject: md: bypass block throttle for superblock update
+
+From: Junxiao Bi <junxiao.bi@oracle.com>
+
+[ Upstream commit d6e035aad6c09991da1c667fb83419329a3baed8 ]
+
+commit 5e2cf333b7bd ("md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d")
+introduced a hung bug and will be reverted in next patch, since the issue
+that commit is fixing is due to md superblock write is throttled by wbt,
+to fix it, we can have superblock write bypass block layer throttle.
+
+Fixes: 5e2cf333b7bd ("md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d")
+Cc: stable@vger.kernel.org # v5.19+
+Suggested-by: Yu Kuai <yukuai3@huawei.com>
+Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
+Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
+Reviewed-by: Yu Kuai <yukuai3@huawei.com>
+Signed-off-by: Song Liu <song@kernel.org>
+Link: https://lore.kernel.org/r/20231108182216.73611-1-junxiao.bi@oracle.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/md.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/md/md.c b/drivers/md/md.c
+index 21b04607d53a..d243c196c598 100644
+--- a/drivers/md/md.c
++++ b/drivers/md/md.c
+@@ -1037,9 +1037,10 @@ void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
+               return;
+       bio = bio_alloc_bioset(rdev->meta_bdev ? rdev->meta_bdev : rdev->bdev,
+-                             1,
+-                             REQ_OP_WRITE | REQ_SYNC | REQ_PREFLUSH | REQ_FUA,
+-                             GFP_NOIO, &mddev->sync_set);
++                            1,
++                            REQ_OP_WRITE | REQ_SYNC | REQ_IDLE | REQ_META
++                                | REQ_PREFLUSH | REQ_FUA,
++                            GFP_NOIO, &mddev->sync_set);
+       atomic_inc(&rdev->nr_pending);
+-- 
+2.43.0
+
index 8cfd2f4fe124b6ab2289c88fa1401b845271e044..2eb769736e590e8f6ec52106526ea46220ca516b 100644 (file)
@@ -304,3 +304,5 @@ fs-proc-do_task_stat-move-thread_group_cputime_adjusted-outside-of-lock_task_sig
 fs-proc-do_task_stat-use-sig-stats_lock-to-gather-the-threads-children-stats.patch
 tracing-fix-have_dynamic_ftrace_with_regs-ifdef.patch
 tracing-inform-kmemleak-of-saved_cmdlines-allocation.patch
+md-bypass-block-throttle-for-superblock-update.patch
+block-fix-partial-zone-append-completion-handling-in.patch