Commit 29fd0463 authored by K. Y. Srinivasan's avatar K. Y. Srinivasan Committed by Greg Kroah-Hartman

Drivers: scsi: storvsc: Fix a bug in handling VMBUS protocol version

commit adb6f9e1 upstream.

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: default avatarK. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b32d9f60
...@@ -1764,19 +1764,22 @@ static int storvsc_probe(struct hv_device *device, ...@@ -1764,19 +1764,22 @@ static int storvsc_probe(struct hv_device *device,
* set state to properly communicate with the host. * set state to properly communicate with the host.
*/ */
if (vmbus_proto_version == VERSION_WIN8) { switch (vmbus_proto_version) {
sense_buffer_size = POST_WIN7_STORVSC_SENSE_BUFFER_SIZE; case VERSION_WS2008:
vmscsi_size_delta = 0; case VERSION_WIN7:
vmstor_current_major = VMSTOR_WIN8_MAJOR;
vmstor_current_minor = VMSTOR_WIN8_MINOR;
} else {
sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE; sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE;
vmscsi_size_delta = sizeof(struct vmscsi_win8_extension); vmscsi_size_delta = sizeof(struct vmscsi_win8_extension);
vmstor_current_major = VMSTOR_WIN7_MAJOR; vmstor_current_major = VMSTOR_WIN7_MAJOR;
vmstor_current_minor = VMSTOR_WIN7_MINOR; vmstor_current_minor = VMSTOR_WIN7_MINOR;
break;
default:
sense_buffer_size = POST_WIN7_STORVSC_SENSE_BUFFER_SIZE;
vmscsi_size_delta = 0;
vmstor_current_major = VMSTOR_WIN8_MAJOR;
vmstor_current_minor = VMSTOR_WIN8_MINOR;
break;
} }
if (dev_id->driver_data == SFC_GUID) if (dev_id->driver_data == SFC_GUID)
scsi_driver.can_queue = (STORVSC_MAX_IO_REQUESTS * scsi_driver.can_queue = (STORVSC_MAX_IO_REQUESTS *
STORVSC_FC_MAX_TARGETS); STORVSC_FC_MAX_TARGETS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment