scsi: megaraid_sas: Set no_write_same only for Virtual Disk
authorAnand Lodnoor <anand.lodnoor@broadcom.com>
Tue, 14 Jan 2020 11:21:13 +0000 (16:51 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 16 Jan 2020 04:21:02 +0000 (23:21 -0500)
Disable WRITE_SAME (no_write_same) for Virtual Disks only.  For System PDs
and EPDs (Enhanced PDs), WRITE_SAME need not be disabled by default.

Link: https://lore.kernel.org/r/1579000882-20246-3-git-send-email-anand.lodnoor@broadcom.com
Signed-off-by: Anand Lodnoor <anand.lodnoor@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/megaraid/megaraid_sas_fusion.h

index 6a01a605508b36a5ba80111eb8b1cc8f0fb8017c..167a3e5edc4549dbb449d7f9176786bda4368862 100644 (file)
@@ -1887,6 +1887,10 @@ void megasas_set_dynamic_target_properties(struct scsi_device *sdev,
 
                mr_device_priv_data->is_tm_capable =
                        raid->capability.tmCapable;
+
+               if (!raid->flags.isEPD)
+                       sdev->no_write_same = 1;
+
        } else if (instance->use_seqnum_jbod_fp) {
                pd_index = (sdev->channel * MEGASAS_MAX_DEV_PER_CHANNEL) +
                        sdev->id;
@@ -3416,7 +3420,6 @@ static struct scsi_host_template megasas_template = {
        .bios_param = megasas_bios_param,
        .change_queue_depth = scsi_change_queue_depth,
        .max_segment_size = 0xffffffff,
-       .no_write_same = 1,
 };
 
 /**
index c013c80fe4e6d3fa321ea708657794f08025888d..8358b68d6259d00be0706832ee738feb30d860e7 100644 (file)
@@ -864,9 +864,20 @@ struct MR_LD_RAID {
        u8      regTypeReqOnRead;
        __le16     seqNum;
 
-       struct {
-               u32 ldSyncRequired:1;
-               u32 reserved:31;
+struct {
+#ifndef MFI_BIG_ENDIAN
+       u32 ldSyncRequired:1;
+       u32 regTypeReqOnReadIsValid:1;
+       u32 isEPD:1;
+       u32 enableSLDOnAllRWIOs:1;
+       u32 reserved:28;
+#else
+       u32 reserved:28;
+       u32 enableSLDOnAllRWIOs:1;
+       u32 isEPD:1;
+       u32 regTypeReqOnReadIsValid:1;
+       u32 ldSyncRequired:1;
+#endif
        } flags;
 
        u8      LUN[8]; /* 0x24 8 byte LUN field used for SCSI IO's */