hyperv/storvsc: Fixup SRB status.

This unbreaks GEN2 Hyper-V cd support.

Submitted by:	Hongjiang Zhang <honzhan microsoft com>
Reviewed by:	dexuan@
MFC after:	3 days
Sponsored by:	Microsoft
Differential Revision:	https://reviews.freebsd.org/D10212
This commit is contained in:
Sepherosa Ziehau 2017-04-05 08:15:47 +00:00
parent 4360d992ef
commit 498ef762ec
2 changed files with 8 additions and 8 deletions

View File

@ -2148,19 +2148,20 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
ccb->ccb_h.status &= ~CAM_STATUS_MASK;
int srb_status = SRB_STATUS(vm_srb->srb_status);
if (vm_srb->scsi_status == SCSI_STATUS_OK) {
const struct scsi_generic *cmd;
cmd = (const struct scsi_generic *)
((ccb->ccb_h.flags & CAM_CDB_POINTER) ?
csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes);
if (vm_srb->srb_status != SRB_STATUS_SUCCESS) {
if (srb_status != SRB_STATUS_SUCCESS) {
/*
* If there are errors, for example, invalid LUN,
* host will inform VM through SRB status.
*/
if (bootverbose) {
if (vm_srb->srb_status == SRB_STATUS_INVALID_LUN) {
if (srb_status == SRB_STATUS_INVALID_LUN) {
xpt_print(ccb->ccb_h.path,
"invalid LUN %d for op: %s\n",
vm_srb->lun,
@ -2168,7 +2169,7 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
} else {
xpt_print(ccb->ccb_h.path,
"Unknown SRB flag: %d for op: %s\n",
vm_srb->srb_status,
srb_status,
scsi_op_desc(cmd->opcode, NULL));
}
}
@ -2191,7 +2192,7 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
}
if (cmd->opcode == INQUIRY &&
vm_srb->srb_status == SRB_STATUS_SUCCESS) {
srb_status == SRB_STATUS_SUCCESS) {
int resp_xfer_len, resp_buf_len, data_len;
uint8_t *resp_buf = (uint8_t *)csio->data_ptr;
struct scsi_inquiry_data *inq_data =

View File

@ -242,17 +242,16 @@ struct vstor_packet {
#define SRB_STATUS_PENDING 0x00
#define SRB_STATUS_SUCCESS 0x01
#define SRB_STATUS_ABORTED 0x02
#define SRB_STATUS_ABORT_FAILED 0x03
#define SRB_STATUS_ERROR 0x04
#define SRB_STATUS_BUSY 0x05
#define SRB_STATUS_INVALID_LUN 0x20
/**
* SRB Status Masks (can be combined with above status codes)
*/
#define SRB_STATUS_QUEUE_FROZEN 0x40
#define SRB_STATUS_AUTOSENSE_VALID 0x80
#define SRB_STATUS_INVALID_LUN 0X20
#define SRB_STATUS(status) \
((status) & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
/*
* SRB Flag Bits
*/