summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2010-03-31 17:47:57 +0000
committermjacob <mjacob@FreeBSD.org>2010-03-31 17:47:57 +0000
commit8b3f44d23fac2bd1e913f667399bb16b04678075 (patch)
tree4f12004a34e2608c917bb087de500622f6b69838
parentfd75fb84178fb083ef0af86f7775323b449b636b (diff)
downloadFreeBSD-src-8b3f44d23fac2bd1e913f667399bb16b04678075.zip
FreeBSD-src-8b3f44d23fac2bd1e913f667399bb16b04678075.tar.gz
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
-rw-r--r--sys/cam/cam_xpt.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 4871e85..1812edb 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -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_code, struct cam_eb *bus,
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);
}
}
-
OpenPOWER on IntegriCloud