public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Pankaj Raghav <p.raghav@samsung.com>
To: jaegeuk@kernel.org, axboe@kernel.dk, snitzer@kernel.org,
	hch@lst.de, mcgrof@kernel.org, naohiro.aota@wdc.com,
	sagi@grimberg.me, damien.lemoal@opensource.wdc.com,
	dsterba@suse.com, johannes.thumshirn@wdc.com
Cc: linux-kernel@vger.kernel.org, linux-btrfs@vger.kernel.org,
	clm@fb.com, gost.dev@samsung.com, chao@kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, josef@toxicpanda.com,
	jonathan.derrick@linux.dev, agk@redhat.com, kbusch@kernel.org,
	kch@nvidia.com, linux-nvme@lists.infradead.org,
	dm-devel@redhat.com, bvanassche@acm.org,
	jiangbo.365@bytedance.com, linux-fsdevel@vger.kernel.org,
	matias.bjorling@wdc.com, linux-block@vger.kernel.org,
	Pankaj Raghav <p.raghav@samsung.com>
Subject: [PATCH 04/16] block: allow blk-zoned devices to have non-power-of-2 zone size
Date: Wed, 27 Apr 2022 18:02:43 +0200	[thread overview]
Message-ID: <20220427160255.300418-5-p.raghav@samsung.com> (raw)
In-Reply-To: <20220427160255.300418-1-p.raghav@samsung.com>

Convert the calculations on zone size to be generic instead of relying on
power_of_2 based logic in the block layer using the helpers wherever
possible.

The only hot path affected by this change for power_of_2 zoned devices
is in blk_check_zone_append() but the effects should be negligible as the
helper blk_queue_zone_aligned() optimizes the calculation for those
devices. Note that the append path cannot be accessed by direct raw access
to the block device but only through a filesystem abstraction.

Finally, remove the check for power_of_2 zone size requirement in
blk-zoned.c

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
---
 block/blk-core.c  |  3 +--
 block/blk-zoned.c | 12 ++++++------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index 937bb6b86331..850caf311064 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -634,8 +634,7 @@ static inline blk_status_t blk_check_zone_append(struct request_queue *q,
 		return BLK_STS_NOTSUPP;
 
 	/* The bio sector must point to the start of a sequential zone */
-	if (pos & (blk_queue_zone_sectors(q) - 1) ||
-	    !blk_queue_zone_is_seq(q, pos))
+	if (!blk_queue_zone_aligned(q, pos) || !blk_queue_zone_is_seq(q, pos))
 		return BLK_STS_IOERR;
 
 	/*
diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index 1dff4a8bd51d..f7c7c3bd148d 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -288,10 +288,10 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
 		return -EINVAL;
 
 	/* Check alignment (handle eventual smaller last zone) */
-	if (sector & (zone_sectors - 1))
+	if (!blk_queue_zone_aligned(q, sector))
 		return -EINVAL;
 
-	if ((nr_sectors & (zone_sectors - 1)) && end_sector != capacity)
+	if (!blk_queue_zone_aligned(q, nr_sectors) && end_sector != capacity)
 		return -EINVAL;
 
 	/*
@@ -489,14 +489,14 @@ static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx,
 	 * smaller last zone.
 	 */
 	if (zone->start == 0) {
-		if (zone->len == 0 || !is_power_of_2(zone->len)) {
-			pr_warn("%s: Invalid zoned device with non power of two zone size (%llu)\n",
-				disk->disk_name, zone->len);
+		if (zone->len == 0) {
+			pr_warn("%s: Invalid zoned device size",
+				disk->disk_name);
 			return -ENODEV;
 		}
 
 		args->zone_sectors = zone->len;
-		args->nr_zones = (capacity + zone->len - 1) >> ilog2(zone->len);
+		args->nr_zones = div64_u64(capacity + zone->len - 1, zone->len);
 	} else if (zone->start + args->zone_sectors < capacity) {
 		if (zone->len != args->zone_sectors) {
 			pr_warn("%s: Invalid zoned device with non constant zone size\n",
-- 
2.25.1


  parent reply	other threads:[~2022-04-27 16:03 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20220427160256eucas1p2db2b58792ffc93026d870c260767da14@eucas1p2.samsung.com>
2022-04-27 16:02 ` [PATCH 00/16] support non power of 2 zoned devices Pankaj Raghav
2022-04-27 16:02   ` [PATCH 01/16] block: make blkdev_nr_zones and blk_queue_zone_no generic for npo2 zsze Pankaj Raghav
2022-04-29 17:16     ` Adam Manzanares
2022-05-03 16:37     ` Bart Van Assche
2022-05-03 16:43       ` Damien Le Moal
2022-05-04  8:35       ` Pankaj Raghav
2022-05-04 16:52     ` Hannes Reinecke
2022-04-27 16:02   ` [PATCH 02/16] block: add blk_queue_zone_aligned and bdev_zone_aligned helper Pankaj Raghav
2022-04-27 23:52     ` Bart Van Assche
2022-05-04 16:55     ` Hannes Reinecke
2022-04-27 16:02   ` [PATCH 03/16] block: add bdev_zone_no helper Pankaj Raghav
2022-04-27 23:31     ` Damien Le Moal
2022-04-27 23:53     ` Bart Van Assche
2022-05-04 16:55     ` Hannes Reinecke
2022-04-27 16:02   ` Pankaj Raghav [this message]
2022-04-27 23:37     ` [PATCH 04/16] block: allow blk-zoned devices to have non-power-of-2 zone size Damien Le Moal
2022-04-28 17:29       ` Luis Chamberlain
2022-05-04 16:59     ` Hannes Reinecke
2022-04-27 16:02   ` [PATCH 05/16] nvme: zns: Allow ZNS drives that have non-power_of_2 " Pankaj Raghav
2022-04-29 17:23     ` Adam Manzanares
2022-05-03 16:50     ` Bart Van Assche
2022-05-04  8:38       ` Pankaj Raghav
2022-05-04 17:03     ` Hannes Reinecke
2022-04-27 16:02   ` [PATCH 06/16] nvmet: use blk_queue_zone_no() Pankaj Raghav
2022-04-29 17:27     ` Adam Manzanares
2022-05-03 16:54     ` Bart Van Assche
2022-05-04 17:05     ` Hannes Reinecke
2022-04-27 16:02   ` [PATCH 07/16] btrfs: zoned: Cache superblock location in btrfs_zoned_device_info Pankaj Raghav
2022-04-27 16:02   ` [PATCH 08/16] btrfs: zoned: add generic btrfs helpers for zoned devices Pankaj Raghav
2022-04-27 16:02   ` [PATCH 09/16] btrfs: zoned: Make sb_zone_number function non power of 2 compatible Pankaj Raghav
2022-04-27 16:02   ` [PATCH 10/16] btrfs: zoned: use btrfs zone helpers to support non po2 zoned devices Pankaj Raghav
2022-04-27 16:02   ` [PATCH 11/16] btrfs: zoned: relax the alignment constraint for " Pankaj Raghav
2022-04-27 16:02   ` [PATCH 12/16] zonefs: allow non power of 2 " Pankaj Raghav
2022-04-27 23:39     ` Damien Le Moal
2022-04-27 16:02   ` [PATCH 13/16] null_blk: " Pankaj Raghav
2022-04-29 17:30     ` Adam Manzanares
2022-05-03 17:01     ` Bart Van Assche
2022-05-04 17:10     ` Hannes Reinecke
2022-04-27 16:02   ` [PATCH 14/16] f2fs: call bdev_zone_sectors() only once on init_blkz_info() Pankaj Raghav
2022-05-03 20:04     ` Jaegeuk Kim
2022-04-27 16:02   ` [PATCH 15/16] f2fs: ensure only power of 2 zone sizes are allowed Pankaj Raghav
2022-05-03 20:05     ` Jaegeuk Kim
2022-05-04  8:53       ` Pankaj Raghav
2022-04-27 16:02   ` [PATCH 16/16] dm-zoned: " Pankaj Raghav
2022-04-27 23:42     ` Damien Le Moal
2022-04-28 17:34       ` Luis Chamberlain
2022-04-28 21:43         ` Damien Le Moal
2022-04-28 22:06           ` Luis Chamberlain
2022-05-04 17:11     ` Hannes Reinecke
2022-05-02 22:07   ` [PATCH 00/16] support non power of 2 zoned devices Johannes Thumshirn
2022-05-03  9:12     ` Pankaj Raghav
2022-05-04 21:14       ` David Sterba
2022-05-05  7:28         ` Pankaj Raghav

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=20220427160255.300418-5-p.raghav@samsung.com \
    --to=p.raghav@samsung.com \
    --cc=agk@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=bvanassche@acm.org \
    --cc=chao@kernel.org \
    --cc=clm@fb.com \
    --cc=damien.lemoal@opensource.wdc.com \
    --cc=dm-devel@redhat.com \
    --cc=dsterba@suse.com \
    --cc=gost.dev@samsung.com \
    --cc=hch@lst.de \
    --cc=jaegeuk@kernel.org \
    --cc=jiangbo.365@bytedance.com \
    --cc=johannes.thumshirn@wdc.com \
    --cc=jonathan.derrick@linux.dev \
    --cc=josef@toxicpanda.com \
    --cc=kbusch@kernel.org \
    --cc=kch@nvidia.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=matias.bjorling@wdc.com \
    --cc=mcgrof@kernel.org \
    --cc=naohiro.aota@wdc.com \
    --cc=sagi@grimberg.me \
    --cc=snitzer@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox