-From 4c8caef3c9e2e4c90db8697ce768ecb05261942f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
+From 47fe1c3064c6bc1bfa3c032ff78e603e5dd6e5bc Mon Sep 17 00:00:00 2001
+From: Damien Le Moal <dlemoal@kernel.org>
Date: Mon, 29 May 2023 16:32:37 +0900
Subject: block: fix revalidate performance regression
From: Damien Le Moal <dlemoal@kernel.org>
-[ Upstream commit 47fe1c3064c6bc1bfa3c032ff78e603e5dd6e5bc ]
+commit 47fe1c3064c6bc1bfa3c032ff78e603e5dd6e5bc upstream.
The scsi driver function sd_read_block_characteristics() always calls
disk_set_zoned() to a disk zoned model correctly, in case the device
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20230529073237.1339862-1-dlemoal@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
- block/blk-settings.c | 3 ++-
+ block/blk-settings.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff --git a/block/blk-settings.c b/block/blk-settings.c
-index 8b84b4f126966..b2dfbfd08cbbd 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
-@@ -875,6 +875,7 @@ static bool disk_has_partitions(struct gendisk *disk)
+@@ -875,6 +875,7 @@ static bool disk_has_partitions(struct g
void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model)
{
struct request_queue *q = disk->queue;
switch (model) {
case BLK_ZONED_HM:
-@@ -912,7 +913,7 @@ void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model)
+@@ -912,7 +913,7 @@ void blk_queue_set_zoned(struct gendisk
*/
blk_queue_zone_write_granularity(q,
queue_logical_block_size(q));
- } else {
+ } else if (old_model != BLK_ZONED_NONE) {
- disk_clear_zone_settings(disk);
+ blk_queue_clear_zone_settings(q);
}
}
---
-2.39.2
-
+++ /dev/null
-From 1011c6b47b0dfafc6fa92f182e76b1b713a14fee Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 6 Jul 2022 09:03:41 +0200
-Subject: block: pass a gendisk to blk_queue_clear_zone_settings
-
-From: Christoph Hellwig <hch@lst.de>
-
-[ Upstream commit b3c72f8138b5f967a9fa527af84b35018897aba3 ]
-
-Switch to a gendisk based API in preparation for moving all zone related
-fields from the request_queue to the gendisk.
-
-Signed-off-by: Christoph Hellwig <hch@lst.de>
-Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
-Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
-Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
-Link: https://lore.kernel.org/r/20220706070350.1703384-8-hch@lst.de
-Signed-off-by: Jens Axboe <axboe@kernel.dk>
-Stable-dep-of: 47fe1c3064c6 ("block: fix revalidate performance regression")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- block/blk-settings.c | 2 +-
- block/blk-zoned.c | 4 +++-
- block/blk.h | 4 ++--
- 3 files changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/block/blk-settings.c b/block/blk-settings.c
-index b880c70e22e4e..8b84b4f126966 100644
---- a/block/blk-settings.c
-+++ b/block/blk-settings.c
-@@ -913,7 +913,7 @@ void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model)
- blk_queue_zone_write_granularity(q,
- queue_logical_block_size(q));
- } else {
-- blk_queue_clear_zone_settings(q);
-+ disk_clear_zone_settings(disk);
- }
- }
- EXPORT_SYMBOL_GPL(blk_queue_set_zoned);
-diff --git a/block/blk-zoned.c b/block/blk-zoned.c
-index 774ecc598bee2..2629ec5d977b4 100644
---- a/block/blk-zoned.c
-+++ b/block/blk-zoned.c
-@@ -630,8 +630,10 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
- }
- EXPORT_SYMBOL_GPL(blk_revalidate_disk_zones);
-
--void blk_queue_clear_zone_settings(struct request_queue *q)
-+void disk_clear_zone_settings(struct gendisk *disk)
- {
-+ struct request_queue *q = disk->queue;
-+
- blk_mq_freeze_queue(q);
-
- blk_queue_free_zone_bitmaps(q);
-diff --git a/block/blk.h b/block/blk.h
-index aab72194d2266..336bdb35466ee 100644
---- a/block/blk.h
-+++ b/block/blk.h
-@@ -343,10 +343,10 @@ struct bio *blk_next_bio(struct bio *bio, unsigned int nr_pages, gfp_t gfp);
-
- #ifdef CONFIG_BLK_DEV_ZONED
- void blk_queue_free_zone_bitmaps(struct request_queue *q);
--void blk_queue_clear_zone_settings(struct request_queue *q);
-+void disk_clear_zone_settings(struct gendisk *disk);
- #else
- static inline void blk_queue_free_zone_bitmaps(struct request_queue *q) {}
--static inline void blk_queue_clear_zone_settings(struct request_queue *q) {}
-+static inline void disk_clear_zone_settings(struct gendisk *disk) {}
- #endif
-
- int blk_alloc_ext_minor(void);
---
-2.39.2
-