Print only 5 messages "rejecting I/O to dead device"
PATCH 2/2 Print only 5 messages "rejecting I/O to dead device"
Also set to 5 printing of "rejecting I/O to device being removed". See commit ''Print only a single message "rejecting I/O to device being removed"''.
When we do hot-unplug, those messages are printed so much and so often that they overwhelm the CPU and cause soft lockup.
Signed-off-by Luben Tuikov <[email protected]>
--- drivers/scsi/scsi_lib.c | 11 +++++++---- drivers/scsi/scsi_scan.c | 3 ++- include/scsi/scsi_device.h | 5 +++-- 3 files changed, 12 insertions(+), 7 deletions(-)
drivers/scsi/scsi_lib.c +7 -4
@@ -1122,8 +1122,11 @@ static int scsi_prep_fn(struct request_qif (sdev->sdev_state ==SDEV_DEL ) {/* Device is fully deleted, no commands * at all allowed down */ -sdev_printk (KERN_ERR , sdev, -"rejecting I/O to dead device\n" ); +if (sdev->num_dead_messages >0 ) { + sdev->num_dead_messages--; +sdev_printk (KERN_ERR , sdev, +"rejecting I/O to dead device\n" ); + } goto kill; }/* OK, we only allow special commands (i.e. not
@@ -1149,8 +1152,8 @@ static int scsi_prep_fn(struct request_q specials_only == SDEV_BLOCK) goto defer; -if (sdev->num_rej_messages >0 ) { - sdev->num_rej_messages--; +if (sdev->num_remv_messages >0 ) { + sdev->num_remv_messages--;sdev_printk (KERN_ERR , sdev,"rejecting I/O to device " "being removed\n" );
drivers/scsi/scsi_scan.c +2 -1
@@ -169,7 +169,8 @@ static struct scsi_device *scsi_alloc_sdINIT_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->num_remv_messages =SCSI_DEV_NUM_MESSAGES ; + sdev->num_dead_messages =SCSI_DEV_NUM_MESSAGES ; sdev->sdev_gendev.parent =get_device (&starget->dev); sdev->sdev_target = starget;
include/scsi/scsi_device.h +3 -2
@@ -140,8 +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; +#define SCSI_DEV_NUM_MESSAGES 5 +int num_remv_messages; +int num_dead_messages;enum scsi_device_state sdev_state;unsigned long sdev_data[0 ];
Signature · 1 line
1.4.3.3.g6cec