aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorK. Y. Srinivasan <kys@microsoft.com>2014-07-12 12:48:28 -0400
committerChristoph Hellwig <hch@lst.de>2014-07-25 17:17:03 -0400
commit8caf92d80526f3d7cc96831ec18b384ebcaccdf0 (patch)
tree2332442b14834685b3a356e5e2024a13f214d4a5
parent52f9614dd8294e95d2c0929c2d4f64b077ae486f (diff)
Drivers: scsi: storvsc: Filter commands based on the storage protocol version
Going forward it is possible that some of the commands that are not currently implemented will be implemented on future Windows hosts. Even if they are not implemented, we are told the host will corrrectly handle unsupported commands (by returning appropriate return code and sense information). Make command filtering depend on the host version. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Cc: <stable@vger.kernel.org> Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r--drivers/scsi/storvsc_drv.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index cebcef7c69ac..8f8847ef1108 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1553,9 +1553,19 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
1553 struct vmscsi_request *vm_srb; 1553 struct vmscsi_request *vm_srb;
1554 struct stor_mem_pools *memp = scmnd->device->hostdata; 1554 struct stor_mem_pools *memp = scmnd->device->hostdata;
1555 1555
1556 if (!storvsc_scsi_cmd_ok(scmnd)) { 1556 if (vmstor_current_major <= VMSTOR_WIN8_MAJOR) {
1557 scmnd->scsi_done(scmnd); 1557 /*
1558 return 0; 1558 * On legacy hosts filter unimplemented commands.
1559 * Future hosts are expected to correctly handle
1560 * unsupported commands. Furthermore, it is
1561 * possible that some of the currently
1562 * unsupported commands maybe supported in
1563 * future versions of the host.
1564 */
1565 if (!storvsc_scsi_cmd_ok(scmnd)) {
1566 scmnd->scsi_done(scmnd);
1567 return 0;
1568 }
1559 } 1569 }
1560 1570
1561 request_size = sizeof(struct storvsc_cmd_request); 1571 request_size = sizeof(struct storvsc_cmd_request);