... at device removal. Signed-off-by: Luben Tuikov <ltuikov@xxxxxxxxx> --- drivers/scsi/scsi_lib.c | 10 +++++++--- drivers/scsi/scsi_scan.c | 1 + include/scsi/scsi_device.h | 3 +++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 7b0f9a3..f0de7ca 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1302,9 +1302,13 @@ static int scsi_prep_fn(struct request_q if(specials_only == SDEV_QUIESCE || specials_only == SDEV_BLOCK) goto defer; - - sdev_printk(KERN_ERR, sdev, - "rejecting I/O to device being removed\n"); + + if (sdev->num_rej_messages > 0) { + sdev->num_rej_messages--; + sdev_printk(KERN_ERR, sdev, + "rejecting I/O to device " + "being removed\n"); + } goto kill; } diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 1a5474b..ad988df 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -223,6 +223,7 @@ static struct scsi_device *scsi_alloc_sd INIT_LIST_HEAD(&sdev->cmd_list); INIT_LIST_HEAD(&sdev->starved_entry); spin_lock_init(&sdev->list_lock); + sdev->num_rej_messages = SCSI_DEV_NUM_REJ_MESSAGES; sdev->sdev_gendev.parent = get_device(&starget->dev); sdev->sdev_target = starget; diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 895d212..4b0785c 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -140,6 +140,9 @@ struct scsi_device { struct execute_work ew; /* used to get process context on put */ +#define SCSI_DEV_NUM_REJ_MESSAGES 1 + int num_rej_messages; + enum scsi_device_state sdev_state; unsigned long sdev_data[0]; } __attribute__((aligned(sizeof(unsigned long)))); -- 1.4.3.3.g6cec - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html