All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <Bart.VanAssche@sandisk.com>
To: "hch@lst.de" <hch@lst.de>, "axboe@kernel.dk" <axboe@kernel.dk>
Cc: "linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"konrad.wilk@oracle.com" <konrad.wilk@oracle.com>,
	"roger.pau@citrix.com" <roger.pau@citrix.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"linux-nvme@lists.infradead.org" <linux-nvme@lists.infradead.org>,
	"jbacik@fb.com" <jbacik@fb.com>,
	"james.smart@broadcom.com" <james.smart@broadcom.com>,
	"dm-devel@redhat.com" <dm-devel@redhat.com>
Subject: Re: [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests
Date: Thu, 13 Apr 2017 20:41:07 +0000	[thread overview]
Message-ID: <1492116064.24345.12.camel@sandisk.com> (raw)
In-Reply-To: <20170406153944.10058-9-hch@lst.de>

On Thu, 2017-04-06 at 17:39 +0200, Christoph Hellwig wrote:
> Currently error is always 0 for non-passthrough requests when reaching th=
e
> scsi_noretry_cmd check in scsi_io_completion, which effectively disables
> all fastfail logic.  Fix this by having a single call to
> __scsi_error_from_host_byte at the beginning of the function and always
> having a valid error value.
>=20
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  drivers/scsi/scsi_lib.c | 28 +++++++---------------------
>  1 file changed, 7 insertions(+), 21 deletions(-)
>=20
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 11972d1075f1..89b4d9e69866 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -779,21 +779,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsi=
gned int good_bytes)
>  		sense_valid =3D scsi_command_normalize_sense(cmd, &sshdr);
>  		if (sense_valid)
>  			sense_deferred =3D scsi_sense_is_deferred(&sshdr);
> +
> +		if (!sense_deferred)
> +			error =3D __scsi_error_from_host_byte(cmd, result);
>  	}

Hello Christoph,

Sorry but this doesn't look correct to me. Further down a "error =3D
__scsi_error_from_host_byte(cmd, result)" statement is removed that does no=
t
depend on "if (!sense_deferred)" so I think that assignment should happen
independent of the value of "sense_deferred". Additionally, how can it make
sense to call __scsi_error_from_host_byte() only if sense_deferred =3D=3D f=
alse?
As you know the SCSI command result is generated by the LLD so I don't thin=
k
that it depends on whether or not the sense data has been deferred.

Bart.=

WARNING: multiple messages have this Message-ID (diff)
From: Bart Van Assche <Bart.VanAssche@sandisk.com>
To: "hch@lst.de" <hch@lst.de>, "axboe@kernel.dk" <axboe@kernel.dk>
Cc: "linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"konrad.wilk@oracle.com" <konrad.wilk@oracle.com>,
	"roger.pau@citrix.com" <roger.pau@citrix.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"linux-nvme@lists.infradead.org" <linux-nvme@lists.infradead.org>,
	"jbacik@fb.com" <jbacik@fb.com>,
	"james.smart@broadcom.com" <james.smart@broadcom.com>,
	"dm-devel@redhat.com" <dm-devel@redhat.com>
Subject: Re: [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests
Date: Thu, 13 Apr 2017 20:41:07 +0000	[thread overview]
Message-ID: <1492116064.24345.12.camel@sandisk.com> (raw)
In-Reply-To: <20170406153944.10058-9-hch@lst.de>

On Thu, 2017-04-06 at 17:39 +0200, Christoph Hellwig wrote:
> Currently error is always 0 for non-passthrough requests when reaching the
> scsi_noretry_cmd check in scsi_io_completion, which effectively disables
> all fastfail logic.  Fix this by having a single call to
> __scsi_error_from_host_byte at the beginning of the function and always
> having a valid error value.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  drivers/scsi/scsi_lib.c | 28 +++++++---------------------
>  1 file changed, 7 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 11972d1075f1..89b4d9e69866 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -779,21 +779,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
>  		sense_valid = scsi_command_normalize_sense(cmd, &sshdr);
>  		if (sense_valid)
>  			sense_deferred = scsi_sense_is_deferred(&sshdr);
> +
> +		if (!sense_deferred)
> +			error = __scsi_error_from_host_byte(cmd, result);
>  	}

Hello Christoph,

Sorry but this doesn't look correct to me. Further down a "error =
__scsi_error_from_host_byte(cmd, result)" statement is removed that does not
depend on "if (!sense_deferred)" so I think that assignment should happen
independent of the value of "sense_deferred". Additionally, how can it make
sense to call __scsi_error_from_host_byte() only if sense_deferred == false?
As you know the SCSI command result is generated by the LLD so I don't think
that it depends on whether or not the sense data has been deferred.

Bart.

WARNING: multiple messages have this Message-ID (diff)
From: Bart.VanAssche@sandisk.com (Bart Van Assche)
Subject: [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests
Date: Thu, 13 Apr 2017 20:41:07 +0000	[thread overview]
Message-ID: <1492116064.24345.12.camel@sandisk.com> (raw)
In-Reply-To: <20170406153944.10058-9-hch@lst.de>

On Thu, 2017-04-06@17:39 +0200, Christoph Hellwig wrote:
> Currently error is always 0 for non-passthrough requests when reaching the
> scsi_noretry_cmd check in scsi_io_completion, which effectively disables
> all fastfail logic.  Fix this by having a single call to
> __scsi_error_from_host_byte at the beginning of the function and always
> having a valid error value.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>  drivers/scsi/scsi_lib.c | 28 +++++++---------------------
>  1 file changed, 7 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 11972d1075f1..89b4d9e69866 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -779,21 +779,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
>  		sense_valid = scsi_command_normalize_sense(cmd, &sshdr);
>  		if (sense_valid)
>  			sense_deferred = scsi_sense_is_deferred(&sshdr);
> +
> +		if (!sense_deferred)
> +			error = __scsi_error_from_host_byte(cmd, result);
>  	}

Hello Christoph,

Sorry but this doesn't look correct to me. Further down a "error =
__scsi_error_from_host_byte(cmd, result)" statement is removed that does not
depend on "if (!sense_deferred)" so I think that assignment should happen
independent of the value of "sense_deferred". Additionally, how can it make
sense to call __scsi_error_from_host_byte() only if sense_deferred == false?
As you know the SCSI command result is generated by the LLD so I don't think
that it depends on whether or not the sense data has been deferred.

Bart.

  reply	other threads:[~2017-04-13 20:41 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-06 15:39 kill req->errors Christoph Hellwig
2017-04-06 15:39 ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 01/25] remove the mg_disk driver Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-13 19:58   ` Bart Van Assche
2017-04-13 19:58     ` Bart Van Assche
2017-04-13 19:58     ` Bart Van Assche
2017-04-14  8:21     ` hch
2017-04-14  8:21       ` hch
2017-04-06 15:39 ` [PATCH 02/25] block: remove the blk_execute_rq return value Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 18:38   ` Johannes Thumshirn
2017-04-06 18:38     ` Johannes Thumshirn
2017-04-06 18:38     ` Johannes Thumshirn
2017-04-13 20:03   ` Bart Van Assche
2017-04-13 20:03     ` Bart Van Assche
2017-04-13 20:03     ` Bart Van Assche
2017-04-14  8:22     ` hch
2017-04-14  8:22       ` hch
2017-04-17 16:01       ` Jens Axboe
2017-04-17 16:01         ` Jens Axboe
2017-04-18  7:50         ` hch
2017-04-18  7:50           ` hch
2017-04-18  7:50           ` hch
2017-04-06 15:39 ` [PATCH 03/25] nvme-fc: fix status code handling in nvme_fc_fcpio_done Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 18:50   ` Johannes Thumshirn
2017-04-06 18:50     ` Johannes Thumshirn
2017-04-06 18:50     ` Johannes Thumshirn
2017-04-06 15:39 ` [PATCH 04/25] nvme: split nvme status from block req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 18:47   ` Johannes Thumshirn
2017-04-06 18:47     ` Johannes Thumshirn
2017-04-06 18:47     ` Johannes Thumshirn
2017-04-06 15:39 ` [PATCH 05/25] nvme: make nvme_error_status private Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 06/25] virtio: fix spelling of virtblk_scsi_request_done Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 18:53   ` Johannes Thumshirn
2017-04-06 18:53     ` Johannes Thumshirn
2017-04-06 18:53     ` Johannes Thumshirn
2017-04-13 20:05   ` Bart Van Assche
2017-04-13 20:05     ` Bart Van Assche
2017-04-13 20:05     ` Bart Van Assche
2017-04-06 15:39 ` [PATCH 07/25] virtio_blk: don't use req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 18:55   ` Johannes Thumshirn
2017-04-06 18:55     ` Johannes Thumshirn
2017-04-06 18:55     ` Johannes Thumshirn
2017-04-06 15:39 ` [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-13 20:41   ` Bart Van Assche [this message]
2017-04-13 20:41     ` Bart Van Assche
2017-04-13 20:41     ` Bart Van Assche
2017-04-06 15:39 ` [PATCH 09/25] scsi: introduce a new result field in struct scsi_request Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 10/25] loop: zero-fill bio on the submitting cpu Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-12 10:24   ` Ming Lei
2017-04-12 10:24     ` Ming Lei
2017-04-06 15:39 ` [PATCH 11/25] null_blk: don't pass always-0 req->errors to blk_mq_complete_request Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 12/25] dm rq: don't pass irrelevant error code " Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 13/25] dm mpath: don't check for req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 14/25] nbd: don't use req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 21:11   ` Josef Bacik
2017-04-06 21:11     ` Josef Bacik
2017-04-06 15:39 ` [PATCH 15/25] mtip32xx: add a status field to struct mtip_cmd Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 16/25] xen-blkfront: don't use req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-18 15:00   ` Roger Pau Monné
2017-04-18 15:00     ` Roger Pau Monné
2017-04-18 15:00     ` Roger Pau Monné
2017-04-18 15:05     ` Konrad Rzeszutek Wilk
2017-04-18 15:05       ` Konrad Rzeszutek Wilk
2017-04-18 15:05       ` Konrad Rzeszutek Wilk
2017-04-06 15:39 ` [PATCH 17/25] blk-mq: remove the error argument to blk_mq_complete_request Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-18 15:03   ` Roger Pau Monné
2017-04-18 15:03     ` Roger Pau Monné
2017-04-18 15:03     ` Roger Pau Monné
2017-04-18 15:06     ` Konrad Rzeszutek Wilk
2017-04-18 15:06       ` Konrad Rzeszutek Wilk
2017-04-18 15:06       ` Konrad Rzeszutek Wilk
2017-04-06 15:39 ` [PATCH 18/25] blk-mq: simplify __blk_mq_complete_request Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 19/25] block: add a error_count field to struct request Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 20/25] floppy: switch from req->errors to req->error_count Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 21/25] ataflop: " Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 22/25] swim3: remove (commented out) printing of req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 23/25] pd: remove bogus check for req->errors Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 24/25] blktrace: remove the unused block_rq_abort tracepoint Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 15:39 ` [PATCH 25/25] block: remove the errors field from struct request Christoph Hellwig
2017-04-06 15:39   ` Christoph Hellwig
2017-04-06 20:00 ` kill req->errors Konrad Rzeszutek Wilk
2017-04-06 20:00   ` Konrad Rzeszutek Wilk
2017-04-07  7:11   ` Christoph Hellwig
2017-04-07  7:11     ` Christoph Hellwig
2017-04-18 14:33     ` Konrad Rzeszutek Wilk
2017-04-18 14:33       ` Konrad Rzeszutek Wilk
2017-04-12  8:37   ` Christoph Hellwig
2017-04-12  8:37     ` Christoph Hellwig
2017-04-12  8:38 ` Christoph Hellwig
2017-04-12  8:38   ` Christoph Hellwig
2017-04-18  0:59   ` Guan Junxiong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1492116064.24345.12.camel@sandisk.com \
    --to=bart.vanassche@sandisk.com \
    --cc=axboe@kernel.dk \
    --cc=dm-devel@redhat.com \
    --cc=hch@lst.de \
    --cc=james.smart@broadcom.com \
    --cc=jbacik@fb.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=roger.pau@citrix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.