Comment 53 for bug 61235

Revision history for this message
jonie (jonie) wrote :

My enclosure seems to work stable with 2.6.21.5
For the time being I didn't try Ubuntu with this kernel, but all the distros seem to carry this bug. Then recent SLAX 6 works fine with the default max_sectors.
It may have to do with the following change in kernel:

* Add stable release 2.6.21.5:

     - USB: set the correct Interrupt interval in usb_bulk_msg

From <email address hidden> Mon Apr 23 14:30:35 2007
From: Alan Stern <email address hidden>
Date: Mon, 23 Apr 2007 17:30:32 -0400 (EDT)
Subject: USB: set the correct Interrupt interval in usb_bulk_msg
To: Greg Kroah-Hartman <email address hidden>
Cc: USB development list <email address hidden>
Message-ID: <email address hidden>

This patch (as902) fixes a mistake I introduced into usb_bulk_msg().
usb_fill_int_urb() already does the bit-shifting calculation for
high-speed Interrupt intervals; it shouldn't be done twice.

Signed-off-by: Alan Stern <email address hidden>

---
 drivers/usb/core/message.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -221,15 +221,10 @@ int usb_bulk_msg(struct usb_device *usb_

  if ((ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
    USB_ENDPOINT_XFER_INT) {
- int interval;
-
- if (usb_dev->speed == USB_SPEED_HIGH)
- interval = 1 << min(15, ep->desc.bInterval - 1);
- else
- interval = ep->desc.bInterval;
   pipe = (pipe & ~(3 << 30)) | (PIPE_INTERRUPT << 30);
   usb_fill_int_urb(urb, usb_dev, pipe, data, len,
- usb_api_blocking_completion, NULL, interval);
+ usb_api_blocking_completion, NULL,
+ ep->desc.bInterval);
  } else
   usb_fill_bulk_urb(urb, usb_dev, pipe, data, len,
     usb_api_blocking_completion, NULL)

I'll give it a try with 2.6.20 from Feisty.