From: Bart Van Assche <bvanassche@acm.org>
To: Damien Le Moal <dlemoal@kernel.org>, Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org, linux-nvme@lists.infradead.org,
Keith Busch <keith.busch@wdc.com>, Christoph Hellwig <hch@lst.de>,
dm-devel@lists.linux.dev, Mike Snitzer <snitzer@kernel.org>,
Mikulas Patocka <mpatocka@redhat.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
linux-scsi@vger.kernel.org, linux-xfs@vger.kernel.org,
Carlos Maiolino <cem@kernel.org>,
linux-btrfs@vger.kernel.org, David Sterba <dsterba@suse.com>
Subject: Re: [PATCH 07/13] block: track zone conditions
Date: Fri, 31 Oct 2025 14:17:55 -0700 [thread overview]
Message-ID: <40c87475-7d5a-4792-b2a6-3eeb8406f9be@acm.org> (raw)
In-Reply-To: <20251031061307.185513-8-dlemoal@kernel.org>
On 10/30/25 11:13 PM, Damien Le Moal wrote:
> Implement tracking of the runtime changes to zone conditions using
> the new cond field in struct blk_zone_wplug. The size of this structure
> remains 112 Bytes as the new field replaces the 4 Bytes padding at the
> end of the structure. For zones that do not have a zone write plug, the
> zones_cond array of a disk is used to track changes to zone conditions,
> e.g. when a zone reset, reset all or finish operation is executed.
Why is it necessary to track the condition of sequential zones that do
not have a zone write plug? Please explain what the use cases are.
The zoned UFS device on my desk has 3420 sequential zones and zero
conventional zones. If the condition of zones that do not have a zone
write plug wouldn't be tracked that would save some memory.
> +static void blk_zone_set_cond(u8 *zones_cond, unsigned int zno,
> + enum blk_zone_cond cond)
> +{
> + if (!zones_cond)
> + return;
> +
> + switch (cond) {
> + case BLK_ZONE_COND_IMP_OPEN:
> + case BLK_ZONE_COND_EXP_OPEN:
> + case BLK_ZONE_COND_CLOSED:
> + zones_cond[zno] = BLK_ZONE_COND_ACTIVE;
> + return;
> + case BLK_ZONE_COND_NOT_WP:
> + case BLK_ZONE_COND_EMPTY:
> + case BLK_ZONE_COND_FULL:
> + case BLK_ZONE_COND_OFFLINE:
> + case BLK_ZONE_COND_READONLY:
> + default:
> + zones_cond[zno] = cond;
> + return;
> + }
> +}
> +
> +static void disk_zone_set_cond(struct gendisk *disk, sector_t sector,
> + enum blk_zone_cond cond)
> +{
> + u8 *zones_cond;
> +
> + rcu_read_lock();
> + zones_cond = rcu_dereference(disk->zones_cond);
> + if (zones_cond) {
> + unsigned int zno = disk_zone_no(disk, sector);
> +
> + /*
> + * The condition of a conventional, readonly and offline zones
> + * never changes, so do nothing if the target zone is in one of
> + * these conditions.
> + */
> + switch (zones_cond[zno]) {
> + case BLK_ZONE_COND_NOT_WP:
> + case BLK_ZONE_COND_READONLY:
> + case BLK_ZONE_COND_OFFLINE:
> + break;
> + default:
> + blk_zone_set_cond(zones_cond, zno, cond);
> + break;
> + }
> + }
> + rcu_read_unlock();
> +}
Why does blk_zone_set_cond() accept a zone number as second argument and
why does disk_zone_set_cond() accept a sector number as second argument?
The callers of disk_zone_set_cond() can be optimized if its second
argument would be changed from a sector number into a zone number.
Thanks,
Bart.
next prev parent reply other threads:[~2025-10-31 21:18 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-31 6:12 [PATCH 00/13] Introduce cached report zones Damien Le Moal
2025-10-31 6:12 ` [PATCH 01/13] block: freeze queue when updating zone resources Damien Le Moal
2025-10-31 8:44 ` Christoph Hellwig
2025-10-31 17:48 ` Bart Van Assche
2025-11-03 5:55 ` Damien Le Moal
2025-11-03 7:18 ` Daniel Vacek
2025-11-03 7:23 ` Damien Le Moal
2025-11-03 7:30 ` Damien Le Moal
2025-11-03 11:17 ` Hannes Reinecke
2025-10-31 6:12 ` [PATCH 02/13] block: cleanup blkdev_report_zones() Damien Le Moal
2025-10-31 8:45 ` Christoph Hellwig
2025-10-31 17:55 ` Bart Van Assche
2025-11-03 11:15 ` Hannes Reinecke
2025-10-31 6:12 ` [PATCH 03/13] block: handle zone management operations completions Damien Le Moal
2025-10-31 8:46 ` Christoph Hellwig
2025-10-31 18:01 ` Bart Van Assche
2025-11-03 6:25 ` Damien Le Moal
2025-11-03 11:41 ` Hannes Reinecke
2025-11-03 12:59 ` Damien Le Moal
2025-10-31 6:12 ` [PATCH 04/13] block: introduce disk_report_zone() Damien Le Moal
2025-10-31 8:47 ` Christoph Hellwig
2025-10-31 20:54 ` Bart Van Assche
2025-11-03 5:56 ` Damien Le Moal
2025-10-31 6:12 ` [PATCH 05/13] block: reorganize struct blk_zone_wplug Damien Le Moal
2025-10-31 8:47 ` Christoph Hellwig
2025-10-31 20:55 ` Bart Van Assche
2025-10-31 6:13 ` [PATCH 06/13] block: use zone condition to determine conventional zones Damien Le Moal
2025-10-31 8:48 ` Christoph Hellwig
2025-10-31 21:04 ` Bart Van Assche
2025-11-03 6:00 ` Damien Le Moal
2025-10-31 6:13 ` [PATCH 07/13] block: track zone conditions Damien Le Moal
2025-10-31 8:51 ` Christoph Hellwig
2025-10-31 21:17 ` Bart Van Assche [this message]
2025-11-03 6:05 ` Damien Le Moal
2025-11-03 15:48 ` Bart Van Assche
2025-11-03 16:34 ` Chaitanya Kulkarni
2025-11-03 22:53 ` Damien Le Moal
2025-11-04 12:03 ` Christoph Hellwig
2025-11-03 18:31 ` Bart Van Assche
2025-11-03 22:34 ` Damien Le Moal
2025-11-03 22:40 ` Damien Le Moal
2025-10-31 6:13 ` [PATCH 08/13] block: introduce blkdev_get_zone_info() Damien Le Moal
2025-10-31 8:52 ` Christoph Hellwig
2025-10-31 21:40 ` Bart Van Assche
2025-11-03 6:08 ` Damien Le Moal
2025-11-03 10:29 ` Christoph Hellwig
2025-10-31 6:13 ` [PATCH 09/13] block: introduce blkdev_report_zones_cached() Damien Le Moal
2025-10-31 8:53 ` Christoph Hellwig
2025-10-31 21:53 ` Bart Van Assche
2025-11-03 6:12 ` Damien Le Moal
2025-11-03 7:18 ` Damien Le Moal
2025-10-31 6:13 ` [PATCH 10/13] block: introduce BLKREPORTZONESV2 ioctl Damien Le Moal
2025-10-31 8:54 ` Christoph Hellwig
2025-10-31 16:52 ` Bart Van Assche
2025-11-03 5:51 ` Damien Le Moal
2025-11-03 10:23 ` Christoph Hellwig
2025-10-31 6:13 ` [PATCH 11/13] block: add zone write plug condition to debugfs zone_wplugs Damien Le Moal
2025-10-31 8:54 ` Christoph Hellwig
2025-10-31 21:55 ` Bart Van Assche
2025-10-31 6:13 ` [PATCH 12/13] btrfs: use blkdev_report_zones_cached() Damien Le Moal
2025-10-31 19:01 ` David Sterba
2025-10-31 6:13 ` [PATCH 13/13] xfs: " Damien Le Moal
2025-10-31 8:55 ` Christoph Hellwig
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=40c87475-7d5a-4792-b2a6-3eeb8406f9be@acm.org \
--to=bvanassche@acm.org \
--cc=axboe@kernel.dk \
--cc=cem@kernel.org \
--cc=dlemoal@kernel.org \
--cc=dm-devel@lists.linux.dev \
--cc=dsterba@suse.com \
--cc=hch@lst.de \
--cc=keith.busch@wdc.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mpatocka@redhat.com \
--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