From dcfa2cf4ca575d4afbae35b35e975e6bf4768daf Mon Sep 17 00:00:00 2001 From: Arian Weber Date: Mon, 30 Aug 2021 11:44:24 +0200 Subject: [PATCH] Reenable block_shift calculation for tapes The calculation of block_shift was disabled for tape devices. Enabling it again, as it is now being used in scst_tape_generic_parse. Fixes: 0043f510cbd8 ("block shift cleanups and fixes") --- scst/src/dev_handlers/scst_tape.c | 6 +++--- scst/src/scst_lib.c | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) 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 3020bd570..e71754a88 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)) {