]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
240cd0c60adf4d619ed44a819a9656a542ae2ede
[thirdparty/kernel/stable-queue.git] /
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
5
6 From: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
7
8
9 [ Upstream commit 1d6dbd1752fb4347a4a5db06c8f5cd35dd1919f4 ]
10
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
13 capable.
14
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>
22 ---
23 drivers/scsi/megaraid/megaraid_sas_fusion.c | 15 ++++++++++-----
24 1 file changed, 10 insertions(+), 5 deletions(-)
25
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
29 */
30 static void
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,
34 + bool fp_possible)
35 {
36 u32 device_id;
37 struct MPI2_RAID_SCSI_IO_REQUEST *io_request;
38 @@ -2064,6 +2065,8 @@ megasas_build_io_fusion(struct megasas_i
39 u16 sge_count;
40 u8 cmd_type;
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;
44
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);
49 break;
50 case READ_WRITE_SYSPDIO:
51 + megasas_build_syspd_fusion(instance, scp, cmd, true);
52 + break;
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);
60 else
61 - megasas_build_syspd_fusion(instance, scp, cmd, 1);
62 + megasas_build_syspd_fusion(instance, scp, cmd, true);
63 break;
64 default:
65 break;