* [PATCH] scsi: core: Report error list information in debugfs
@ 2023-08-21 20:41 Bart Van Assche
2023-08-22 5:52 ` Damien Le Moal
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Bart Van Assche @ 2023-08-21 20:41 UTC (permalink / raw)
To: Martin K . Petersen
Cc: linux-scsi, Bart Van Assche, Hannes Reinecke, Damien Le Moal,
Mike Christie, John Garry, Ming Lei, James E.J. Bottomley
Provide information in debugfs about SCSI error handling to make it
easier to debug the SCSI error handler. Additionally, report the maximum
number of retries in debugfs (.allowed).
Cc: Hannes Reinecke <hare@suse.de>
Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Cc: Mike Christie <michael.christie@oracle.com>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
drivers/scsi/scsi_debugfs.c | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/scsi_debugfs.c b/drivers/scsi/scsi_debugfs.c
index 217b70c678c3..a9bc5f7ce745 100644
--- a/drivers/scsi/scsi_debugfs.c
+++ b/drivers/scsi/scsi_debugfs.c
@@ -3,6 +3,7 @@
#include <linux/seq_file.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_dbg.h>
+#include <scsi/scsi_host.h>
#include "scsi_debugfs.h"
#define SCSI_CMD_FLAG_NAME(name)[const_ilog2(SCMD_##name)] = #name
@@ -33,14 +34,32 @@ static int scsi_flags_show(struct seq_file *m, const unsigned long flags,
void scsi_show_rq(struct seq_file *m, struct request *rq)
{
- struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
+ struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq), *cmd2;
+ struct Scsi_Host *shost = cmd->device->host;
int alloc_ms = jiffies_to_msecs(jiffies - cmd->jiffies_at_alloc);
int timeout_ms = jiffies_to_msecs(rq->timeout);
+ const char *list_info = NULL;
char buf[80] = "(?)";
+ spin_lock_irq(shost->host_lock);
+ list_for_each_entry(cmd2, &shost->eh_abort_list, eh_entry) {
+ if (cmd == cmd2) {
+ list_info = "on eh_abort_list";
+ break;
+ }
+ }
+ list_for_each_entry(cmd2, &shost->eh_cmd_q, eh_entry) {
+ if (cmd == cmd2) {
+ list_info = "on eh_cmd_q";
+ break;
+ }
+ }
+ spin_unlock_irq(shost->host_lock);
+
__scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len);
- seq_printf(m, ", .cmd=%s, .retries=%d, .result = %#x, .flags=", buf,
- cmd->retries, cmd->result);
+ seq_printf(m, ", .cmd=%s, .retries=%d, .allowed=%d, .result = %#x, %s%s.flags=",
+ buf, cmd->retries, cmd->allowed, cmd->result,
+ list_info ? : "", list_info ? ", " : "");
scsi_flags_show(m, cmd->flags, scsi_cmd_flags,
ARRAY_SIZE(scsi_cmd_flags));
seq_printf(m, ", .timeout=%d.%03d, allocated %d.%03d s ago",
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] scsi: core: Report error list information in debugfs
2023-08-21 20:41 [PATCH] scsi: core: Report error list information in debugfs Bart Van Assche
@ 2023-08-22 5:52 ` Damien Le Moal
2023-08-22 9:04 ` John Garry
2023-10-09 7:12 ` Hannes Reinecke
2 siblings, 0 replies; 6+ messages in thread
From: Damien Le Moal @ 2023-08-22 5:52 UTC (permalink / raw)
To: Bart Van Assche, Martin K . Petersen
Cc: linux-scsi, Hannes Reinecke, Damien Le Moal, Mike Christie,
John Garry, Ming Lei, James E.J. Bottomley
On 8/22/23 05:41, Bart Van Assche wrote:
> Provide information in debugfs about SCSI error handling to make it
> easier to debug the SCSI error handler. Additionally, report the maximum
> number of retries in debugfs (.allowed).
>
> Cc: Hannes Reinecke <hare@suse.de>
> Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
> Cc: Mike Christie <michael.christie@oracle.com>
> Cc: John Garry <john.g.garry@oracle.com>
> Cc: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Looks OK to me.
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
--
Damien Le Moal
Western Digital Research
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] scsi: core: Report error list information in debugfs
2023-08-21 20:41 [PATCH] scsi: core: Report error list information in debugfs Bart Van Assche
2023-08-22 5:52 ` Damien Le Moal
@ 2023-08-22 9:04 ` John Garry
2023-08-22 15:25 ` Bart Van Assche
2023-10-09 7:12 ` Hannes Reinecke
2 siblings, 1 reply; 6+ messages in thread
From: John Garry @ 2023-08-22 9:04 UTC (permalink / raw)
To: Bart Van Assche, Martin K . Petersen
Cc: linux-scsi, Hannes Reinecke, Damien Le Moal, Mike Christie,
Ming Lei, James E.J. Bottomley
On 21/08/2023 21:41, Bart Van Assche wrote:
> Provide information in debugfs about SCSI error handling to make it
> easier to debug the SCSI error handler. Additionally, report the maximum
> number of retries in debugfs (.allowed).
>
> Cc: Hannes Reinecke <hare@suse.de>
> Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
> Cc: Mike Christie <michael.christie@oracle.com>
> Cc: John Garry <john.g.garry@oracle.com>
> Cc: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
> drivers/scsi/scsi_debugfs.c | 25 ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/scsi_debugfs.c b/drivers/scsi/scsi_debugfs.c
> index 217b70c678c3..a9bc5f7ce745 100644
> --- a/drivers/scsi/scsi_debugfs.c
> +++ b/drivers/scsi/scsi_debugfs.c
> @@ -3,6 +3,7 @@
> #include <linux/seq_file.h>
> #include <scsi/scsi_cmnd.h>
> #include <scsi/scsi_dbg.h>
> +#include <scsi/scsi_host.h>
> #include "scsi_debugfs.h"
>
> #define SCSI_CMD_FLAG_NAME(name)[const_ilog2(SCMD_##name)] = #name
> @@ -33,14 +34,32 @@ static int scsi_flags_show(struct seq_file *m, const unsigned long flags,
>
> void scsi_show_rq(struct seq_file *m, struct request *rq)
> {
> - struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
> + struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq), *cmd2;
> + struct Scsi_Host *shost = cmd->device->host;
> int alloc_ms = jiffies_to_msecs(jiffies - cmd->jiffies_at_alloc);
> int timeout_ms = jiffies_to_msecs(rq->timeout);
> + const char *list_info = NULL;
> char buf[80] = "(?)";
>
> + spin_lock_irq(shost->host_lock);
> + list_for_each_entry(cmd2, &shost->eh_abort_list, eh_entry) {
> + if (cmd == cmd2) {
> + list_info = "on eh_abort_list";
> + break;
> + }
> + }
> + list_for_each_entry(cmd2, &shost->eh_cmd_q, eh_entry) {
If it's on the first list, then there is not much point in checking this
list. It might be even worth checking list_empty(&cmd->eh_entry)
initially also to save the bother.
Having said all this, adding those checks will add lots of unpleasant
indentation...
> + if (cmd == cmd2) {
> + list_info = "on eh_cmd_q";
> + break;
> + }
> + }
> + spin_unlock_irq(shost->host_lock);
> +
> __scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len);
> - seq_printf(m, ", .cmd=%s, .retries=%d, .result = %#x, .flags=", buf,
> - cmd->retries, cmd->result);
> + seq_printf(m, ", .cmd=%s, .retries=%d, .allowed=%d, .result = %#x, %s%s.flags=",
> + buf, cmd->retries, cmd->allowed, cmd->result,
> + list_info ? : "", list_info ? ", " : "");
> scsi_flags_show(m, cmd->flags, scsi_cmd_flags,
> ARRAY_SIZE(scsi_cmd_flags));
> seq_printf(m, ", .timeout=%d.%03d, allocated %d.%03d s ago",
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] scsi: core: Report error list information in debugfs
2023-08-22 9:04 ` John Garry
@ 2023-08-22 15:25 ` Bart Van Assche
2023-08-22 16:24 ` John Garry
0 siblings, 1 reply; 6+ messages in thread
From: Bart Van Assche @ 2023-08-22 15:25 UTC (permalink / raw)
To: John Garry, Martin K . Petersen
Cc: linux-scsi, Hannes Reinecke, Damien Le Moal, Mike Christie,
Ming Lei, James E.J. Bottomley
On 8/22/23 02:04, John Garry wrote:
> If it's on the first list, then there is not much point in checking this list.
> It might be even worth checking list_empty(&cmd->eh_entry) initially also to
> save the bother.
>
> Having said all this, adding those checks will add lots of unpleasant indentation...
Since the above code is only used to export information through debugfs I don't
think that it should be optimized heavily? Anyway, how about combining the
(untested) patch below with the above patch?
diff --git a/drivers/scsi/scsi_debugfs.c b/drivers/scsi/scsi_debugfs.c
index a9bc5f7ce745..f795848b316c 100644
--- a/drivers/scsi/scsi_debugfs.c
+++ b/drivers/scsi/scsi_debugfs.c
@@ -45,15 +45,16 @@ void scsi_show_rq(struct seq_file *m, struct request *rq)
list_for_each_entry(cmd2, &shost->eh_abort_list, eh_entry) {
if (cmd == cmd2) {
list_info = "on eh_abort_list";
- break;
+ goto unlock;
}
}
list_for_each_entry(cmd2, &shost->eh_cmd_q, eh_entry) {
if (cmd == cmd2) {
list_info = "on eh_cmd_q";
- break;
+ goto unlock;
}
}
+unlock:
spin_unlock_irq(shost->host_lock);
__scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len);
Thanks,
Bart.
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] scsi: core: Report error list information in debugfs
2023-08-22 15:25 ` Bart Van Assche
@ 2023-08-22 16:24 ` John Garry
0 siblings, 0 replies; 6+ messages in thread
From: John Garry @ 2023-08-22 16:24 UTC (permalink / raw)
To: Bart Van Assche, Martin K . Petersen
Cc: linux-scsi, Hannes Reinecke, Damien Le Moal, Mike Christie,
Ming Lei, James E.J. Bottomley
On 22/08/2023 16:25, Bart Van Assche wrote:
> On 8/22/23 02:04, John Garry wrote:
>> If it's on the first list, then there is not much point in checking
>> this list.
>> It might be even worth checking list_empty(&cmd->eh_entry) initially
>> also to
>> save the bother.
>>
>> Having said all this, adding those checks will add lots of unpleasant
>> indentation...
>
> Since the above code is only used to export information through debugfs
> I don't
> think that it should be optimized heavily?
To me it's not really a matter of having the code optimized, but more
about having clear and efficient code.
> Anyway, how about combining the
> (untested) patch below with the above patch?
>
> diff --git a/drivers/scsi/scsi_debugfs.c b/drivers/scsi/scsi_debugfs.c
> index a9bc5f7ce745..f795848b316c 100644
> --- a/drivers/scsi/scsi_debugfs.c
> +++ b/drivers/scsi/scsi_debugfs.c
> @@ -45,15 +45,16 @@ void scsi_show_rq(struct seq_file *m, struct request
> *rq)
> list_for_each_entry(cmd2, &shost->eh_abort_list, eh_entry) {
> if (cmd == cmd2) {
> list_info = "on eh_abort_list";
> - break;
> + goto unlock;
> }
> }
> list_for_each_entry(cmd2, &shost->eh_cmd_q, eh_entry) {
> if (cmd == cmd2) {
> list_info = "on eh_cmd_q";
> - break;
> + goto unlock;
> }
> }
I think that list_info could be set to NULL here, rather than when declared.
> +unlock:
> spin_unlock_irq(shost->host_lock);
>
> __scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len);
Regardless of comment, above:
Reviewed-by: John Garry <john.g.garry@oracle.com>
thanks
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] scsi: core: Report error list information in debugfs
2023-08-21 20:41 [PATCH] scsi: core: Report error list information in debugfs Bart Van Assche
2023-08-22 5:52 ` Damien Le Moal
2023-08-22 9:04 ` John Garry
@ 2023-10-09 7:12 ` Hannes Reinecke
2 siblings, 0 replies; 6+ messages in thread
From: Hannes Reinecke @ 2023-10-09 7:12 UTC (permalink / raw)
To: Bart Van Assche, Martin K . Petersen
Cc: linux-scsi, Damien Le Moal, Mike Christie, John Garry, Ming Lei,
James E.J. Bottomley
On 8/21/23 22:41, Bart Van Assche wrote:
> Provide information in debugfs about SCSI error handling to make it
> easier to debug the SCSI error handler. Additionally, report the maximum
> number of retries in debugfs (.allowed).
>
> Cc: Hannes Reinecke <hare@suse.de>
> Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
> Cc: Mike Christie <michael.christie@oracle.com>
> Cc: John Garry <john.g.garry@oracle.com>
> Cc: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
> drivers/scsi/scsi_debugfs.c | 25 ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-10-09 7:12 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-21 20:41 [PATCH] scsi: core: Report error list information in debugfs Bart Van Assche
2023-08-22 5:52 ` Damien Le Moal
2023-08-22 9:04 ` John Garry
2023-08-22 15:25 ` Bart Van Assche
2023-08-22 16:24 ` John Garry
2023-10-09 7:12 ` Hannes Reinecke
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox