scsi: storvsc: Fix a bug in the handling of SRB status flags

SRB status can have additional information. Mask these out before processing
SRB status.

This patch was sent as part of a collection of patches more than a year ago.
While the rest of the patches in the set were comitted, this patch was not.
I woulod like to thank Olaf for noticing that this patch was not committed
upstream.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Long Li <longli@microsoft.com>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
K. Y. Srinivasan 2015-10-06 18:04:01 -07:00 committed by James Bottomley
parent 81988a0e6b
commit 3209f9d780

View File

@ -349,11 +349,14 @@ enum storvsc_request_type {
*/ */
#define SRB_STATUS_AUTOSENSE_VALID 0x80 #define SRB_STATUS_AUTOSENSE_VALID 0x80
#define SRB_STATUS_QUEUE_FROZEN 0x40
#define SRB_STATUS_INVALID_LUN 0x20 #define SRB_STATUS_INVALID_LUN 0x20
#define SRB_STATUS_SUCCESS 0x01 #define SRB_STATUS_SUCCESS 0x01
#define SRB_STATUS_ABORTED 0x02 #define SRB_STATUS_ABORTED 0x02
#define SRB_STATUS_ERROR 0x04 #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. * This is the end of Protocol specific defines.
*/ */
@ -858,7 +861,7 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
void (*process_err_fn)(struct work_struct *work); void (*process_err_fn)(struct work_struct *work);
bool do_work = false; bool do_work = false;
switch (vm_srb->srb_status) { switch (SRB_STATUS(vm_srb->srb_status)) {
case SRB_STATUS_ERROR: case SRB_STATUS_ERROR:
/* /*
* If there is an error; offline the device since all * If there is an error; offline the device since all