Set CAM_SIM_QUEUED flag before calling ctl_queue() to avoid race.

PR:		194128
Submitted by:	Scott M. Ferris <smferris@gmail.com>
MFC after:	3 days
Sponsored by:	EMC/Isilon Storage Division
This commit is contained in:
Alexander Motin 2014-10-06 14:52:04 +00:00
parent ab7bf3d49d
commit 204ca472bf

View File

@ -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;
}