summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsephe <sephe@FreeBSD.org>2017-06-26 05:56:49 +0000
committersephe <sephe@FreeBSD.org>2017-06-26 05:56:49 +0000
commit1a90e3eedf0d6060a3727086ed80c6f4a1eca658 (patch)
tree78ac9134c6b54904edf50ab5918f1f2d02c12edb
parent6522ea5eaa83bdcaa37280d58bd58abf364c5acf (diff)
downloadFreeBSD-src-1a90e3eedf0d6060a3727086ed80c6f4a1eca658.zip
FreeBSD-src-1a90e3eedf0d6060a3727086ed80c6f4a1eca658.tar.gz
MFC 320184
hyperv/storvsc: Reduce log verbosity On some windows hosts TEST_UNIT_READY command will return SRB_STATUS_ERROR and sense data "NOT READY asc:3a,1 (Medium not present - tray closed)", this occurs periodically, and not hurt anything else. So, we prefer to ignore this kind of errors. Approved by: re (delphij) PR: 219973 Submitted by: Hongjiang Zhang <hongzhan microsoft com> Sponsored by: Microsoft Differential Revision: https://reviews.freebsd.org/D11271
-rw-r--r--sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c b/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
index f1a4d53..5d6279e 100644
--- a/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
@@ -2095,6 +2095,7 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
struct vmscsi_req *vm_srb = &reqp->vstor_packet.u.vm_srb;
bus_dma_segment_t *ori_sglist = NULL;
int ori_sg_count = 0;
+ const struct scsi_generic *cmd;
/* destroy bounce buffer if it is used */
if (reqp->bounce_sgl_count) {
@@ -2145,16 +2146,14 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
callout_drain(&reqp->callout);
}
#endif
+ cmd = (const struct scsi_generic *)
+ ((ccb->ccb_h.flags & CAM_CDB_POINTER) ?
+ csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes);
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 (srb_status != SRB_STATUS_SUCCESS) {
/*
* If there are errors, for example, invalid LUN,
@@ -2252,11 +2251,23 @@ storvsc_io_done(struct hv_storvsc_request *reqp)
}
}
} else {
- mtx_lock(&sc->hs_lock);
- xpt_print(ccb->ccb_h.path,
- "storvsc scsi_status = %d\n",
- vm_srb->scsi_status);
- mtx_unlock(&sc->hs_lock);
+ /**
+ * On Some Windows hosts TEST_UNIT_READY command can return
+ * SRB_STATUS_ERROR and sense data, for example, asc=0x3a,1
+ * "(Medium not present - tray closed)". This error can be
+ * ignored since it will be sent to host periodically.
+ */
+ boolean_t unit_not_ready = \
+ vm_srb->scsi_status == SCSI_STATUS_CHECK_COND &&
+ cmd->opcode == TEST_UNIT_READY &&
+ srb_status == SRB_STATUS_ERROR;
+ if (!unit_not_ready && bootverbose) {
+ mtx_lock(&sc->hs_lock);
+ xpt_print(ccb->ccb_h.path,
+ "storvsc scsi_status = %d, srb_status = %d\n",
+ vm_srb->scsi_status, srb_status);
+ mtx_unlock(&sc->hs_lock);
+ }
ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR;
}
OpenPOWER on IntegriCloud