Re: 2.6.15: usb storage device not detected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 19 Feb 2006 16:19:15 +1100, CaT <[email protected]> wrote:

Thanks for the trace, CaT!

> c31f414c 744561726 S Bo:005:02 -115 31 = 55534243 00000000 00000000 00000600 00000000 00000000 00000000 000000
> c31f414c 744561854 C Bo:005:02 0 31 >
> c31f414c 744561863 S Bi:005:01 -115 13 <
> c31f414c 745057444 C Bi:005:01 0 13 = 55534253 00000000 00000000 00
> c31f414c 745057463 S Ci:005:00 s a1 fe 0000 0000 0001 1 <
> c31f414c 745057691 C Ci:005:00 -32 0
> c31f414c 745057750 S Co:005:00 s 02 01 0000 0081 0000 0
> c31f414c 745058065 C Co:005:00 0 0
> c31f414c 745058072 S Co:005:00 s 02 01 0000 0002 0000 0
> c31f414c 745058314 C Co:005:00 0 0
> c31f414c 745058386 S Bo:005:02 -115 31 = 55534243 01000000 00000000 00000600 00000000 00000000 00000000 000000
> c31f414c 745058437 C Bo:005:02 0 31 >
> c31f414c 745058444 S Bi:005:01 -115 13 <
> c31f414c 750057024 C Bi:005:01 -104 0

I see... This is a device which dislikes the stall clear when called after
a stall on the control pipe.

I knew this was inevitable ever since Wolfgang pointed me at it when we
debugged Martin's Elitegroup K7S5A.

I'm going to send the attached patch to Greg to get it into 2.6.17
(this way it will be separated from all the reset machinery which goes
into 2.6.16). I have tested it on my honest to goodness ZIP-100, and
yes, it stalls the control pipe at the GetMaxLUN, and yes, it works
after that. Here's the hope that it is some kind of an urban legend.

Thanks again,
-- Pete

--- linux-2.6.16-rc2/drivers/block/ub.c	2006-02-11 00:31:36.000000000 -0800
+++ linux-2.6.16-rc2-lem/drivers/block/ub.c	2006-02-18 22:21:30.000000000 -0800
@@ -2480,19 +2477,8 @@ static int ub_probe(struct usb_interface
 
 	nluns = 1;
 	for (i = 0; i < 3; i++) {
-		if ((rc = ub_sync_getmaxlun(sc)) < 0) {
-			/* 
-			 * This segment is taken from usb-storage. They say
-			 * that ZIP-100 needs this, but my own ZIP-100 works
-			 * fine without this.
-			 * Still, it does not seem to hurt anything.
-			 */
-			if (rc == -EPIPE) {
-				ub_probe_clear_stall(sc, sc->recv_bulk_pipe);
-				ub_probe_clear_stall(sc, sc->send_bulk_pipe);
-			}
+		if ((rc = ub_sync_getmaxlun(sc)) < 0)
 			break;
-		}
 		if (rc != 0) {
 			nluns = rc;
 			break;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux