> -----Original Message----- > From: Hannes Reinecke [mailto:h...@suse.de] > Sent: Friday, 24 October, 2014 7:27 AM > To: James Bottomley > Cc: Christoph Hellwig; Elliott, Robert (Server Storage); linux- > s...@vger.kernel.org; Hannes Reinecke > Subject: [PATCH 27/27] 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. > > Cc: Robert Elliott <elli...@hp.com> > Signed-off-by: Hannes Reinecke <h...@suse.de> > --- > drivers/scsi/scsi_lib.c | 32 ++++++++++++++++++++------------ > 1 file changed, 20 insertions(+), 12 deletions(-) > > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index 3ea5969..4572991 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c ... > @@ -1038,18 +1039,25 @@ void scsi_io_completion(struct scsi_cmnd > *cmd, unsigned int good_bytes) > switch (action) { > case ACTION_FAIL: > /* Give up and fail the remainder of the request */ > - if (unlikely(scsi_logging_level)) > - level = SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT, > - SCSI_LOG_MLQUEUE_BITS); > - /* > - * if logging is enabled the failure will be printed > - * in scsi_log_completion(), so avoid duplicate messages > - */ > - if (!level && !(req->cmd_flags & REQ_QUIET)) { > - scsi_print_result(cmd, NULL, FAILED); > - if (driver_byte(result) & DRIVER_SENSE) > - scsi_print_sense(cmd); > - scsi_print_command(cmd); > + if (!(req->cmd_flags & REQ_QUIET)) { > + static DEFINE_RATELIMIT_STATE(_rs, > + DEFAULT_RATELIMIT_INTERVAL, > + DEFAULT_RATELIMIT_BURST); > + > + if (unlikely(scsi_logging_level)) > + level = > SCSI_LOG_LEVEL(SCSI_LOG_MLQUEUE_SHIFT, > + SCSI_LOG_MLQUEUE_BITS); > +
This switched back to MLQUEUE from MLCOMPLETE (which v7 had corrected). With MLCOMPLETE level 1, the scsi_log_completion prints also occur, so everything is doubled. This should use MLCOMPLETE. > + /* > + * if logging is enabled the failure will be > printed > + * in scsi_log_completion(), so avoid duplicate > messages > + */ > + if (!level && __ratelimit(&_rs)) { > + scsi_print_result(cmd, NULL, FAILED); > + if (driver_byte(result) & DRIVER_SENSE) > + scsi_print_sense(cmd); > + scsi_print_command(cmd); The scsi_log_completion equivalent section calls scsi_print_command before scsi_print_sense (noticed due to the previous issue). You may want to make them the same (though in this case the subtle difference was helpful). > + } > } > if (!scsi_end_request(req, error, blk_rq_err_bytes(req), > 0)) > return; > -- > 1.8.5.2 With MLQUEUE level 0 and MLCOMPLETE level 0, v8 runs those prints, and they work as expected: * the value in the ratelimit message matches the block layer (82) * the number of print_result/print_sense/print_command matches the number of block layer prints (10) * the SCSI prints end up interleaved, but that's for the next patch series to fix Assuming the MLQUEUE -> MLCOMPLETE fix is put back in, you may add: Tested-by: Robert Elliott <elli...@hp.com> Reviewed-by: Robert Elliott <elli...@hp.com> Thanks. Excerpt with MLQUEUE level 0, MLCOMPLETE level 0: [ 789.844126] scsi_io_completion: 82 callbacks suppressed [ 789.844231] blk_update_request: 82 callbacks suppressed [ 789.844233] blk_update_request: critical target error, dev sds, sector 35768 [ 789.844263] blk_update_request: critical target error, dev sds, sector 3984 [ 789.844267] blk_update_request: critical target error, dev sds, sector 74936 [ 789.844310] blk_update_request: critical target error, dev sds, sector 46592 [ 789.844481] blk_update_request: critical target error, dev sds, sector 111072 [ 789.844485] blk_update_request: critical target error, dev sds, sector 160608 [ 789.844488] blk_update_request: critical target error, dev sds, sector 1232 [ 789.844492] blk_update_request: critical target error, dev sds, sector 129896 [ 789.844498] blk_update_request: critical target error, dev sds, sector 119672 [ 789.844535] blk_update_request: critical target error, dev sds, sector 14272 [ 789.872076] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.874743] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.876820] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.878778] sd 2:0:0:1: [sds] CDB: [ 789.880073] Read(10): 28 00 00 00 98 90 00 00 08 00 [ 789.882431] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.885034] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.887046] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.889049] sd 2:0:0:1: [sds] CDB: [ 789.890258] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890261] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890264] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890266] sd 2:0:0:1: [sds] CDB: [ 789.890271] Read(10): 28 00 00 02 12 c0 00 00 08 00 [ 789.890278] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890280] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890283] sd 2:0:0:1: [sds] Add. SensLogical unit failure [ 789.890284] sd 2:0:0:1: [sds] CDB: [ 789.890289] Read(10): 28 00 00 01 52 50 00 00 08 00 [ 789.890295] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890298] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890299] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890302] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890303] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890305] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890306] sd 2:0:0:1: [sds] CDB: [ 789.890308] sd 2:0:0:1: [sds] CDB: [ 789.890309] Read(10) [ 789.890309] Read(10) [ 789.890310] : [ 789.890311] : [ 789.890312] 28 [ 789.890313] 28 [ 789.890314] 00 [ 789.890315] 00 [ 789.890316] 00 [ 789.890316] 00 [ 789.890317] 01 [ 789.890318] 01 [ 789.890318] 42 [ 789.890319] 62 [ 789.890320] b8 [ 789.890321] b8 [ 789.890322] 00 [ 789.890322] 00 [ 789.890323] 00 [ 789.890324] 00 [ 789.890325] 08 [ 789.890326] 08 [ 789.890326] 00 [ 789.890327] 00 [ 789.890327] [ 789.890328] [ 789.890334] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890336] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890338] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890339] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890340] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890342] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890343] sd 2:0:0:1: [sds] CDB: [ 789.890344] sd 2:0:0:1: [sds] CDB: [ 789.890345] Read(10) [ 789.890346] Read(10) [ 789.890346] : [ 789.890347] : [ 789.890348] 28 [ 789.890349] 28 [ 789.890350] 00 [ 789.890350] 00 [ 789.890351] 00 [ 789.890352] 00 [ 789.890352] 01 [ 789.890353] 00 [ 789.890354] 52 [ 789.890355] 82 [ 789.890356] d8 [ 789.890356] d8 [ 789.890357] [ 789.890358] 00 [ 789.890359] 00 [ 789.890361] 00 [ 789.890362] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890363] 08 [ 789.890364] 08 [ 789.890365] 00 [ 789.890366] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890367] 00 [ 789.890367] [ 789.890368] [ 789.890369] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890371] sd 2:0:0:1: [sds] CDB: [ 789.890374] Read(10): 28 00 [ 789.890375] sd 2:0:0:1: [sds] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [ 789.890377] 00 02 21 [ 789.890378] sd 2:0:0:1: [sds] Sense Key : Hardware Error [current] [ 789.890381] 98 00 00 08 00 [ 789.890381] sd 2:0:0:1: [sds] Add. Sense: Logical unit failure [ 789.890381] [ 789.890383] sd 2:0:0:1: [sds] CDB: [ 789.890387] Read(10): 28 00 00 02 18 f8 00 00 08 00 [ 790.190093] Read(10): 28 00 00 02 24 80 00 00 08 00 --- Rob Elliott HP Server Storage -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html