svn commit: r206373 - stable/8/sys/cam

Matt Jacob mjacob at FreeBSD.org
Wed Apr 7 17:58:30 UTC 2010


Author: mjacob
Date: Wed Apr  7 17:58:29 2010
New Revision: 206373
URL: http://svn.freebsd.org/changeset/base/206373

Log:
  This is an MFC of 205993
  
  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.

Modified:
  stable/8/sys/cam/cam_xpt.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)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/cam/cam_xpt.c
==============================================================================
--- stable/8/sys/cam/cam_xpt.c	Wed Apr  7 17:52:32 2010	(r206372)
+++ stable/8/sys/cam/cam_xpt.c	Wed Apr  7 17:58:29 2010	(r206373)
@@ -2375,6 +2375,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:
 	{
@@ -2883,6 +2884,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;
 	}
 }
@@ -3925,7 +3929,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
@@ -4827,4 +4831,3 @@ camisr_runqueue(void *V_queue)
 		(*ccb_h->cbfcnp)(ccb_h->path->periph, (union ccb *)ccb_h);
 	}
 }
-


More information about the svn-src-all mailing list