Message ID | 20220421183023.3462291-3-bvanassche@acm.org |
---|---|
State | New |
Headers | show |
Series | Support zoned devices with gap zones | expand |
> On Apr 21, 2022, at 11:30 AM, Bart Van Assche <bvanassche@acm.org> 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. > > Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> > Signed-off-by: Bart Van Assche <bvanassche@acm.org> > --- > 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 2ae44bc52a5f..9ef5ad345185 100644 > --- a/drivers/scsi/sd_zbc.c > +++ b/drivers/scsi/sd_zbc.c > @@ -664,6 +664,13 @@ static int sd_zbc_check_capacity(struct scsi_disk *sdkp, unsigned char *buf, > return -EFBIG; > } > > + if (!is_power_of_2(zone_blocks)) { > + sd_printk(KERN_ERR, sdkp, > + "Zone size %llu is not a power of two.\n", > + zone_blocks); > + return -EINVAL; > + } > + > *zblocks = zone_blocks; > > return 0; Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> -- Himanshu Madhani Oracle Linux Engineering
diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c index 2ae44bc52a5f..9ef5ad345185 100644 --- a/drivers/scsi/sd_zbc.c +++ b/drivers/scsi/sd_zbc.c @@ -664,6 +664,13 @@ static int sd_zbc_check_capacity(struct scsi_disk *sdkp, unsigned char *buf, return -EFBIG; } + if (!is_power_of_2(zone_blocks)) { + sd_printk(KERN_ERR, sdkp, + "Zone size %llu is not a power of two.\n", + zone_blocks); + return -EINVAL; + } + *zblocks = zone_blocks; return 0;