Re: [PATCH v3 12/13] block: simplify disk_zone_set_cond()

Hannes Reinecke <[email protected]>
Newsgroups org.kernel.vger.linux-block
Message-ID <[email protected]>
On 8/11/26 12:58 PM, Damien Le Moal wrote:
> disk_zone_set_cond() is used to set a zone condition afer a reset, a
> finish or a reset all operation. For a single zone reset or finish, we are
> guaranteed that the target zone is a sequential one that is not offline
> nor read-only (otherwise, the operation would have failed). For a reset
> all operation, there is no point in calling this function for offline and
> read-only zones since the condition checks in disk_zone_set_cond() will
> result in nothing being done.
> 
> Simplify all this using disk_zone_is_offline_or_readonly() in
> blk_zone_reset_all_bio_endio() to skip zones that are offline or
> read-only. This change allows simplifying disk_zone_set_cond() by removing
> the zone condition checks. This change is also consistent with the fact
> that conventional zones can now have the offline or read-only condition.
> 
> Signed-off-by: Damien Le Moal <[email protected]>
> Reviewed-by: Bart Van Assche <[email protected]>
> ---
>   block/blk-zoned.c | 26 ++++++--------------------
>   1 file changed, 6 insertions(+), 20 deletions(-)
> 
> diff --git a/block/blk-zoned.c b/block/blk-zoned.c
> index acf60982e6c9..02f92d113d32 100644
> --- a/block/blk-zoned.c
> +++ b/block/blk-zoned.c
> @@ -235,29 +235,14 @@ EXPORT_SYMBOL_GPL(blk_zone_cond_str);
>   static void disk_zone_set_cond(struct gendisk *disk, sector_t sector,
>   			       enum blk_zone_cond cond)
>   {
> +	unsigned int zno = disk_zone_no(disk, sector);
>   	u8 *zones_state;
>   
>   	rcu_read_lock();
>   	zones_state = rcu_dereference(disk->zones_state);
> -	if (zones_state) {
> -		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_state[zno] & BLK_ZSTATE_COND_MASK) {
> -		case BLK_ZSTATE_NOT_WP:
> -		case BLK_ZSTATE_READONLY:
> -		case BLK_ZSTATE_OFFLINE:
> -			break;
> -		default:
> -			blk_zstate_set(zones_state, zno, cond,
> -				       blk_zstate_flags(zones_state[zno]));
> -			break;
> -		}
> -	}
> +	if (likely(zones_state && zno < disk->nr_zones))
> +		blk_zstate_set(zones_state, zno, cond,
> +			       blk_zstate_flags(zones_state[zno]));
>   	rcu_read_unlock();
>   }
>   
> @@ -1306,7 +1291,8 @@ static void blk_zone_reset_all_bio_endio(struct bio *bio)
>   	/* Update the cached zone conditions. */
>   	for (sector = 0; sector < get_capacity(disk);
>   	     sector += bdev_zone_sectors(bio->bi_bdev)) {
> -		if (disk_zone_is_offline_or_readonly(disk, sector))
> +		if (!disk_zone_is_seq(disk, sector) ||
> +		    disk_zone_is_offline_or_readonly(disk, sector))
>   			continue;
>   		disk_zone_set_cond(disk, sector, BLK_ZONE_COND_EMPTY);
>   	}


-- 
Dr. Hannes Reinecke                  Kernel Storage Architect
[email protected]                                +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.