Author: sephe
Date: Thu Aug  4 05:05:35 2016
New Revision: 303737
URL: https://svnweb.freebsd.org/changeset/base/303737

Log:
  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>
  MFC after:    3 days
  Sponsored by: Microsoft
  Differential Revision:        https://reviews.freebsd.org/D7405

Modified:
  head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c

Modified: head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c        Thu Aug  4 
01:49:18 2016        (r303736)
+++ head/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c        Thu Aug  4 
05:05:35 2016        (r303737)
@@ -2124,8 +2124,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;
@@ -2154,6 +2154,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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to