]> git.itanic.dy.fi Git - linux-stable/commitdiff
block: simplify disk_set_zoned
authorChristoph Hellwig <hch@lst.de>
Sun, 17 Dec 2023 16:53:58 +0000 (17:53 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 20 Dec 2023 03:17:43 +0000 (20:17 -0700)
Only use disk_set_zoned to actually enable zoned device support.
For clearing it, call disk_clear_zoned, which is renamed from
disk_clear_zone_settings and now directly clears the zoned flag as
well.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20231217165359.604246-5-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-settings.c
block/blk-zoned.c
block/blk.h
drivers/block/null_blk/zoned.c
drivers/block/ublk_drv.c
drivers/block/virtio_blk.c
drivers/nvme/host/zns.c
drivers/scsi/sd.c
include/linux/blkdev.h

index 50e9efb59f67fd85e5485093957be562b27e38d1..bb94a3d471f4fb69fc812a7ee9373e550e24d50c 100644 (file)
@@ -881,31 +881,21 @@ bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
 EXPORT_SYMBOL_GPL(blk_queue_can_use_dma_map_merging);
 
 /**
- * disk_set_zoned - configure the zoned model for a disk
- * @disk:      the gendisk of the queue to configure
- * @zoned:     zoned or not.
- *
- * When @zoned is %true, this should be called only if zoned block device
- * support is enabled (CONFIG_BLK_DEV_ZONED option).
+ * disk_set_zoned - inidicate a zoned device
+ * @disk:      gendisk to configure
  */
-void disk_set_zoned(struct gendisk *disk, bool zoned)
+void disk_set_zoned(struct gendisk *disk)
 {
        struct request_queue *q = disk->queue;
 
-       if (zoned) {
-               WARN_ON_ONCE(!IS_ENABLED(CONFIG_BLK_DEV_ZONED));
-
-               /*
-                * Set the zone write granularity to the device logical block
-                * size by default. The driver can change this value if needed.
-                */
-               q->limits.zoned = true;
-               blk_queue_zone_write_granularity(q,
-                                               queue_logical_block_size(q));
-       } else if (q->limits.zoned) {
-               q->limits.zoned = false;
-               disk_clear_zone_settings(disk);
-       }
+       WARN_ON_ONCE(!IS_ENABLED(CONFIG_BLK_DEV_ZONED));
+
+       /*
+        * Set the zone write granularity to the device logical block
+        * size by default. The driver can change this value if needed.
+        */
+       q->limits.zoned = true;
+       blk_queue_zone_write_granularity(q, queue_logical_block_size(q));
 }
 EXPORT_SYMBOL_GPL(disk_set_zoned);
 
index 619ee41a51cc8c81b0333f4f95a70e3b3ed7c442..580a58e53efd773cf0858ee0fddb2f196c4e9c17 100644 (file)
@@ -616,12 +616,13 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
 }
 EXPORT_SYMBOL_GPL(blk_revalidate_disk_zones);
 
-void disk_clear_zone_settings(struct gendisk *disk)
+void disk_clear_zoned(struct gendisk *disk)
 {
        struct request_queue *q = disk->queue;
 
        blk_mq_freeze_queue(q);
 
+       q->limits.zoned = false;
        disk_free_zone_bitmaps(disk);
        blk_queue_flag_clear(QUEUE_FLAG_ZONE_RESETALL, q);
        q->required_elevator_features &= ~ELEVATOR_F_ZBD_SEQ_WRITE;
index 08a358bc0919e2e8f5a53bbca4519ba6ad9d0b15..1ef920f72e0f87172227778cbf1fa4b78cdea295 100644 (file)
@@ -395,14 +395,12 @@ static inline struct bio *blk_queue_bounce(struct bio *bio,
 
 #ifdef CONFIG_BLK_DEV_ZONED
 void disk_free_zone_bitmaps(struct gendisk *disk);
-void disk_clear_zone_settings(struct gendisk *disk);
 int blkdev_report_zones_ioctl(struct block_device *bdev, unsigned int cmd,
                unsigned long arg);
 int blkdev_zone_mgmt_ioctl(struct block_device *bdev, blk_mode_t mode,
                unsigned int cmd, unsigned long arg);
 #else /* CONFIG_BLK_DEV_ZONED */
 static inline void disk_free_zone_bitmaps(struct gendisk *disk) {}
-static inline void disk_clear_zone_settings(struct gendisk *disk) {}
 static inline int blkdev_report_zones_ioctl(struct block_device *bdev,
                unsigned int cmd, unsigned long arg)
 {
index 369eb1e78bb5797927468d842599d7b1427a1b33..6f5e0994862eaedb65273513be975affd4e30fba 100644 (file)
@@ -159,7 +159,7 @@ int null_register_zoned_dev(struct nullb *nullb)
        struct nullb_device *dev = nullb->dev;
        struct request_queue *q = nullb->q;
 
-       disk_set_zoned(nullb->disk, true);
+       disk_set_zoned(nullb->disk);
        blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
        blk_queue_required_elevator_features(q, ELEVATOR_F_ZBD_SEQ_WRITE);
        blk_queue_chunk_sectors(q, dev->zone_size_sects);
index 24fb95f19d528427fc30435dc2b8b900a4527e91..d50d69b2c023de414b4d762405ed914de8f554a7 100644 (file)
@@ -250,7 +250,7 @@ static int ublk_dev_param_zoned_apply(struct ublk_device *ub)
 {
        const struct ublk_param_zoned *p = &ub->params.zoned;
 
-       disk_set_zoned(ub->ub_disk, true);
+       disk_set_zoned(ub->ub_disk);
        blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, ub->ub_disk->queue);
        blk_queue_required_elevator_features(ub->ub_disk->queue,
                                             ELEVATOR_F_ZBD_SEQ_WRITE);
index 19a4f20bd1c2f893f2c4c380fd2833c1b86b7393..7d7a19b2b9a8eb5b3cb9fc466fc3301b09185793 100644 (file)
@@ -730,7 +730,7 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev,
 
        dev_dbg(&vdev->dev, "probing host-managed zoned device\n");
 
-       disk_set_zoned(vblk->disk, true);
+       disk_set_zoned(vblk->disk);
        blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
 
        virtio_cread(vdev, struct virtio_blk_config,
index 6d4c440e97e2a59a5ed1f64321fc7d80ec9edaa2..3d98e435821e4a60cfcf54ece4550b054127af26 100644 (file)
@@ -108,7 +108,7 @@ int nvme_update_zone_info(struct nvme_ns *ns, unsigned lbaf)
                goto free_data;
        }
 
-       disk_set_zoned(ns->disk, true);
+       disk_set_zoned(ns->disk);
        blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, q);
        disk_set_max_open_zones(ns->disk, le32_to_cpu(id->mor) + 1);
        disk_set_max_active_zones(ns->disk, le32_to_cpu(id->mar) + 1);
index 19a19eb277f57d3cd311b093a7c860c3b7b499aa..dbed075cdb981a3769e5b97cca72e0da52818d78 100644 (file)
@@ -3135,11 +3135,13 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)
                blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
        }
 
+
+#ifdef CONFIG_BLK_DEV_ZONED /* sd_probe rejects ZBD devices early otherwise */
        if (sdkp->device->type == TYPE_ZBC) {
                /*
                 * Host-managed.
                 */
-               disk_set_zoned(sdkp->disk, true);
+               disk_set_zoned(sdkp->disk);
 
                /*
                 * Per ZBC and ZAC specifications, writes in sequential write
@@ -3152,8 +3154,9 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)
                 * Anything else.  This includes host-aware device that we treat
                 * as conventional.
                 */
-               disk_set_zoned(sdkp->disk, false);
+               disk_clear_zoned(sdkp->disk);
        }
+#endif /* CONFIG_BLK_DEV_ZONED */
 
        if (!sdkp->first_scan)
                return;
index 28cda9fb239eb6f4e9000d46d68c3ee17de035fd..bc236e77d85e1ca6939aa20f7100db14077798f9 100644 (file)
@@ -317,7 +317,8 @@ struct queue_limits {
 typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx,
                               void *data);
 
-void disk_set_zoned(struct gendisk *disk, bool zoned);
+void disk_set_zoned(struct gendisk *disk);
+void disk_clear_zoned(struct gendisk *disk);
 
 #define BLK_ALL_ZONES  ((unsigned int)-1)
 int blkdev_report_zones(struct block_device *bdev, sector_t sector,