Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adb6f9e1 authored by K. Y. Srinivasan's avatar K. Y. Srinivasan Committed by Christoph Hellwig
Browse files

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: default avatarK. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 8caf92d8
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -1752,19 +1752,22 @@ static int storvsc_probe(struct hv_device *device,
	 * set state to properly communicate with the host.
	 */

	if (vmbus_proto_version == VERSION_WIN8) {
		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;
	} else {
	switch (vmbus_proto_version) {
	case VERSION_WS2008:
	case VERSION_WIN7:
		sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE;
		vmscsi_size_delta = sizeof(struct vmscsi_win8_extension);
		vmstor_current_major = VMSTOR_WIN7_MAJOR;
		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)
		scsi_driver.can_queue = (STORVSC_MAX_IO_REQUESTS *
					 STORVSC_FC_MAX_TARGETS);