svn commit: r205993 - head/sys/cam

Matt Jacob mjacob at FreeBSD.org
Wed Mar 31 17:47:58 UTC 2010


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);
 	}
 }
-


More information about the svn-src-head mailing list