The following reply was made to PR usb/185628; it has been noted by GNATS.

From: Hans Petter Selasky <h...@bitfrost.no>
To: Alex Goncharov <alex_goncharov_...@yahoo.com>, 
 freebsd-gnats-sub...@freebsd.org
Cc:  
Subject: Re: usb/185628: usbd_req_re_enumerate set address failed 
USB_ERR_STALLED
 for Seagate USB drives between r259425 and r260321
Date: Fri, 10 Jan 2014 08:48:38 +0100

 This is a multi-part message in MIME format.
 --------------080508060307050403080600
 Content-Type: text/plain; charset=ISO-8859-1; format=flowed
 Content-Transfer-Encoding: 7bit
 
 On 01/10/14 04:02, Alex Goncharov wrote:
 >
 >> Number:         185628
 >> Category:       usb
 >> Synopsis:       usbd_req_re_enumerate set address failed USB_ERR_STALLED 
 >> for Seagate USB drives between r259425 and r260321
 >> Confidential:   no
 >> Severity:       non-critical
 >> Priority:       low
 >> Responsible:    freebsd-usb
 >> State:          open
 >> Quarter:
 >> Keywords:
 >> Date-Required:
 >> Class:          sw-bug
 >> Submitter-Id:   current-users
 >> Arrival-Date:   Fri Jan 10 03:10:00 UTC 2014
 >> Closed-Date:
 >> Last-Modified:
 >> Originator:     Alex Goncharov
 >> Release:        9.2-STABLE, built from svn source, r260321
 >> Organization:
 >> Environment:
 > FreeBSD 9.2-STABLE FreeBSD 9.2-STABLE #0 r260321 Sun Jan  5 13:06:01 EST 2014
 >> Description:
 > This is an extremely reproducible and very upsetting new problem.
 
 Here is a patch you can try, as an attachment.
 
 --HPS
 
 
 --------------080508060307050403080600
 Content-Type: text/x-patch;
  name="umass.diff"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
  filename="umass.diff"
 
 === umass.c
 ==================================================================
 --- umass.c    (revision 260392)
 +++ umass.c    (local)
 @@ -1362,9 +1362,18 @@
                sc->sc_transfer.data_ptr += actlen;
                sc->sc_transfer.actlen += actlen;
  
 +              /*
 +               * Filter out transfers containing a short packet when
 +               * they shouldn't:
 +               */
                if (actlen < sumlen) {
 -                      /* short transfer */
 -                      sc->sc_transfer.data_rem = 0;
 +                      if (actlen % 512) {
 +                              /* short transfer for sure */
 +                              sc->sc_transfer.data_rem = 0;
 +                      } else {
 +                              /* get the remaining data, if any */
 +                              sc->sc_transfer.data_timeout = 1000;
 +                      }
                }
        case USB_ST_SETUP:
                DPRINTF(sc, UDMASS_BBB, "max_bulk=%d, data_rem=%d\n",
 
 --------------080508060307050403080600--
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to