aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Long <scottl@FreeBSD.org>2005-05-06 00:54:02 +0000
committerScott Long <scottl@FreeBSD.org>2005-05-06 00:54:02 +0000
commitdff6e84dafe00bfeba946991db42eeec2f0ce727 (patch)
tree2a01795719cf2f3943e56f9a2ead97b4496d0605
parentf37ba224709daf04f85ecde90a632d31df4f84ae (diff)
MFC: Properly lock calls to xpt_done()
Approved by: re
Notes
svn path=/releng/5.4/; revision=145946
-rw-r--r--sys/dev/amr/amr_cam.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/dev/amr/amr_cam.c b/sys/dev/amr/amr_cam.c
index 66e4b5b4a0fb..ba9b59062d5e 100644
--- a/sys/dev/amr/amr_cam.c
+++ b/sys/dev/amr/amr_cam.c
@@ -558,7 +558,11 @@ amr_cam_complete(struct amr_command *ac)
free(ap, M_DEVBUF);
if ((csio->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE)
debug(2, "%*D\n", imin(csio->dxfer_len, 16), csio->data_ptr, " ");
+ mtx_unlock(&ac->ac_sc->amr_io_lock);
+ mtx_lock(&Giant);
xpt_done((union ccb *)csio);
+ mtx_unlock(&Giant);
+ mtx_lock(&ac->ac_sc->amr_io_lock);
amr_releasecmd(ac);
}
@@ -621,6 +625,10 @@ amr_cam_complete_extcdb(struct amr_command *ac)
free(aep, M_DEVBUF);
if ((csio->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE)
debug(2, "%*D\n", imin(csio->dxfer_len, 16), csio->data_ptr, " ");
+ mtx_unlock(&ac->ac_sc->amr_io_lock);
+ mtx_lock(&Giant);
xpt_done((union ccb *)csio);
+ mtx_unlock(&Giant);
+ mtx_lock(&ac->ac_sc->amr_io_lock);
amr_releasecmd(ac);
}