Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Mar 2010 17:47:58 +0000 (UTC)
From:      Matt Jacob <mjacob@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r205993 - head/sys/cam
Message-ID:  <201003311747.o2VHlwJX078037@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 	}
 }
-



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003311747.o2VHlwJX078037>