]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: trace: Show rtn in string for scsi_dispatch_cmd_error()
authorKassey Li <quic_yingangl@quicinc.com>
Wed, 21 May 2025 01:17:11 +0000 (09:17 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 10 Jun 2025 01:59:07 +0000 (21:59 -0400)
By default the scsi_dispatch_cmd_error() return value is displayed in
decimal:

  kworker/3:1H-183 [003] ....  51.035474: scsi_dispatch_cmd_error: host_no=0 channel=0 id=0 lun=4 data_sgl=1  prot_sgl=0 prot_op=SCSI_PROT_NORMAL cmnd=(READ_10 lba=3907214  txlen=1 protect=0 raw=28 00 00 3b 9e 8e 00 00 01 00) rtn=4181

However, these numbers are not particularly helpful wrt. debugging
errors. Especially since the kernel code consistently uses the following
defines in hexadecimal:

  SCSI_MLQUEUE_HOST_BUSY   0x1055
  SCSI_MLQUEUE_DEVICE_BUSY 0x1056
  SCSI_MLQUEUE_EH_RETRY    0x1057
  SCSI_MLQUEUE_TARGET_BUSY 0x1058

Switch to using the string form of these values in the trace output:

  dd-1059    [007] .....    31.689529: scsi_dispatch_cmd_error: host_no=0 channel=0 id=0 lun=4 data_sgl=65 prot_sgl=0 prot_op=SCSI_PROT_NORMAL driver_tag=23 scheduler_tag=117 cmnd=(READ_10 lba=0 txlen=128 protect=0 raw=28 00 00 00 00 00 00 00 80 00) rtn=SCSI_MLQUEUE_DEVICE_BUSY

Signed-off-by: Kassey Li <quic_yingangl@quicinc.com>
Link: https://lore.kernel.org/r/20250521011711.1983625-1-quic_yingangl@quicinc.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
include/trace/events/scsi.h

index bf6cc98d912288795d671f62ea5a101146ad0252..c36c72ab7f2bf6fe5b776738284d8dcafda44e74 100644 (file)
@@ -200,6 +200,14 @@ TRACE_EVENT(scsi_dispatch_cmd_start,
                  __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len))
 );
 
+#define scsi_rtn_name(result)  { result, #result }
+#define show_rtn_name(val)                                     \
+       __print_symbolic(val,                                   \
+               scsi_rtn_name(SCSI_MLQUEUE_HOST_BUSY),          \
+               scsi_rtn_name(SCSI_MLQUEUE_DEVICE_BUSY),        \
+               scsi_rtn_name(SCSI_MLQUEUE_EH_RETRY),           \
+               scsi_rtn_name(SCSI_MLQUEUE_TARGET_BUSY))
+
 TRACE_EVENT(scsi_dispatch_cmd_error,
 
        TP_PROTO(struct scsi_cmnd *cmd, int rtn),
@@ -240,14 +248,15 @@ TRACE_EVENT(scsi_dispatch_cmd_error,
 
        TP_printk("host_no=%u channel=%u id=%u lun=%u data_sgl=%u prot_sgl=%u" \
                  " prot_op=%s driver_tag=%d scheduler_tag=%d cmnd=(%s %s raw=%s)" \
-                 " rtn=%d",
+                 " rtn=%s",
                  __entry->host_no, __entry->channel, __entry->id,
                  __entry->lun, __entry->data_sglen, __entry->prot_sglen,
                  show_prot_op_name(__entry->prot_op), __entry->driver_tag,
                  __entry->scheduler_tag, show_opcode_name(__entry->opcode),
                  __parse_cdb(__get_dynamic_array(cmnd), __entry->cmd_len),
                  __print_hex(__get_dynamic_array(cmnd), __entry->cmd_len),
-                 __entry->rtn)
+                 show_rtn_name(__entry->rtn)
+         )
 );
 
 DECLARE_EVENT_CLASS(scsi_cmd_done_timeout_template,