diff options
author | K. Y. Srinivasan <kys@microsoft.com> | 2014-07-12 12:48:29 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2014-07-25 17:17:03 -0400 |
commit | adb6f9e1a8c6af1037232b59edb11277471537ea (patch) | |
tree | 45fe417ada211b198c71623b4608c47c96888f0b | |
parent | 8caf92d80526f3d7cc96831ec18b384ebcaccdf0 (diff) |
Drivers: scsi: storvsc: Fix a bug in handling VMBUS protocol version
Based on the negotiated VMBUS protocol version, we adjust the size of the storage
protocol messages. The two sizes we currently handle are pre-win8 and post-win8.
In WS2012 R2, we are negotiating higher VMBUS protocol version than the win8
version. Make adjustments to correctly handle this.
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.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index 8f8847ef1108..7e8a64251681 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c | |||
@@ -1752,19 +1752,22 @@ static int storvsc_probe(struct hv_device *device, | |||
1752 | * set state to properly communicate with the host. | 1752 | * set state to properly communicate with the host. |
1753 | */ | 1753 | */ |
1754 | 1754 | ||
1755 | if (vmbus_proto_version == VERSION_WIN8) { | 1755 | switch (vmbus_proto_version) { |
1756 | sense_buffer_size = POST_WIN7_STORVSC_SENSE_BUFFER_SIZE; | 1756 | case VERSION_WS2008: |
1757 | vmscsi_size_delta = 0; | 1757 | case VERSION_WIN7: |
1758 | vmstor_current_major = VMSTOR_WIN8_MAJOR; | ||
1759 | vmstor_current_minor = VMSTOR_WIN8_MINOR; | ||
1760 | } else { | ||
1761 | sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE; | 1758 | sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE; |
1762 | vmscsi_size_delta = sizeof(struct vmscsi_win8_extension); | 1759 | vmscsi_size_delta = sizeof(struct vmscsi_win8_extension); |
1763 | vmstor_current_major = VMSTOR_WIN7_MAJOR; | 1760 | vmstor_current_major = VMSTOR_WIN7_MAJOR; |
1764 | vmstor_current_minor = VMSTOR_WIN7_MINOR; | 1761 | vmstor_current_minor = VMSTOR_WIN7_MINOR; |
1762 | break; | ||
1763 | default: | ||
1764 | sense_buffer_size = POST_WIN7_STORVSC_SENSE_BUFFER_SIZE; | ||
1765 | vmscsi_size_delta = 0; | ||
1766 | vmstor_current_major = VMSTOR_WIN8_MAJOR; | ||
1767 | vmstor_current_minor = VMSTOR_WIN8_MINOR; | ||
1768 | break; | ||
1765 | } | 1769 | } |
1766 | 1770 | ||
1767 | |||
1768 | if (dev_id->driver_data == SFC_GUID) | 1771 | if (dev_id->driver_data == SFC_GUID) |
1769 | scsi_driver.can_queue = (STORVSC_MAX_IO_REQUESTS * | 1772 | scsi_driver.can_queue = (STORVSC_MAX_IO_REQUESTS * |
1770 | STORVSC_FC_MAX_TARGETS); | 1773 | STORVSC_FC_MAX_TARGETS); |