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:
parent
4360d992ef
commit
498ef762ec
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=316519
@ -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 =
|
||||
|
@ -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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user