diff options
author | mjacob <mjacob@FreeBSD.org> | 2010-03-31 17:47:57 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2010-03-31 17:47:57 +0000 |
commit | 8b3f44d23fac2bd1e913f667399bb16b04678075 (patch) | |
tree | 4f12004a34e2608c917bb087de500622f6b69838 | |
parent | fd75fb84178fb083ef0af86f7775323b449b636b (diff) | |
download | FreeBSD-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.c | 7 |
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); } } - |