Staging: hv: storvsc: Fixup srb and scsi status for INQUIRY and MODE_SENSE
authorK. Y. Srinivasan <kys@microsoft.com>
Sat, 27 Aug 2011 18:31:26 +0000 (11:31 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 29 Aug 2011 18:01:08 +0000 (11:01 -0700)
The current VHD handler on the Windows Host does not correctly handle
INQUIRY and MODE_SENSE commands with some options. Fixup srb_status
in these cases since the failure is not fatal.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/storvsc_drv.c

index 0bb4e0e489836c47f8941f12afbc15ecf1d86341..72ca25c4b8e2d8f375376afbc65907e48975c4d1 100644 (file)
@@ -512,6 +512,23 @@ static void storvsc_on_io_completion(struct hv_device *device,
 
        stor_pkt = &request->vstor_packet;
 
+       /*
+        * The current SCSI handling on the host side does
+        * not correctly handle:
+        * INQUIRY command with page code parameter set to 0x80
+        * MODE_SENSE command with cmd[2] == 0x1c
+        *
+        * Setup srb and scsi status so this won't be fatal.
+        * We do this so we can distinguish truly fatal failues
+        * (srb status == 0x4) and off-line the device in that case.
+        */
+
+       if ((stor_pkt->vm_srb.cdb[0] == INQUIRY) ||
+               (stor_pkt->vm_srb.cdb[0] == MODE_SENSE)) {
+               vstor_packet->vm_srb.scsi_status = 0;
+               vstor_packet->vm_srb.srb_status = 0x1;
+       }
+
 
        /* Copy over the status...etc */
        stor_pkt->vm_srb.scsi_status = vstor_packet->vm_srb.scsi_status;