]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
scsi: megaraid_sas: RAID map is accessed for SYS PDs when use_seqnum_jbod_fp is not set
authorShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Fri, 10 Feb 2017 08:59:06 +0000 (00:59 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 1 Jun 2017 21:06:00 +0000 (14:06 -0700)
Orabug: 26096381

Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit ed981b81fa6cb7ce191756822e3de24e51112cd3)
Signed-off-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
Signed-off-by: Kirtikar Kashyap <kirtikar.kashyap@oracle.com>
Reviewed-by: Dhaval Giani <dhaval.giani@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c

index 27f066959e2cdec0a9d09c5e2803c9706251ea01..3247cef5750ef6c0290778e6a46fb758c912eb43 100644 (file)
@@ -1758,28 +1758,31 @@ void megasas_update_sdev_properties(struct scsi_device *sdev)
        fusion = instance->ctrl_context;
        mr_device_priv_data = sdev->hostdata;
 
-       if (!fusion)
+       if (!fusion || !mr_device_priv_data)
                return;
 
-       if (!MEGASAS_IS_LOGICAL(sdev) &&
-               instance->use_seqnum_jbod_fp) {
-               pd_index = (sdev->channel * MEGASAS_MAX_DEV_PER_CHANNEL) +
-                       sdev->id;
-               pd_sync = (void *)fusion->pd_seq_sync
-                               [(instance->pd_seq_map_id - 1) & 1];
-               mr_device_priv_data->is_tm_capable =
-                       pd_sync->seq[pd_index].capability.tmCapable;
-       } else {
+       if (MEGASAS_IS_LOGICAL(sdev)) {
                device_id = ((sdev->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL)
                                        + sdev->id;
                local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)];
                ld = MR_TargetIdToLdGet(device_id, local_map_ptr);
+               if (ld >= instance->fw_supported_vd_count)
+                       return;
                raid = MR_LdRaidGet(ld, local_map_ptr);
 
                if (raid->capability.ldPiMode == MR_PROT_INFO_TYPE_CONTROLLER)
-               blk_queue_update_dma_alignment(sdev->request_queue, 0x7);
+                       blk_queue_update_dma_alignment(sdev->request_queue,
+                                                      0x7);
+
                mr_device_priv_data->is_tm_capable =
                        raid->capability.tmCapable;
+       } else if (instance->use_seqnum_jbod_fp) {
+               pd_index = (sdev->channel * MEGASAS_MAX_DEV_PER_CHANNEL) +
+                               sdev->id;
+               pd_sync = (void *)fusion->pd_seq_sync
+                               [(instance->pd_seq_map_id - 1) & 1];
+               mr_device_priv_data->is_tm_capable =
+                               pd_sync->seq[pd_index].capability.tmCapable;
        }
 }