From: Alan Jenkins <alan-jenkins-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
To: Alan Stern <stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org>
Cc: James Bottomley
<James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk@public.gmane.org>,
Hans de Goede <j.w.r.degoede-fbo2DhPpy/Q@public.gmane.org>,
SCSI development list
<linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
USB list <linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Antonio Ospite
<ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
Subject: Re: BUG in handling of last_sector_bug flag
Date: Tue, 12 Aug 2008 10:08:40 +0100 [thread overview]
Message-ID: <48A15318.30600@tuffmail.co.uk> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0808111209100.2142-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
Alan Stern wrote:
> Antonio reported a problem in
>
> http://marc.info/?l=linux-usb&m=121802760208717&w=2
>
> and I have traced it to a bad interaction between the last_sector_bug
> flag in sd.c and error reporting in the midlayer.
>
> The last_sector_bug flag is set for devices which can't handle
> multi-sector accesses at the end of the medium. It causes such
> accesses to be broken up into multiple single-sector accesses. For
> example, a read request for the last 8 sectors of a drive would be
> turned into eight read requests, each for a single sector.
>
> The problem arises when one of those single-sector requests fails with
> an I/O error. In the example above, the total length of the original
> request was 4096 bytes. But scsi_io_completion() is called with
> good_bytes = 0 and this_count gets set to 512, the number of bytes in
> the failed command.
>
> At the end of the function, scsi_end_request() is called with error =
> -EIO, bytes = 512, and requeue = 0. This results in a call to
>
> blk_end_request(req, -EIO, 512);
>
> and the remainder of the request is left hanging out to dry. It never
> is requeued, it never completes, and the caller hangs.
>
> This suggests that we need to change the call to scsi_end_request() at
> the end of scsi_io_completion(). If result is nonzero then nothing
> will be requeued, so this_count should be replaced with the total
> number of bytes remaining in the request. Does that sound reasonable?
>
> If anyone would like to recreate the conditions leading to this
> problem, there's a description of how to do it in this email:
>
> http://marc.info/?l=linux-kernel&m=121805565105096&w=2
>
It sounds a bit like the hangs that happened with my buggy card reader.
My card reader returned errors because of the IO patterns from the first
version of the last_sector_bug flag. But instead of reads returning
with errors, I just ended up with hung processes.
It's great to see this tracked down. Keep me CC'd and I'll test
whatever patch you come up with. I can simulate the old last_sector_bug
behaviour by changing SD_LAST_BUGGY_SECTORS to 1 (instead of 8).
Alan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-08-12 9:08 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-11 17:03 BUG in handling of last_sector_bug flag Alan Stern
[not found] ` <Pine.LNX.4.44L0.0808111209100.2142-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-08-12 9:08 ` Alan Jenkins [this message]
[not found] ` <48A15318.30600-cCz0Lq7MMjm9FHfhHBbuYA@public.gmane.org>
2008-08-12 15:24 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.0808121120130.2248-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-08-12 16:33 ` Boaz Harrosh
[not found] ` <48A1BB71.5050905-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2008-08-12 21:00 ` Alan Stern
2008-08-13 11:13 ` Boaz Harrosh
[not found] ` <48A2C1F5.6000708-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2008-08-13 14:50 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.0808131036310.2455-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-08-13 16:37 ` Boaz Harrosh
[not found] ` <48A30DC7.8070501-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2008-08-13 16:45 ` Boaz Harrosh
2008-08-13 19:17 ` Alan Stern
2008-08-14 19:41 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.0808141535350.2148-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-08-15 8:31 ` Alan Jenkins
2008-08-15 17:43 ` Antonio Ospite
2008-08-26 21:13 ` Antonio Ospite
[not found] ` <20080826231301.aac6f0e5.ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
2008-08-27 14:21 ` Alan Stern
2008-08-27 14:33 ` James Bottomley
2008-08-27 15:54 ` Alan Stern
[not found] ` <1219847626.3292.17.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2008-08-27 18:50 ` [PATCH] Fix handling of failed requests in scsi_io_completion Alan Stern
2008-09-05 19:35 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.0809051533280.4482-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-09-19 7:17 ` Antonio Ospite
[not found] ` <20080919091748.9438726b.ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
2008-09-19 15:53 ` Alan Stern
2008-09-20 0:31 ` James Bottomley
2008-09-20 17:06 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.0809201241160.13839-100000-pYrvlCTfrz9XsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-09-20 17:55 ` James Bottomley
2008-09-20 20:49 ` Alan Stern
2008-09-20 21:09 ` James Bottomley
2008-09-21 12:55 ` Boaz Harrosh
[not found] ` <48D64459.2010802-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2008-09-21 19:57 ` James Bottomley
[not found] ` <1221944955.3152.58.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2008-09-21 16:30 ` Alan Stern
[not found] ` <Pine.LNX.4.44L0.0809211201470.1154-100000-pYrvlCTfrz9XsRXLowluHWD2FQJk+8+b@public.gmane.org>
2008-09-21 19:59 ` James Bottomley
[not found] ` <1222027177.3152.121.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2008-09-21 21:03 ` Alan Stern
2008-09-22 7:24 ` Boaz Harrosh
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=48A15318.30600@tuffmail.co.uk \
--to=alan-jenkins-ccz0lq7mmjm9fhfhhbbuya@public.gmane.org \
--cc=James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk@public.gmane.org \
--cc=j.w.r.degoede-fbo2DhPpy/Q@public.gmane.org \
--cc=linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org \
--cc=stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.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