* [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
@ 2014-07-10 6:33 ` K. Y. Srinivasan
2014-07-10 10:24 ` Christoph Hellwig
2014-07-10 6:33 ` [PATCH V2 3/8] Drivers: scsi: storvsc: Filter commands based on the storage protocol version K. Y. Srinivasan
` (5 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:33 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
Set cmd_per_lun to reflect value supported by the Host.
In this version of the patch I have addressed comments from
Christoph Hellwig <hch@infradead.org>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
drivers/scsi/storvsc_drv.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 8938b13..cebcef7 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1690,7 +1690,7 @@ static struct scsi_host_template scsi_driver = {
.slave_alloc = storvsc_device_alloc,
.slave_destroy = storvsc_device_destroy,
.slave_configure = storvsc_device_configure,
- .cmd_per_lun = 1,
+ .cmd_per_lun = 255,
.can_queue = STORVSC_MAX_IO_REQUESTS*STORVSC_MAX_TARGETS,
.this_id = -1,
/* no use setting to 0 since ll_blk_rw reset it to 1 */
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host
2014-07-10 6:33 ` [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host K. Y. Srinivasan
@ 2014-07-10 10:24 ` Christoph Hellwig
2014-07-10 22:08 ` KY Srinivasan
0 siblings, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2014-07-10 10:24 UTC (permalink / raw)
To: K. Y. Srinivasan
Cc: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi, stable
> - .cmd_per_lun = 1,
> + .cmd_per_lun = 255,
> .can_queue = STORVSC_MAX_IO_REQUESTS*STORVSC_MAX_TARGETS,
slave_configure immediately adjusts this down to STORVSC_MAX_IO_REQUESTS
(250), any reson to start out with the magic 255 here?
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host
2014-07-10 10:24 ` Christoph Hellwig
@ 2014-07-10 22:08 ` KY Srinivasan
0 siblings, 0 replies; 10+ messages in thread
From: KY Srinivasan @ 2014-07-10 22:08 UTC (permalink / raw)
To: Christoph Hellwig
Cc: linux-kernel@vger.kernel.org, devel@linuxdriverproject.org,
ohering@suse.com, jbottomley@parallels.com, jasowang@redhat.com,
apw@canonical.com, linux-scsi@vger.kernel.org,
stable@vger.kernel.org
> -----Original Message-----
> From: Christoph Hellwig [mailto:hch@infradead.org]
> Sent: Thursday, July 10, 2014 3:25 AM
> To: KY Srinivasan
> Cc: linux-kernel@vger.kernel.org; devel@linuxdriverproject.org;
> ohering@suse.com; jbottomley@parallels.com; hch@infradead.org;
> jasowang@redhat.com; apw@canonical.com; linux-scsi@vger.kernel.org;
> stable@vger.kernel.org
> Subject: Re: [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect
> value supported by the Host
>
> > - .cmd_per_lun = 1,
> > + .cmd_per_lun = 255,
> > .can_queue =
> STORVSC_MAX_IO_REQUESTS*STORVSC_MAX_TARGETS,
>
> slave_configure immediately adjusts this down to
> STORVSC_MAX_IO_REQUESTS (250), any reson to start out with the magic
> 255 here?
The number 255 (set for cmd_per_lun) is what the host can support (I recently discovered this in an MSDN document). STORVSC_MAX_IO_REQUESTS is an implementation limitation in this driver.
Regards,
K. Y
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH V2 3/8] Drivers: scsi: storvsc: Filter commands based on the storage protocol version
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host K. Y. Srinivasan
@ 2014-07-10 6:33 ` K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 4/8] Drivers: scsi: storvsc: Fix a bug in handling VMBUS " K. Y. Srinivasan
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:33 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
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.
In this version of the patch I have addressed comments from
Christoph Hellwig <hch@infradead.org>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
drivers/scsi/storvsc_drv.c | 16 +++++++++++++---
1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index cebcef7..8f8847e 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)
struct vmscsi_request *vm_srb;
struct stor_mem_pools *memp = scmnd->device->hostdata;
- if (!storvsc_scsi_cmd_ok(scmnd)) {
- scmnd->scsi_done(scmnd);
- return 0;
+ if (vmstor_current_major <= VMSTOR_WIN8_MAJOR) {
+ /*
+ * On legacy hosts filter unimplemented commands.
+ * Future hosts are expected to correctly handle
+ * unsupported commands. Furthermore, it is
+ * possible that some of the currently
+ * unsupported commands maybe supported in
+ * future versions of the host.
+ */
+ if (!storvsc_scsi_cmd_ok(scmnd)) {
+ scmnd->scsi_done(scmnd);
+ return 0;
+ }
}
request_size = sizeof(struct storvsc_cmd_request);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH V2 4/8] Drivers: scsi: storvsc: Fix a bug in handling VMBUS protocol version
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 3/8] Drivers: scsi: storvsc: Filter commands based on the storage protocol version K. Y. Srinivasan
@ 2014-07-10 6:33 ` K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 5/8] Drivers: scsi: storvsc: Fix a bug in the handling of SRB status flags K. Y. Srinivasan
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:33 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
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.
In this version of the patch I have addressed comments from
Christoph Hellwig <hch@infradead.org>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
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 8f8847e..7e8a642 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,
* 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);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH V2 5/8] Drivers: scsi: storvsc: Fix a bug in the handling of SRB status flags
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
` (2 preceding siblings ...)
2014-07-10 6:33 ` [PATCH V2 4/8] Drivers: scsi: storvsc: Fix a bug in handling VMBUS " K. Y. Srinivasan
@ 2014-07-10 6:33 ` K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 7/8] drivers: scsi: storvsc: Set srb_flags in all cases K. Y. Srinivasan
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:33 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
SRB status can have additional information. Mask these out before processing SRB status.
In this version of the patch I have addressed comments from
Christoph Hellwig <hch@infradead.org>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
drivers/scsi/storvsc_drv.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 7e8a642..7b99f38 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -299,11 +299,14 @@ enum storvsc_request_type {
*/
#define SRB_STATUS_AUTOSENSE_VALID 0x80
+#define SRB_STATUS_QUEUE_FROZEN 0x40
#define SRB_STATUS_INVALID_LUN 0x20
#define SRB_STATUS_SUCCESS 0x01
#define SRB_STATUS_ABORTED 0x02
#define SRB_STATUS_ERROR 0x04
+#define SRB_STATUS(status) \
+ (status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
/*
* This is the end of Protocol specific defines.
*/
@@ -1004,7 +1007,7 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
void (*process_err_fn)(struct work_struct *work);
bool do_work = false;
- switch (vm_srb->srb_status) {
+ switch (SRB_STATUS(vm_srb->srb_status)) {
case SRB_STATUS_ERROR:
/*
* If there is an error; offline the device since all
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH V2 7/8] drivers: scsi: storvsc: Set srb_flags in all cases
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
` (3 preceding siblings ...)
2014-07-10 6:33 ` [PATCH V2 5/8] Drivers: scsi: storvsc: Fix a bug in the handling of SRB status flags K. Y. Srinivasan
@ 2014-07-10 6:33 ` K. Y. Srinivasan
2014-07-10 6:33 ` [PATCH V2 8/8] drivers: scsi: storvsc: Correctly handle TEST_UNIT_READY failure K. Y. Srinivasan
2014-07-10 6:41 ` [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host K. Y. Srinivasan
6 siblings, 0 replies; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:33 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
Correctly set SRB flags for all valid I/O directions. Some IHV drivers on the
Windows host require this.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
drivers/scsi/storvsc_drv.c | 12 +++++-------
1 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 443a1c2..84b9b39 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1614,26 +1614,24 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
vm_srb = &cmd_request->vstor_packet.vm_srb;
vm_srb->win8_extension.time_out_value = 60;
+ vm_srb->win8_extension.srb_flags |=
+ (SRB_FLAGS_QUEUE_ACTION_ENABLE |
+ SRB_FLAGS_DISABLE_SYNCH_TRANSFER);
/* Build the SRB */
switch (scmnd->sc_data_direction) {
case DMA_TO_DEVICE:
vm_srb->data_in = WRITE_TYPE;
vm_srb->win8_extension.srb_flags |= SRB_FLAGS_DATA_OUT;
- vm_srb->win8_extension.srb_flags |=
- (SRB_FLAGS_QUEUE_ACTION_ENABLE |
- SRB_FLAGS_DISABLE_SYNCH_TRANSFER);
break;
case DMA_FROM_DEVICE:
vm_srb->data_in = READ_TYPE;
vm_srb->win8_extension.srb_flags |= SRB_FLAGS_DATA_IN;
- vm_srb->win8_extension.srb_flags |=
- (SRB_FLAGS_QUEUE_ACTION_ENABLE |
- SRB_FLAGS_DISABLE_SYNCH_TRANSFER);
break;
default:
vm_srb->data_in = UNKNOWN_TYPE;
- vm_srb->win8_extension.srb_flags = 0;
+ vm_srb->win8_extension.srb_flags |= (SRB_FLAGS_DATA_IN |
+ SRB_FLAGS_DATA_OUT);
break;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH V2 8/8] drivers: scsi: storvsc: Correctly handle TEST_UNIT_READY failure
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
` (4 preceding siblings ...)
2014-07-10 6:33 ` [PATCH V2 7/8] drivers: scsi: storvsc: Set srb_flags in all cases K. Y. Srinivasan
@ 2014-07-10 6:33 ` K. Y. Srinivasan
2014-07-10 6:41 ` [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host K. Y. Srinivasan
6 siblings, 0 replies; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:33 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
On some Windows hosts on FC SANs, TEST_UNIT_READY can return SRB_STATUS_ERROR.
Correctly handle this.
In this version of the patch I have addressed comments from
Christoph Hellwig <hch@infradead.org>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
drivers/scsi/storvsc_drv.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 84b9b39..6fed0dd 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1020,6 +1020,13 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
case ATA_12:
set_host_byte(scmnd, DID_PASSTHROUGH);
break;
+ /*
+ * On Some Windows hosts TEST_UNIT_READY command can return
+ * SRB_STATUS_ERROR, let the upper level code deal with it
+ * based on the sense information.
+ */
+ case TEST_UNIT_READY:
+ break;
default:
set_host_byte(scmnd, DID_TARGET_FAILURE);
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH V2 2/8] Drivers: scsi: storvsc: Set cmd_per_lun to reflect value supported by the Host
2014-07-10 6:33 ` [PATCH V2 1/8] Drivers: scsi: storvsc: Change the limits to reflect the values on the host K. Y. Srinivasan
` (5 preceding siblings ...)
2014-07-10 6:33 ` [PATCH V2 8/8] drivers: scsi: storvsc: Correctly handle TEST_UNIT_READY failure K. Y. Srinivasan
@ 2014-07-10 6:41 ` K. Y. Srinivasan
6 siblings, 0 replies; 10+ messages in thread
From: K. Y. Srinivasan @ 2014-07-10 6:41 UTC (permalink / raw)
To: linux-kernel, devel, ohering, jbottomley, hch, jasowang, apw,
linux-scsi
Cc: K. Y. Srinivasan, stable
Set cmd_per_lun to reflect value supported by the Host.
In this version of the patch I have addressed comments from
Christoph Hellwig <hch@infradead.org>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Cc: <stable@vger.kernel.org>
---
drivers/scsi/storvsc_drv.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 8938b13..cebcef7 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1690,7 +1690,7 @@ static struct scsi_host_template scsi_driver = {
.slave_alloc = storvsc_device_alloc,
.slave_destroy = storvsc_device_destroy,
.slave_configure = storvsc_device_configure,
- .cmd_per_lun = 1,
+ .cmd_per_lun = 255,
.can_queue = STORVSC_MAX_IO_REQUESTS*STORVSC_MAX_TARGETS,
.this_id = -1,
/* no use setting to 0 since ll_blk_rw reset it to 1 */
--
1.7.4.1
^ permalink raw reply related [flat|nested] 10+ messages in thread