mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
block: simplify disk_zone_set_cond()
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 <dlemoal@kernel.org> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Hannes Reinecke <hare@kernel.org> Link: https://patch.msgid.link/20260908085745.1082697-17-dlemoal@kernel.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d44a97c253
commit
85bffad4d2
|
|
@ -240,23 +240,9 @@ static void disk_zone_set_cond(struct gendisk *disk, sector_t sector,
|
|||
|
||||
rcu_read_lock();
|
||||
zones_state = rcu_dereference(disk->zones_state);
|
||||
if (zones_state && zno < disk->nr_zones) {
|
||||
/*
|
||||
* 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, disk->nr_zones, zno, cond,
|
||||
blk_zstate_flags(zones_state[zno]));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (likely(zones_state && zno < disk->nr_zones))
|
||||
blk_zstate_set(zones_state, disk->nr_zones, zno, cond,
|
||||
blk_zstate_flags(zones_state[zno]));
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
|
|
@ -1310,7 +1296,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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user