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