From: Christoph Hellwig <hch@lst.de> To: Jens Axboe <axboe@kernel.dk> Cc: "Josef Bacik" <jbacik@fb.com>, "James Smart" <james.smart@broadcom.com>, "Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>, "Roger Pau Monné" <roger.pau@citrix.com>, linux-scsi@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests Date: Thu, 6 Apr 2017 17:39:27 +0200 [thread overview] Message-ID: <20170406153944.10058-9-hch@lst.de> (raw) In-Reply-To: <20170406153944.10058-1-hch@lst.de> 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); } if (blk_rq_is_passthrough(req)) { - if (result) { - if (sense_valid) { - /* - * SG_IO wants current and deferred errors - */ - scsi_req(req)->sense_len = - min(8 + cmd->sense_buffer[7], - SCSI_SENSE_BUFFERSIZE); - } - if (!sense_deferred) - error = __scsi_error_from_host_byte(cmd, result); + if (result && sense_valid) { + scsi_req(req)->sense_len = min(8 + cmd->sense_buffer[7], + SCSI_SENSE_BUFFERSIZE); } + /* * __scsi_error_from_host_byte may have reset the host_byte */ @@ -812,13 +808,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) BUG(); return; } - } else if (blk_rq_bytes(req) == 0 && result && !sense_deferred) { - /* - * Flush commands do not transfers any data, and thus cannot use - * good_bytes != blk_rq_bytes(req) as the signal for an error. - * This sets the error explicitly for the problem case. - */ - error = __scsi_error_from_host_byte(cmd, result); } /* no bidi support for !blk_rq_is_passthrough yet */ @@ -848,7 +837,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) else if (!(req->rq_flags & RQF_QUIET)) scsi_print_sense(cmd); result = 0; - /* for passthrough error may be set */ error = 0; } @@ -877,8 +865,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) if (result == 0) goto requeue; - error = __scsi_error_from_host_byte(cmd, result); - if (host_byte(result) == DID_RESET) { /* Third party bus reset or reset for error recovery * reasons. Just retry the command and see what -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: hch@lst.de (Christoph Hellwig) Subject: [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests Date: Thu, 6 Apr 2017 17:39:27 +0200 [thread overview] Message-ID: <20170406153944.10058-9-hch@lst.de> (raw) In-Reply-To: <20170406153944.10058-1-hch@lst.de> 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); } if (blk_rq_is_passthrough(req)) { - if (result) { - if (sense_valid) { - /* - * SG_IO wants current and deferred errors - */ - scsi_req(req)->sense_len = - min(8 + cmd->sense_buffer[7], - SCSI_SENSE_BUFFERSIZE); - } - if (!sense_deferred) - error = __scsi_error_from_host_byte(cmd, result); + if (result && sense_valid) { + scsi_req(req)->sense_len = min(8 + cmd->sense_buffer[7], + SCSI_SENSE_BUFFERSIZE); } + /* * __scsi_error_from_host_byte may have reset the host_byte */ @@ -812,13 +808,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) BUG(); return; } - } else if (blk_rq_bytes(req) == 0 && result && !sense_deferred) { - /* - * Flush commands do not transfers any data, and thus cannot use - * good_bytes != blk_rq_bytes(req) as the signal for an error. - * This sets the error explicitly for the problem case. - */ - error = __scsi_error_from_host_byte(cmd, result); } /* no bidi support for !blk_rq_is_passthrough yet */ @@ -848,7 +837,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) else if (!(req->rq_flags & RQF_QUIET)) scsi_print_sense(cmd); result = 0; - /* for passthrough error may be set */ error = 0; } @@ -877,8 +865,6 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) if (result == 0) goto requeue; - error = __scsi_error_from_host_byte(cmd, result); - if (host_byte(result) == DID_RESET) { /* Third party bus reset or reset for error recovery * reasons. Just retry the command and see what -- 2.11.0
next prev parent reply other threads:[~2017-04-06 15:39 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 ` Christoph Hellwig [this message] 2017-04-06 15:39 ` [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests Christoph Hellwig 2017-04-13 20:41 ` Bart Van Assche 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=20170406153944.10058-9-hch@lst.de \ --to=hch@lst.de \ --cc=axboe@kernel.dk \ --cc=dm-devel@redhat.com \ --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: linkBe 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.