1 From foo@baz Mon Nov 6 10:07:35 CET 2017
2 From: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
3 Date: Sat, 7 Oct 2017 22:36:47 +0000
4 Subject: scsi: megaraid_sas: Do not set fp_possible if TM capable for non-RW syspdIO, change fp_possible to bool
6 From: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
9 [ Upstream commit 1d6dbd1752fb4347a4a5db06c8f5cd35dd1919f4 ]
11 FIX - firmware wants non-RW SYS PD IOs to avoid FastPath for better
12 tracking and other functionalities if the device is task management
15 Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
16 Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
17 Reviewed-by: Hannes Reinecke <hare@suse.com>
18 Reviewed-by: Tomas Henzl <thenzl@redhat.com>
19 Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
20 Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
21 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
23 drivers/scsi/megaraid/megaraid_sas_fusion.c | 15 ++++++++++-----
24 1 file changed, 10 insertions(+), 5 deletions(-)
26 --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
27 +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
28 @@ -1960,7 +1960,8 @@ static void megasas_build_ld_nonrw_fusio
31 megasas_build_syspd_fusion(struct megasas_instance *instance,
32 - struct scsi_cmnd *scmd, struct megasas_cmd_fusion *cmd, u8 fp_possible)
33 + struct scsi_cmnd *scmd, struct megasas_cmd_fusion *cmd,
37 struct MPI2_RAID_SCSI_IO_REQUEST *io_request;
38 @@ -2064,6 +2065,8 @@ megasas_build_io_fusion(struct megasas_i
41 struct MPI2_RAID_SCSI_IO_REQUEST *io_request = cmd->io_request;
42 + struct MR_PRIV_DEVICE *mr_device_priv_data;
43 + mr_device_priv_data = scp->device->hostdata;
45 /* Zero out some fields so they don't get reused */
46 memset(io_request->LUN, 0x0, 8);
47 @@ -2092,12 +2095,14 @@ megasas_build_io_fusion(struct megasas_i
48 megasas_build_ld_nonrw_fusion(instance, scp, cmd);
50 case READ_WRITE_SYSPDIO:
51 + megasas_build_syspd_fusion(instance, scp, cmd, true);
53 case NON_READ_WRITE_SYSPDIO:
54 - if (instance->secure_jbod_support &&
55 - (cmd_type == NON_READ_WRITE_SYSPDIO))
56 - megasas_build_syspd_fusion(instance, scp, cmd, 0);
57 + if (instance->secure_jbod_support ||
58 + mr_device_priv_data->is_tm_capable)
59 + megasas_build_syspd_fusion(instance, scp, cmd, false);
61 - megasas_build_syspd_fusion(instance, scp, cmd, 1);
62 + megasas_build_syspd_fusion(instance, scp, cmd, true);