On 4/16/22 05:17, Bart Van Assche wrote: > The following check in sd_zbc_cmnd_checks() can only work correctly if > the zone size is a power of two: > > if (sector & (sd_zbc_zone_sectors(sdkp) - 1)) > /* Unaligned request */ > return BLK_STS_IOERR; > > Hence this patch that verifies that the zone size is a power of two. > > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> Note that this is already checked in blk_revalidate_disk_zones(), but it does not hurt to add the check. Reviewed-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx> > --- > drivers/scsi/sd_zbc.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c > index d0275855b16c..c1f295859b27 100644 > --- a/drivers/scsi/sd_zbc.c > +++ b/drivers/scsi/sd_zbc.c > @@ -666,6 +666,13 @@ static int sd_zbc_check_capacity(struct scsi_disk *sdkp, unsigned char *buf, > > *zblocks = zone_blocks; > > + if (!is_power_of_2(*zblocks)) { > + sd_printk(KERN_ERR, sdkp, > + "Zone size %llu is not a power of two.\n", > + zone_blocks); > + return -EINVAL; > + } > + > return 0; > } > -- Damien Le Moal Western Digital Research