Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Aug 2016 06:33:59 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r303827 - stable/10/sys/dev/hyperv/storvsc
Message-ID:  <201608080633.u786XxlJ027632@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Mon Aug  8 06:33:59 2016
New Revision: 303827
URL: https://svnweb.freebsd.org/changeset/base/303827

Log:
  MFC 303737
  
      hyperv/storvsc: Claim SPC-3 conformance, thus enable UNMAP support
  
      The Hyper-V on pre-win10 systems will only report SPC-2 conformance,
      but it actually conforms to SPC-3.  The INQUIRY response is adjusted
      to propagate the SPC-3 version information to CAM.
  
      Submitted by:   Hongjiang Zhang <honzhan microsoft com>
      Sponsored by:   Microsoft
      Differential Revision:  https://reviews.freebsd.org/D7405

Modified:
  stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
==============================================================================
--- stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c	Mon Aug  8 06:33:57 2016	(r303826)
+++ stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c	Mon Aug  8 06:33:59 2016	(r303827)
@@ -2062,8 +2062,8 @@ storvsc_io_done(struct hv_storvsc_reques
 		     * For more information about INQUIRY, please refer to:
 		     *  ftp://ftp.avc-pioneer.com/Mtfuji_7/Proposal/Jun09/INQUIRY.pdf
 		     */
-		    const struct scsi_inquiry_data *inq_data =
-			(const struct scsi_inquiry_data *)csio->data_ptr;
+		    struct scsi_inquiry_data *inq_data =
+			(struct scsi_inquiry_data *)csio->data_ptr;
 		    uint8_t* resp_buf = (uint8_t*)csio->data_ptr;
 		    /* Get the buffer length reported by host */
 		    int resp_xfer_len = vm_srb->transfer_len;
@@ -2092,6 +2092,25 @@ storvsc_io_done(struct hv_storvsc_reques
 				mtx_unlock(&sc->hs_lock);
 			}
 		    } else {
+			char vendor[16];
+			cam_strvis(vendor, inq_data->vendor, sizeof(inq_data->vendor),
+				sizeof(vendor));
+			/**
+			 * XXX: upgrade SPC2 to SPC3 if host is WIN8 or WIN2012 R2
+			 * in order to support UNMAP feature
+			 */
+			if (!strncmp(vendor,"Msft",4) &&
+			     SID_ANSI_REV(inq_data) == SCSI_REV_SPC2 &&
+			     (vmstor_proto_version == VMSTOR_PROTOCOL_VERSION_WIN8_1 ||
+				vmstor_proto_version== VMSTOR_PROTOCOL_VERSION_WIN8)) {
+				inq_data->version = SCSI_REV_SPC3;
+				if (bootverbose) {
+					mtx_lock(&sc->hs_lock);
+					xpt_print(ccb->ccb_h.path,
+						"storvsc upgrades SPC2 to SPC3\n");
+					mtx_unlock(&sc->hs_lock);
+				}
+			}
 			ccb->ccb_h.status |= CAM_REQ_CMP;
 			if (bootverbose) {
 				mtx_lock(&sc->hs_lock);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608080633.u786XxlJ027632>