From 9d3a3caaa93765bc021b30cfa3cedc746968dfa1 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 13 Apr 2015 09:20:35 +0200 Subject: [PATCH] scst: Log block size changes A block size change is a very important change so log such changes. Signed-off-by: Bart Van Assche --- scst/src/dev_handlers/scst_cdrom.c | 15 ++++++++++----- scst/src/dev_handlers/scst_disk.c | 15 ++++++++++----- scst/src/dev_handlers/scst_modisk.c | 15 ++++++++++----- scst/src/dev_handlers/scst_user.c | 17 ++++++++++------- 4 files changed, 40 insertions(+), 22 deletions(-) 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 7f7f05319..553e4657e 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 f5e8003dc..70876e070 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;