summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/ata/atapi-cam.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/ata/atapi-cam.c b/sys/dev/ata/atapi-cam.c
index 9d495ae..a95825d 100644
--- a/sys/dev/ata/atapi-cam.c
+++ b/sys/dev/ata/atapi-cam.c
@@ -549,11 +549,15 @@ atapi_poll(struct cam_sim *sim)
static void
atapi_cb(struct ata_request *request)
{
- struct atapi_hcb *hcb = (struct atapi_hcb *) request->driver;
- struct ccb_scsiio *csio = &hcb->ccb->csio;
+ struct atapi_hcb *hcb;
+ struct ccb_scsiio *csio;
u_int32_t rc;
mtx_lock(&Giant);
+
+ hcb = (struct atapi_hcb *)request->driver;
+ csio = &hcb->ccb->csio;
+
#ifdef CAMDEBUG
# define err (request->error)
if (CAM_DEBUGGED(csio->ccb_h.path, CAM_DEBUG_CDB)) {
@@ -597,8 +601,11 @@ atapi_cb(struct ata_request *request)
bcopy(hcb->dxfer_alloc, csio->data_ptr, csio->dxfer_len);
}
}
+
free_hcb_and_ccb_done(hcb, rc);
mtx_unlock(&Giant);
+
+ ata_free_request(request);
}
static void
OpenPOWER on IntegriCloud