From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Mark Lord <liml@rtr.ca>
Cc: linux-kernel@vger.kernel.org,
IDE/ATA development list <linux-ide@vger.kernel.org>,
linux-scsi <linux-scsi@vger.kernel.org>
Subject: Re: [PATCH] scsi_lib.c: continue after MEDIUM_ERROR
Date: Tue, 30 Jan 2007 19:16:39 -0600 [thread overview]
Message-ID: <1170206199.10890.13.camel@mulgrave.il.steeleye.com> (raw)
In-Reply-To: <200701301947.08478.liml@rtr.ca>
First off, please send SCSI patches to the SCSI list:
<linux-scsi@vger.kernel.org>
On Tue, 2007-01-30 at 19:47 -0500, Mark Lord wrote:
> In ancient kernels, the SCSI disk code used to continue after
> encountering a MEDIUM_ERROR. It would "complete" the good
> sectors before the error, fail the bad sector/block, and then
> continue with the rest of the request.
>
> Kernels since about 2.6.16 or so have been broken in this regard.
> They "complete" the good sectors before the error,
> and then fail the entire remaining portions of the request.
What was the commit that introduced the change? ... I have a vague
memory of it being deliberate.
> This is very risky behaviour, as a request is often a merge
> of several bios, and just because one application hits a bad sector
> is no reason to pretend that (for example) an adjacent directly lookup also failed.
>
> This patch fixes the behaviour to be similar to what we had originally.
>
> When a bad sector is encounted, SCSI will now work around it again,
> failing *only* the bad sector itself.
Erm, but the corollary is that if we get a large read failure because of
a bad track, you're going to try and chunk up it a sector at a time
forcing an individual error for each sector is going to annoy some
people ... particularly removable medium ones which return this error if
the medium isn't present ... Are you sure this is really what we want to
do?
> Signed-off-by: Mark Lord <mlord@pobox.com>
> ---
> diff -u --recursive --new-file --exclude-from=linux_17//Documentation/dontdiff old/drivers/scsi/scsi_lib.c linux/drivers/scsi/scsi_lib.c
> --- old/drivers/scsi/scsi_lib.c 2007-01-30 13:58:05.000000000 -0500
> +++ linux/drivers/scsi/scsi_lib.c 2007-01-30 18:30:01.000000000 -0500
> @@ -865,6 +865,12 @@
> */
> if (sense_valid && !sense_deferred) {
> switch (sshdr.sense_key) {
> + case MEDIUM_ERROR:
> + // Bad sector. Fail it, and then continue the rest of the request:
> + if (scsi_end_request(cmd, 0, cmd->device->sector_size, 1) == NULL) {
The sense key may have come with additional information I think we want
to parse that (if it exists) rather than just blindly failing the first
sector of the request.
> + cmd->retries = 0; // go around again..
> + return;
> + }
This would drop through to the UNIT_ATTENTION case if scsi_end_request()
fails ... I don't think that's correct.
> case UNIT_ATTENTION:
> if (cmd->device->removable) {
> /* Detected disc change. Set a bit
next prev parent reply other threads:[~2007-01-31 1:16 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-31 0:47 Mark Lord
2007-01-31 1:12 ` [PATCH] RESEND " Mark Lord
2007-01-31 1:16 ` James Bottomley [this message]
2007-01-31 1:36 ` [PATCH] " Mark Lord
[not found] ` <311601c90701301725n53d25a74g652b7ca3bfc64c56@mail.gmail.com>
2007-01-31 1:41 ` Mark Lord
2007-01-31 3:20 ` Ric Wheeler
2007-01-31 4:21 ` James Bottomley
2007-01-31 15:13 ` Mark Lord
2007-01-31 15:22 ` Mark Lord
2007-01-31 15:24 ` James Bottomley
2007-01-31 5:09 ` Douglas Gilbert
2007-01-31 15:08 ` Mark Lord
2007-01-31 15:23 ` Alan
2007-01-31 16:35 ` Ric Wheeler
2007-01-31 17:57 ` Mark Lord
2007-01-31 18:13 ` James Bottomley
2007-01-31 18:37 ` Mark Lord
2007-01-31 9:30 ` Jeff Garzik
2007-01-31 14:36 ` Ric Wheeler
2007-01-31 15:28 ` Douglas Gilbert
2007-01-31 15:38 ` Mark Lord
2007-02-01 20:02 ` Mark Lord
2007-02-01 21:55 ` James Bottomley
2007-02-02 2:48 ` Mark Lord
2007-02-02 12:20 ` Ric Wheeler
2007-02-02 14:42 ` Alan
2007-02-02 14:53 ` James Bottomley
2007-02-02 16:16 ` Ric Wheeler
2007-02-02 20:16 ` Douglas Gilbert
2007-02-02 14:50 ` Alan
2007-02-02 16:06 ` Mark Lord
2007-02-02 19:49 ` Matt Mackall
2007-02-02 22:58 ` Mark Lord
2007-02-02 23:07 ` Matt Mackall
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=1170206199.10890.13.camel@mulgrave.il.steeleye.com \
--to=james.bottomley@hansenpartnership.com \
--cc=liml@rtr.ca \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®