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

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: usb/150401: commit references a PR
Date: Mon, 18 Apr 2011 11:25:28 +0000 (UTC)

 Author: mav
 Date: Mon Apr 18 11:25:13 2011
 New Revision: 220771
 URL: http://svn.freebsd.org/changeset/base/220771
 
 Log:
   Rework change made at r203146. Instead of reporting all wire errors as
   SCSI status errors to CAM (that was wrong, as it too often turned retriable
   wire errors into non-retriable REQUEST SENSE errors), do it only for STALL
   errors on control pipe of the CBI devices. STALL on control pipe is just
   a one of the ways to report error for CBI devices.
   
   PR:          usb/150401, usb/154593.
   Reviewed by: hselasky
 
 Modified:
   stable/8/sys/dev/usb/storage/umass.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/dev/usb/storage/umass.c
 ==============================================================================
 --- stable/8/sys/dev/usb/storage/umass.c       Mon Apr 18 10:25:54 2011        
(r220770)
 +++ stable/8/sys/dev/usb/storage/umass.c       Mon Apr 18 11:25:13 2011        
(r220771)
 @@ -1850,9 +1850,23 @@ umass_t_cbi_command_callback(struct usb_
                break;
  
        default:                        /* Error */
 -              umass_tr_error(xfer, error);
 -              /* skip reset */
 -              sc->sc_last_xfer_index = UMASS_T_CBI_COMMAND;
 +              /*
 +               * STALL on the control pipe can be result of the command error.
 +               * Attempt to clear this STALL same as for bulk pipe also
 +               * results in command completion interrupt, but ASC/ASCQ there
 +               * look like not always valid, so don't bother about it.
 +               */
 +              if ((error == USB_ERR_STALLED) ||
 +                  (sc->sc_transfer.callback == &umass_cam_cb)) {
 +                      sc->sc_transfer.ccb = NULL;
 +                      (sc->sc_transfer.callback)
 +                          (sc, ccb, sc->sc_transfer.data_len,
 +                          STATUS_CMD_UNKNOWN);
 +              } else {
 +                      umass_tr_error(xfer, error);
 +                      /* skip reset */
 +                      sc->sc_last_xfer_index = UMASS_T_CBI_COMMAND;
 +              }
                break;
        }
  }
 @@ -2606,17 +2620,9 @@ umass_cam_cb(struct umass_softc *sc, uni
                /*
                 * The wire protocol failed and will hopefully have
                 * recovered. We return an error to CAM and let CAM
 -               * retry the command if necessary. In case of SCSI IO
 -               * commands we ask the CAM layer to check the
 -               * condition first. This is a quick hack to make
 -               * certain devices work.
 +               * retry the command if necessary.
                 */
 -              if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
 -                      ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR;
 -                      ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
 -              } else {
 -                      ccb->ccb_h.status = CAM_REQ_CMP_ERR;
 -              }
 +              ccb->ccb_h.status = CAM_REQ_CMP_ERR;
                xpt_done(ccb);
                break;
        }
 _______________________________________________
 svn-src-...@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
 
_______________________________________________
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