diff --git a/scst/src/dev_handlers/scst_cdrom.c b/scst/src/dev_handlers/scst_cdrom.c index a7f7354f4..1e5826d77 100644 --- a/scst/src/dev_handlers/scst_cdrom.c +++ b/scst/src/dev_handlers/scst_cdrom.c @@ -177,15 +177,20 @@ out: static void cdrom_set_block_shift(struct scst_cmd *cmd, int block_shift) { struct scst_device *dev = cmd->dev; + int new_block_shift; + /* * No need for locks here, since *_detach() can not be * called, when there are existing commands. */ - if (block_shift != 0) - dev->block_shift = block_shift; - else - dev->block_shift = CDROM_DEF_BLOCK_SHIFT; - dev->block_size = 1 << dev->block_shift; + new_block_shift = block_shift ? : CDROM_DEF_BLOCK_SHIFT; + if (dev->block_shift != new_block_shift) { + PRINT_INFO("%s: Changed block shift from %d into %d / %d", + dev->virt_name, dev->block_shift, block_shift, + new_block_shift); + dev->block_shift = new_block_shift; + dev->block_size = 1 << dev->block_shift; + } return; } diff --git a/scst/src/dev_handlers/scst_disk.c b/scst/src/dev_handlers/scst_disk.c index 3b85ae15b..9487c005a 100644 --- a/scst/src/dev_handlers/scst_disk.c +++ b/scst/src/dev_handlers/scst_disk.c @@ -269,15 +269,20 @@ out: static void disk_set_block_shift(struct scst_cmd *cmd, int block_shift) { struct scst_device *dev = cmd->dev; + int new_block_shift; + /* * No need for locks here, since *_detach() can not be * called, when there are existing commands. */ - if (block_shift != 0) - dev->block_shift = block_shift; - else - dev->block_shift = DISK_DEF_BLOCK_SHIFT; - dev->block_size = 1 << dev->block_shift; + new_block_shift = block_shift ? : DISK_DEF_BLOCK_SHIFT; + if (dev->block_shift != new_block_shift) { + PRINT_INFO("%s: Changed block shift from %d into %d / %d", + dev->virt_name, dev->block_shift, block_shift, + new_block_shift); + dev->block_shift = new_block_shift; + dev->block_size = 1 << dev->block_shift; + } return; } diff --git a/scst/src/dev_handlers/scst_modisk.c b/scst/src/dev_handlers/scst_modisk.c index b6837727b..b3461b1a9 100644 --- a/scst/src/dev_handlers/scst_modisk.c +++ b/scst/src/dev_handlers/scst_modisk.c @@ -276,15 +276,20 @@ out: static void modisk_set_block_shift(struct scst_cmd *cmd, int block_shift) { struct scst_device *dev = cmd->dev; + int new_block_shift; + /* * No need for locks here, since *_detach() can not be * called, when there are existing commands. */ - if (block_shift != 0) - dev->block_shift = block_shift; - else - dev->block_shift = MODISK_DEF_BLOCK_SHIFT; - dev->block_size = 1 << dev->block_shift; + new_block_shift = block_shift ? : MODISK_DEF_BLOCK_SHIFT; + if (dev->block_shift != new_block_shift) { + PRINT_INFO("%s: Changed block shift from %d into %d / %d", + dev->virt_name, dev->block_shift, block_shift, + new_block_shift); + dev->block_shift = new_block_shift; + dev->block_size = 1 << dev->block_shift; + } return; } diff --git a/scst/src/dev_handlers/scst_user.c b/scst/src/dev_handlers/scst_user.c index 12ef87e71..0125f7ee6 100644 --- a/scst/src/dev_handlers/scst_user.c +++ b/scst/src/dev_handlers/scst_user.c @@ -1020,6 +1020,8 @@ out_reply: static void dev_user_set_block_shift(struct scst_cmd *cmd, int block_shift) { struct scst_device *dev = cmd->dev; + struct scst_user_dev *udev = cmd->dev->dh_priv; + int new_block_shift; TRACE_ENTRY(); @@ -1027,14 +1029,15 @@ static void dev_user_set_block_shift(struct scst_cmd *cmd, int block_shift) * No need for locks here, since *_detach() can not be * called, when there are existing commands. */ - TRACE_DBG("dev %p, new block shift %d", dev, block_shift); - if (block_shift != 0) - dev->block_shift = block_shift; - else { - struct scst_user_dev *udev = cmd->dev->dh_priv; - dev->block_shift = scst_calc_block_shift(udev->def_block_size); + new_block_shift = block_shift ? : + scst_calc_block_shift(udev->def_block_size); + if (dev->block_shift != new_block_shift) { + PRINT_INFO("%s: Changed block shift from %d into %d / %d", + dev->virt_name, dev->block_shift, block_shift, + new_block_shift); + dev->block_shift = new_block_shift; + dev->block_size = 1 << dev->block_shift; } - dev->block_size = 1 << dev->block_shift; TRACE_EXIT(); return;