aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2014-10-24 08:27:07 -0400
committerChristoph Hellwig <hch@lst.de>2014-11-12 05:16:08 -0500
commitf1569ff1d5ae0ca8598956be632947a88f540e2a (patch)
tree155b530df91e787139d595e37307c5c9411cf8eb /drivers/scsi
parentb6c92b7e0af575e2b8b05bdf33633cf9e1661cbf (diff)
scsi: ratelimit I/O error messages
There can be quite a lot of I/O error messages, even on smaller machines. So we need to ratelimit them to not overwhelm logging. Signed-off-by: Hannes Reinecke <hare@suse.de> Tested-by: Robert Elliott <elliott@hp.com> Reviewed-by: Robert Elliott <elliott@hp.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/scsi_lib.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 26a57faf885b..fc0a8a0c0a34 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -22,6 +22,7 @@
22#include <linux/hardirq.h> 22#include <linux/hardirq.h>
23#include <linux/scatterlist.h> 23#include <linux/scatterlist.h>
24#include <linux/blk-mq.h> 24#include <linux/blk-mq.h>
25#include <linux/ratelimit.h>
25 26
26#include <scsi/scsi.h> 27#include <scsi/scsi.h>
27#include <scsi/scsi_cmnd.h> 28#include <scsi/scsi_cmnd.h>
@@ -1038,18 +1039,25 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
1038 switch (action) { 1039 switch (action) {
1039 case ACTION_FAIL: 1040 case ACTION_FAIL:
1040 /* Give up and fail the remainder of the request */ 1041 /* Give up and fail the remainder of the request */
1041 if (unlikely(scsi_logging_level)) 1042 if (!(req->cmd_flags & REQ_QUIET)) {
1042 level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT, 1043 static DEFINE_RATELIMIT_STATE(_rs,
1043 SCSI_LOG_MLQUEUE_BITS); 1044 DEFAULT_RATELIMIT_INTERVAL,
1044 /* 1045 DEFAULT_RATELIMIT_BURST);
1045 * if logging is enabled the failure will be printed 1046
1046 * in scsi_log_completion(), so avoid duplicate messages 1047 if (unlikely(scsi_logging_level))
1047 */ 1048 level = SCSI_LOG_LEVEL(SCSI_LOG_MLCOMPLETE_SHIFT,
1048 if (!level && !(req->cmd_flags & REQ_QUIET)) { 1049 SCSI_LOG_MLCOMPLETE_BITS);
1049 scsi_print_result(cmd, NULL, FAILED); 1050
1050 if (driver_byte(result) & DRIVER_SENSE) 1051 /*
1051 scsi_print_sense(cmd); 1052 * if logging is enabled the failure will be printed
1052 scsi_print_command(cmd); 1053 * in scsi_log_completion(), so avoid duplicate messages
1054 */
1055 if (!level && __ratelimit(&_rs)) {
1056 scsi_print_result(cmd, NULL, FAILED);
1057 if (driver_byte(result) & DRIVER_SENSE)
1058 scsi_print_sense(cmd);
1059 scsi_print_command(cmd);
1060 }
1053 } 1061 }
1054 if (!scsi_end_request(req, error, blk_rq_err_bytes(req), 0)) 1062 if (!scsi_end_request(req, error, blk_rq_err_bytes(req), 0))
1055 return; 1063 return;