summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-10-09 05:28:11 +0000
committermav <mav@FreeBSD.org>2014-10-09 05:28:11 +0000
commit70056e5be98d58f5fe68ccf5cfe4b394f5709ae5 (patch)
tree65fa333f9992044330ceb84d01bd405e7e9e4950
parent142c06446733cb14eb874687d9867f69af201fba (diff)
downloadFreeBSD-src-70056e5be98d58f5fe68ccf5cfe4b394f5709ae5.zip
FreeBSD-src-70056e5be98d58f5fe68ccf5cfe4b394f5709ae5.tar.gz
MFC r272650: Set CAM_SIM_QUEUED flag before calling ctl_queue() to avoid race.
PR: 194128 Submitted by: Scott M. Ferris <smferris@gmail.com> Sponsored by: EMC/Isilon Storage Division
-rw-r--r--sys/cam/ctl/ctl_frontend_cam_sim.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/cam/ctl/ctl_frontend_cam_sim.c b/sys/cam/ctl/ctl_frontend_cam_sim.c
index 72f8dd8..7cdd5b7 100644
--- a/sys/cam/ctl/ctl_frontend_cam_sim.c
+++ b/sys/cam/ctl/ctl_frontend_cam_sim.c
@@ -609,14 +609,16 @@ cfcs_action(struct cam_sim *sim, union ccb *ccb)
bcopy(csio->cdb_io.cdb_bytes, io->scsiio.cdb,
io->scsiio.cdb_len);
+ ccb->ccb_h.status |= CAM_SIM_QUEUED;
err = ctl_queue(io);
if (err != CTL_RETVAL_COMPLETE) {
printf("%s: func %d: error %d returned by "
"ctl_queue()!\n", __func__,
ccb->ccb_h.func_code, err);
ctl_free_io(io);
- } else {
- ccb->ccb_h.status |= CAM_SIM_QUEUED;
+ ccb->ccb_h.status = CAM_REQ_INVALID;
+ xpt_done(ccb);
+ return;
}
break;
}
OpenPOWER on IntegriCloud