diff --git a/scst/src/dev_handlers/scst_tape.c b/scst/src/dev_handlers/scst_tape.c index 7c0ffd344..9d0cc4a2c 100644 --- a/scst/src/dev_handlers/scst_tape.c +++ b/scst/src/dev_handlers/scst_tape.c @@ -145,7 +145,7 @@ static int tape_attach(struct scst_device *dev) } dev->block_size = TAPE_DEF_BLOCK_SIZE; - dev->block_shift = -1; /* not used */ + dev->block_shift = scst_calc_block_shift(dev->block_size); buffer = kmalloc(buffer_size, GFP_KERNEL); if (!buffer) { @@ -203,7 +203,7 @@ static int tape_attach(struct scst_device *dev) res = -ENODEV; goto out_free_buf; } - dev->block_shift = -1; /* not used */ + dev->block_shift = scst_calc_block_shift(dev->block_size); obtain: res = scst_obtain_device_parameters(dev, NULL); @@ -250,7 +250,7 @@ static void tape_set_block_size(struct scst_cmd *cmd, int block_size) * there are existing commands. */ dev->block_size = block_size; - dev->block_shift = -1; /* not used */ + dev->block_shift = scst_calc_block_shift(dev->block_size); return; } diff --git a/scst/src/scst_lib.c b/scst/src/scst_lib.c index 302f97e0a..c5a3c632f 100644 --- a/scst/src/scst_lib.c +++ b/scst/src/scst_lib.c @@ -12470,6 +12470,8 @@ int scst_tape_generic_parse(struct scst_cmd *cmd) shift_left_overflows(cmd->data_len, block_shift) || shift_left_overflows(cmd->out_bufflen, block_shift); + EXTRACHECKS_BUG_ON(block_shift < 0); + BUILD_BUG_ON(sizeof(cmd->bufflen) != 4); BUILD_BUG_ON(sizeof(cmd->out_bufflen) != 4); if (unlikely(overflow)) {