MFC r277247: Don't count status as sent until CTIO completes successfully.

If we aggregated status sending with data move and got error, allow status
to be updated and resent again separately.  Without this command may stuck
without status sent at all.
This commit is contained in:
mav 2015-01-30 09:05:43 +00:00
parent aba44db36e
commit 0a6db6b09e

View File

@ -891,7 +891,6 @@ ctlfestart(struct cam_periph *periph, union ccb *start_ccb)
(cmd_info->flags & CTLFE_CMD_PIECEWISE) == 0 &&
((io->io_hdr.flags & CTL_FLAG_DMA_QUEUED) == 0 ||
io->io_hdr.status == CTL_SUCCESS)) {
io->io_hdr.flags |= CTL_FLAG_STATUS_SENT;
flags |= CAM_SEND_STATUS;
scsi_status = io->scsiio.scsi_status;
csio->sense_len = io->scsiio.sense_len;
@ -1265,6 +1264,10 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
break;
}
if ((done_ccb->ccb_h.flags & CAM_SEND_STATUS) &&
(done_ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP)
io->io_hdr.flags |= CTL_FLAG_STATUS_SENT;
/*
* If we were sending status back to the initiator, free up
* resources. If we were doing a datamove, call the