All of lore.kernel.org
 help / color / mirror / Atom feed
From: Damien Le Moal <damien.lemoal@wdc.com>
To: linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
	linux-scsi@vger.kernel.org,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	dm-devel@redhat.com, Mike Snitzer <snitzer@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>,
	Matias Bjorling <matias.bjorling@wdc.com>
Subject: [PATCH v4 04/11] block: Introduce blkdev_nr_zones() helper
Date: Fri, 12 Oct 2018 19:08:43 +0900	[thread overview]
Message-ID: <20181012100850.23316-5-damien.lemoal@wdc.com> (raw)
In-Reply-To: <20181012100850.23316-1-damien.lemoal@wdc.com>

Introduce the blkdev_nr_zones() helper function to get the total
number of zones of a zoned block device. This number is always 0 for a
regular block device (q->limits.zoned == BLK_ZONED_NONE case).

Replace hard-coded number of zones calculation in dmz_get_zoned_device()
with a call to this helper.

Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
---
 block/blk-zoned.c            | 27 +++++++++++++++++++++++++++
 drivers/md/dm-zoned-target.c |  3 +--
 include/linux/blkdev.h       |  5 +++++
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index c461cf63f1f4..32e377f755d8 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -63,6 +63,33 @@ void __blk_req_zone_write_unlock(struct request *rq)
 }
 EXPORT_SYMBOL_GPL(__blk_req_zone_write_unlock);
 
+static inline unsigned int __blkdev_nr_zones(struct request_queue *q,
+					     sector_t nr_sectors)
+{
+	unsigned long zone_sectors = blk_queue_zone_sectors(q);
+
+	return (nr_sectors + zone_sectors - 1) >> ilog2(zone_sectors);
+}
+
+/**
+ * blkdev_nr_zones - Get number of zones
+ * @bdev:	Target block device
+ *
+ * Description:
+ *    Return the total number of zones of a zoned block device.
+ *    For a regular block device, the number of zones is always 0.
+ */
+unsigned int blkdev_nr_zones(struct block_device *bdev)
+{
+	struct request_queue *q = bdev_get_queue(bdev);
+
+	if (!blk_queue_is_zoned(q))
+		return 0;
+
+	return __blkdev_nr_zones(q, bdev->bd_part->nr_sects);
+}
+EXPORT_SYMBOL_GPL(blkdev_nr_zones);
+
 /*
  * Check that a zone report belongs to the partition.
  * If yes, fix its start sector and write pointer, copy it in the
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index a44183ff4be0..12d96a263623 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -702,8 +702,7 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path)
 	dev->zone_nr_blocks = dmz_sect2blk(dev->zone_nr_sectors);
 	dev->zone_nr_blocks_shift = ilog2(dev->zone_nr_blocks);
 
-	dev->nr_zones = (dev->capacity + dev->zone_nr_sectors - 1)
-		>> dev->zone_nr_sectors_shift;
+	dev->nr_zones = blkdev_nr_zones(dev->bdev);
 
 	dmz->dev = dev;
 
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 6980014357d4..c24969b1741b 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -401,6 +401,7 @@ struct blk_zone_report_hdr {
 	u8		padding[60];
 };
 
+extern unsigned int blkdev_nr_zones(struct block_device *bdev);
 extern int blkdev_report_zones(struct block_device *bdev,
 			       sector_t sector, struct blk_zone *zones,
 			       unsigned int *nr_zones, gfp_t gfp_mask);
@@ -414,6 +415,10 @@ extern int blkdev_reset_zones_ioctl(struct block_device *bdev, fmode_t mode,
 
 #else /* CONFIG_BLK_DEV_ZONED */
 
+static inline unsigned int blkdev_nr_zones(struct block_device *bdev)
+{
+	return 0;
+}
 static inline int blkdev_report_zones_ioctl(struct block_device *bdev,
 					    fmode_t mode, unsigned int cmd,
 					    unsigned long arg)
-- 
2.17.1

  parent reply	other threads:[~2018-10-12 10:08 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12 10:08 [PATCH v4 00/11] Zoned block device support improvements Damien Le Moal
2018-10-12 10:08 ` [PATCH v4 01/11] scsi: sd_zbc: Rearrange code Damien Le Moal
2018-10-16  4:48   ` Martin K. Petersen
2018-10-16  4:48     ` Martin K. Petersen
2018-10-12 10:08 ` [PATCH v4 02/11] scsi: sd_zbc: Reduce boot device scan and revalidate time Damien Le Moal
2018-10-16  4:50   ` Martin K. Petersen
2018-10-16  4:50     ` Martin K. Petersen
2018-10-12 10:08 ` [PATCH v4 03/11] scsi: sd_zbc: Fix sd_zbc_check_zones() error checks Damien Le Moal
2018-10-12 10:23   ` Hannes Reinecke
2018-10-12 10:23     ` Hannes Reinecke
2018-10-12 11:41     ` Damien Le Moal
2018-10-12 11:41       ` Damien Le Moal
2018-10-16  4:51   ` Martin K. Petersen
2018-10-16  4:51     ` Martin K. Petersen
2018-10-17  7:21   ` Christoph Hellwig
2018-10-17  7:21     ` Christoph Hellwig
2018-10-12 10:08 ` Damien Le Moal [this message]
2018-10-12 10:08 ` [PATCH v4 05/11] block: Limit allocation of zone descriptors for report zones Damien Le Moal
2018-10-12 10:08 ` [PATCH v4 06/11] block: Introduce BLKGETZONESZ ioctl Damien Le Moal
2018-10-12 10:08 ` [PATCH v4 07/11] block: Introduce BLKGETNRZONES ioctl Damien Le Moal
2018-10-12 10:08 ` [PATCH v4 08/11] block: Improve zone reset execution Damien Le Moal
2018-10-12 10:08 ` [PATCH v4 09/11] block: Expose queue nr_zones in sysfs Damien Le Moal
2018-10-12 10:08 ` [PATCH v4 10/11] block: add a report_zones method Damien Le Moal
2018-10-16  4:55   ` Martin K. Petersen
2018-10-16  4:55     ` Martin K. Petersen
2018-10-16 15:17   ` Mike Snitzer
2018-10-16 15:17     ` Mike Snitzer
2018-10-12 10:08 ` [PATCH v4 11/11] block: Introduce blk_revalidate_disk_zones() Damien Le Moal
2018-10-16  5:00   ` Martin K. Petersen
2018-10-16  5:00     ` Martin K. Petersen
2018-10-16 15:17   ` Mike Snitzer
2018-10-16 15:17     ` Mike Snitzer
2018-10-13 22:43 ` [PATCH v4 00/11] Zoned block device support improvements Jens Axboe
2018-10-15  0:45   ` Damien Le Moal
2018-10-15  0:45     ` Damien Le Moal
2018-10-16  2:34     ` Jens Axboe
2018-10-16  3:43       ` Damien Le Moal
2018-10-16  3:43         ` Damien Le Moal
2018-10-18  7:57       ` Damien Le Moal
2018-10-18  7:57         ` Damien Le Moal
2018-10-23 15:59 ` Jens Axboe
2018-10-24  2:26   ` Martin K. Petersen
2018-10-24  2:26     ` Martin K. Petersen
2018-10-24 15:03     ` Mike Snitzer
2018-10-24 15:03       ` Mike Snitzer
2018-10-24 15:37       ` Martin K. Petersen
2018-10-24 15:37         ` Martin K. Petersen
2018-10-24 16:04         ` Bart Van Assche
2018-10-24 16:04           ` Bart Van Assche
2018-10-25 14:30           ` Jens Axboe
2018-10-25 14:30             ` Jens Axboe
2018-10-24  8:04   ` Damien Le Moal
2018-10-24  8:04     ` Damien Le Moal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181012100850.23316-5-damien.lemoal@wdc.com \
    --to=damien.lemoal@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=dm-devel@redhat.com \
    --cc=hch@lst.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=matias.bjorling@wdc.com \
    --cc=snitzer@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.