From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Steven Haber <steven@qumulo.com>, linux-scsi@vger.kernel.org
Subject: Re: SCSI eats error from flush failure during hot plug
Date: Thu, 26 Jun 2014 14:52:14 -0400 [thread overview]
Message-ID: <1403808734.6440.12.camel@dabdike> (raw)
In-Reply-To: <20140626150208.GA14887@infradead.org>
On Thu, 2014-06-26 at 08:02 -0700, Christoph Hellwig wrote:
> Hi Steven,
>
> can you test the patch below?
>
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index f7e3163..9b56e48 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -733,6 +733,14 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
> scsi_next_command(cmd);
> return;
> }
> + } else if (req->cmd_flags & REQ_FLUSH) {
> + /*
> + * Flush request don't transfer data, so we can't try
> + * to complete the good bytes first before checking
> + * the error.
> + */
> + if (result && !sense_deferred)
> + error = __scsi_error_from_host_byte(cmd, result);
Well, no, that's wrong. To catch all of the corner cases that slip
through here, the check is for a zero length command with and error
otherwise we get the same problem for failed discards.
This is what the check should be.
James
---
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index f7e3163..83e447e 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -733,6 +733,14 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
scsi_next_command(cmd);
return;
}
+ } else if (blk_rq_bytes(req) == 0 && result && !sense_deferred) {
+ /*
+ * Certain non BLOCK_PC requests are commands that don't
+ * actually transfer anything (FLUSH, DISCARD), so cannot use
+ * good_bytes == 0 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 !REQ_TYPE_BLOCK_PC yet */
next prev parent reply other threads:[~2014-06-26 18:52 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 23:52 SCSI eats error from flush failure during hot plug Steven Haber
2014-06-07 19:29 ` James Bottomley
2014-06-09 17:21 ` Steven Haber
2014-06-09 17:29 ` James Bottomley
2014-06-11 13:37 ` Christoph Hellwig
2014-06-19 18:05 ` James Bottomley
2014-06-25 13:13 ` Christoph Hellwig
2014-06-26 14:02 ` James Bottomley
2014-06-26 15:00 ` Christoph Hellwig
2014-06-26 15:04 ` James Bottomley
2014-06-26 15:08 ` Christoph Hellwig
2014-06-26 18:52 ` James Bottomley
2014-06-27 7:53 ` Christoph Hellwig
2014-06-26 15:02 ` Christoph Hellwig
2014-06-26 18:13 ` Steven Haber
2014-06-26 18:52 ` James Bottomley [this message]
2014-06-27 7:55 ` Christoph Hellwig
[not found] ` <CAPK7rjdpxAALA-oLZJ3wDBPc3kr5Nw4jLALLxEaT0zSiAOD+wg@mail.gmail.com>
2014-06-30 18:45 ` Steven Haber
2014-07-01 8:15 ` Christoph Hellwig
2014-07-03 16:57 ` Steven Haber
2014-07-03 17:18 ` Christoph Hellwig
2014-07-09 22:38 ` James Bottomley
2014-07-10 7:44 ` Christoph Hellwig
2014-07-17 15:27 ` Martin K. Petersen
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=1403808734.6440.12.camel@dabdike \
--to=james.bottomley@hansenpartnership.com \
--cc=hch@infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=steven@qumulo.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.