scsi: storvsc: use tagged SRB requests if supported by the device
Properly set SRB flags when hosting device supports tagged queuing. This patch improves the performance on Fiber Channel disks. Signed-off-by: Long Li <longli@microsoft.com> Reviewed-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Cc: <stable@vger.kernel.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d86adf482b
commit
3cd6d3d9b1
|
@ -136,6 +136,8 @@ struct hv_fc_wwn_packet {
|
|||
#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
|
||||
#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
|
||||
|
||||
#define SP_UNTAGGED ((unsigned char) ~0)
|
||||
#define SRB_SIMPLE_TAG_REQUEST 0x20
|
||||
|
||||
/*
|
||||
* Platform neutral description of a scsi request -
|
||||
|
@ -1549,6 +1551,13 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
|
|||
vm_srb->win8_extension.srb_flags |=
|
||||
SRB_FLAGS_DISABLE_SYNCH_TRANSFER;
|
||||
|
||||
if (scmnd->device->tagged_supported) {
|
||||
vm_srb->win8_extension.srb_flags |=
|
||||
(SRB_FLAGS_QUEUE_ACTION_ENABLE | SRB_FLAGS_NO_QUEUE_FREEZE);
|
||||
vm_srb->win8_extension.queue_tag = SP_UNTAGGED;
|
||||
vm_srb->win8_extension.queue_action = SRB_SIMPLE_TAG_REQUEST;
|
||||
}
|
||||
|
||||
/* Build the SRB */
|
||||
switch (scmnd->sc_data_direction) {
|
||||
case DMA_TO_DEVICE:
|
||||
|
|
Loading…
Reference in New Issue