Author: thompsa
Date: Wed Oct 21 19:48:27 2009
New Revision: 198348
URL: http://svn.freebsd.org/changeset/base/198348

Log:
  MFC r198307
  
   Change from CAM_TID_INVALID to CAM_SEL_TIMEOUT error code when the usb device
   has been yanked, this works around a cam recounting bug when
   CAM_DEV_UNCONFIGURED is set late in the detach. In certain conditions the
   reference to the XPT device would not be released which would cause the usb
   explore thread to sleep forever on "simfree", preventing any new usb devices 
to
   be found/ejected on the bus.
  
  Approved by:  re (kib)

Modified:
  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)
  stable/8/sys/dev/usb/storage/umass.c
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/usb/storage/umass.c
==============================================================================
--- stable/8/sys/dev/usb/storage/umass.c        Wed Oct 21 19:39:34 2009        
(r198347)
+++ stable/8/sys/dev/usb/storage/umass.c        Wed Oct 21 19:48:27 2009        
(r198348)
@@ -2843,8 +2843,9 @@ umass_cam_action(struct cam_sim *sim, un
 {
        struct umass_softc *sc = (struct umass_softc *)sim->softc;
 
-       if (sc == UMASS_GONE) {
-               ccb->ccb_h.status = CAM_TID_INVALID;
+       if (sc == UMASS_GONE ||
+           (sc != NULL && !usbd_device_attached(sc->sc_udev))) {
+               ccb->ccb_h.status = CAM_SEL_TIMEOUT;
                xpt_done(ccb);
                return;
        }
_______________________________________________
svn-src-all@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"

Reply via email to