Author: mjacob
Date: Wed Mar 31 17:47:57 2010
New Revision: 205993
URL: http://svn.freebsd.org/changeset/base/205993

Log:
  For unhandled actions in xpt_action_default, remember to call
  xpt_done for queued requests. This solves the problem of
  indefinite hangs for unspecified transports when XPT_SCAN_BUS
  is called.
  
  A few minor cosmetics elsewhere.
  
  MFC after:    1 week

Modified:
  head/sys/cam/cam_xpt.c

Modified: head/sys/cam/cam_xpt.c
==============================================================================
--- head/sys/cam/cam_xpt.c      Wed Mar 31 17:40:13 2010        (r205992)
+++ head/sys/cam/cam_xpt.c      Wed Mar 31 17:47:57 2010        (r205993)
@@ -2380,6 +2380,7 @@ xpt_action_default(union ccb *start_ccb)
                if (start_ccb->ccb_h.func_code == XPT_ATA_IO) {
                        start_ccb->ataio.resid = 0;
                }
+               /* FALLTHROUGH */
        case XPT_RESET_DEV:
        case XPT_ENG_EXEC:
        {
@@ -2888,6 +2889,9 @@ xpt_action_default(union ccb *start_ccb)
        case XPT_ENG_INQ:
                /* XXX Implement */
                start_ccb->ccb_h.status = CAM_PROVIDE_FAIL;
+               if (start_ccb->ccb_h.func_code & XPT_FC_DEV_QUEUED) {
+                       xpt_done(start_ccb);
+               }
                break;
        }
 }
@@ -3930,7 +3934,7 @@ xpt_dev_async_default(u_int32_t async_co
                      struct cam_et *target, struct cam_ed *device,
                      void *async_arg)
 {
-       printf("xpt_dev_async called\n");
+       printf("%s called\n", __func__);
 }
 
 u_int32_t
@@ -4919,4 +4923,3 @@ camisr_runqueue(void *V_queue)
                (*ccb_h->cbfcnp)(ccb_h->path->periph, (union ccb *)ccb_h);
        }
 }
-
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to