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-all
mailing list