[SCSI] libsas: introduce scmd_dbg() to quiet false positive "timeout" messages
authorDan Williams <dan.j.williams@intel.com>
Thu, 6 Feb 2014 20:23:07 +0000 (12:23 -0800)
committerJames Bottomley <JBottomley@Parallels.com>
Sat, 15 Mar 2014 17:18:53 +0000 (10:18 -0700)
libsas sometimes short circuits timeouts to force commands into error
recovery.  It is misleading to log that the command timed-out in
sas_scsi_timed_out() when in fact it was just queued for error handling.
It's also redundant in the case of a true timeout as libata eh will
detect and report timeouts via it's AC_ERR_TIMEOUT facility.

Given that some environments consider "timeout" errors to be indicative
of impending device failure demote the sas_scsi_timed_out() timeout
message to be disabled by default.  This parallels ata_scsi_timed_out().

[jejb: checkpatch fix]
Reported-by: Xun Ni <xun.ni@intel.com>
Tested-by: Nelson Cheng <nelson.cheng@intel.com>
Acked-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/libsas/sas_scsi_host.c
include/scsi/scsi_device.h

index da3aee1..25d0f12 100644 (file)
@@ -862,7 +862,7 @@ out:
 
 enum blk_eh_timer_return sas_scsi_timed_out(struct scsi_cmnd *cmd)
 {
-       scmd_printk(KERN_DEBUG, cmd, "command %p timed out\n", cmd);
+       scmd_dbg(cmd, "command %p timed out\n", cmd);
 
        return BLK_EH_NOT_HANDLED;
 }
index d65fbec..622e100 100644 (file)
@@ -235,12 +235,24 @@ struct scsi_dh_data {
 #define sdev_printk(prefix, sdev, fmt, a...)   \
        dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a)
 
+#define sdev_dbg(sdev, fmt, a...) \
+       dev_dbg(&(sdev)->sdev_gendev, fmt, ##a)
+
 #define scmd_printk(prefix, scmd, fmt, a...)                           \
         (scmd)->request->rq_disk ?                                     \
        sdev_printk(prefix, (scmd)->device, "[%s] " fmt,                \
                    (scmd)->request->rq_disk->disk_name, ##a) :         \
        sdev_printk(prefix, (scmd)->device, fmt, ##a)
 
+#define scmd_dbg(scmd, fmt, a...)                                         \
+       do {                                                               \
+               if ((scmd)->request->rq_disk)                              \
+                       sdev_dbg((scmd)->device, "[%s] " fmt,              \
+                                (scmd)->request->rq_disk->disk_name, ##a);\
+               else                                                       \
+                       sdev_dbg((scmd)->device, fmt, ##a);                \
+       } while (0)
+
 enum scsi_target_state {
        STARGET_CREATED = 1,
        STARGET_RUNNING,