Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers: scsi: storvsc: Set srb_flags in all cases

Correctly set SRB flags for all valid I/O directions. Some IHV drivers on the
Windows host require this. The host validates the command and SRB flags
prior to passing the command down to native driver stack.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Cc: <stable@vger.kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>

authored by

K. Y. Srinivasan and committed by
Christoph Hellwig
f885fb73 56b26e69

+5 -7
+5 -7
drivers/scsi/storvsc_drv.c
··· 1601 1601 vm_srb = &cmd_request->vstor_packet.vm_srb; 1602 1602 vm_srb->win8_extension.time_out_value = 60; 1603 1603 1604 + vm_srb->win8_extension.srb_flags |= 1605 + (SRB_FLAGS_QUEUE_ACTION_ENABLE | 1606 + SRB_FLAGS_DISABLE_SYNCH_TRANSFER); 1604 1607 1605 1608 /* Build the SRB */ 1606 1609 switch (scmnd->sc_data_direction) { 1607 1610 case DMA_TO_DEVICE: 1608 1611 vm_srb->data_in = WRITE_TYPE; 1609 1612 vm_srb->win8_extension.srb_flags |= SRB_FLAGS_DATA_OUT; 1610 - vm_srb->win8_extension.srb_flags |= 1611 - (SRB_FLAGS_QUEUE_ACTION_ENABLE | 1612 - SRB_FLAGS_DISABLE_SYNCH_TRANSFER); 1613 1613 break; 1614 1614 case DMA_FROM_DEVICE: 1615 1615 vm_srb->data_in = READ_TYPE; 1616 1616 vm_srb->win8_extension.srb_flags |= SRB_FLAGS_DATA_IN; 1617 - vm_srb->win8_extension.srb_flags |= 1618 - (SRB_FLAGS_QUEUE_ACTION_ENABLE | 1619 - SRB_FLAGS_DISABLE_SYNCH_TRANSFER); 1620 1617 break; 1621 1618 default: 1622 1619 vm_srb->data_in = UNKNOWN_TYPE; 1623 - vm_srb->win8_extension.srb_flags = 0; 1620 + vm_srb->win8_extension.srb_flags |= (SRB_FLAGS_DATA_IN | 1621 + SRB_FLAGS_DATA_OUT); 1624 1622 break; 1625 1623 } 1626 1624