On Wed, May 17, 2023 at 04:09:25PM -0700, Bart Van Assche wrote: > If a command fails, SCSI sense data is essential to determine why it > failed. Hence make the sense key, ASC and ASCQ codes available in the > ftrace output. > > Reviewed-by: Niklas Cassel <niklas.cassel@xxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Cc: Ming Lei <ming.lei@xxxxxxxxxx> > Cc: Hannes Reinecke <hare@xxxxxxx> > Cc: John Garry <john.g.garry@xxxxxxxxxx> > Cc: Mike Christie <michael.christie@xxxxxxxxxx> > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > include/trace/events/scsi.h | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/include/trace/events/scsi.h b/include/trace/events/scsi.h > index a2c7befd451a..512792317577 100644 > --- a/include/trace/events/scsi.h > +++ b/include/trace/events/scsi.h > @@ -269,9 +269,14 @@ DECLARE_EVENT_CLASS(scsi_cmd_done_timeout_template, > __field( unsigned int, prot_sglen ) > __field( unsigned char, prot_op ) > __dynamic_array(unsigned char, cmnd, cmd->cmd_len) > + __field( u8, sense_key ) > + __field( u8, asc ) > + __field( u8, ascq ) > ), > > TP_fast_assign( > + struct scsi_sense_hdr sshdr; > + > __entry->host_no = cmd->device->host->host_no; > __entry->channel = cmd->device->channel; > __entry->id = cmd->device->id; > @@ -285,11 +290,22 @@ DECLARE_EVENT_CLASS(scsi_cmd_done_timeout_template, > __entry->prot_sglen = scsi_prot_sg_count(cmd); > __entry->prot_op = scsi_get_prot_op(cmd); > memcpy(__get_dynamic_array(cmnd), cmd->cmnd, cmd->cmd_len); > + if (cmd->sense_buffer && SCSI_SENSE_VALID(cmd) && > + scsi_command_normalize_sense(cmd, &sshdr)) { > + __entry->sense_key = sshdr.sense_key; > + __entry->asc = sshdr.asc; > + __entry->ascq = sshdr.ascq; > + } else { > + __entry->sense_key = 0; > + __entry->asc = 0; > + __entry->ascq = 0; > + } > ), > > 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) " \ > - "result=(driver=%s host=%s message=%s status=%s)", > + "result=(driver=%s host=%s message=%s status=%s " > + "sense_key=%#x asc=%#x ascq=%#x)", This way probably breaks userspace script or utility, maybe you can just append "sense(sense_key=%#x asc=%#x ascq=%#x)" only. thanks, Ming