mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
scsi: sd_zbc: Set zone limits before revalidating zones
In sd_zbc_revalidate_zones(), execute blk_queue_chunk_sectors() and blk_queue_max_zone_append_sectors() to respectively set a ZBC device zone size and maximum zone append sector limit before executing blk_revalidate_disk_zones(). This is to allow the block layer zone reavlidation to check these device characteristics prior to checking all zones of the device. Since blk_queue_max_zone_append_sectors() already caps the device maximum zone append limit to the zone size and to the maximum command size, the max_append value passed to blk_queue_max_zone_append_sectors() is simplified to the maximum number of segments times the number of sectors per page. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> Link: https://lore.kernel.org/r/20230703024812.76778-2-dlemoal@kernel.org Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
24033d71cc
commit
f79846ca2f
1 changed files with 5 additions and 7 deletions
|
@ -831,7 +831,6 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
|
|||
struct request_queue *q = disk->queue;
|
||||
u32 zone_blocks = sdkp->early_zone_info.zone_blocks;
|
||||
unsigned int nr_zones = sdkp->early_zone_info.nr_zones;
|
||||
u32 max_append;
|
||||
int ret = 0;
|
||||
unsigned int flags;
|
||||
|
||||
|
@ -876,6 +875,11 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
|
|||
goto unlock;
|
||||
}
|
||||
|
||||
blk_queue_chunk_sectors(q,
|
||||
logical_to_sectors(sdkp->device, zone_blocks));
|
||||
blk_queue_max_zone_append_sectors(q,
|
||||
q->limits.max_segments << PAGE_SECTORS_SHIFT);
|
||||
|
||||
ret = blk_revalidate_disk_zones(disk, sd_zbc_revalidate_zones_cb);
|
||||
|
||||
memalloc_noio_restore(flags);
|
||||
|
@ -888,12 +892,6 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
|
|||
goto unlock;
|
||||
}
|
||||
|
||||
max_append = min_t(u32, logical_to_sectors(sdkp->device, zone_blocks),
|
||||
q->limits.max_segments << PAGE_SECTORS_SHIFT);
|
||||
max_append = min_t(u32, max_append, queue_max_hw_sectors(q));
|
||||
|
||||
blk_queue_max_zone_append_sectors(q, max_append);
|
||||
|
||||
sd_zbc_print_zones(sdkp);
|
||||
|
||||
unlock:
|
||||
|
|
Loading…
Reference in a new issue