On 02/06/2017 10:59 AM, Shivasharan S wrote:
> If MR_TargetIdToLdGet return >= 0xFF, it is invalid entry.
> Consider that entry as invalid and do not access raid map for further 
> operation.
> 
> Signed-off-by: Shivasharan S <[email protected]>
> Signed-off-by: Kashyap Desai <[email protected]>
> ---
>  drivers/scsi/megaraid/megaraid_sas.h        |  2 +-
>  drivers/scsi/megaraid/megaraid_sas_fp.c     |  5 +++--
>  drivers/scsi/megaraid/megaraid_sas_fusion.c | 25 ++++++++++++++-----------
>  3 files changed, 18 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/scsi/megaraid/megaraid_sas.h 
> b/drivers/scsi/megaraid/megaraid_sas.h
> index f023e23..ec5f003 100644
> --- a/drivers/scsi/megaraid/megaraid_sas.h
> +++ b/drivers/scsi/megaraid/megaraid_sas.h
> @@ -2448,7 +2448,7 @@ MR_BuildRaidContext(struct megasas_instance *instance,
>                   struct IO_REQUEST_INFO *io_info,
>                   struct RAID_CONTEXT *pRAID_Context,
>                   struct MR_DRV_RAID_MAP_ALL *map, u8 **raidLUN);
> -u8 MR_TargetIdToLdGet(u32 ldTgtId, struct MR_DRV_RAID_MAP_ALL *map);
> +u16 MR_TargetIdToLdGet(u32 ldTgtId, struct MR_DRV_RAID_MAP_ALL *map);
>  struct MR_LD_RAID *MR_LdRaidGet(u32 ld, struct MR_DRV_RAID_MAP_ALL *map);
>  u16 MR_ArPdGet(u32 ar, u32 arm, struct MR_DRV_RAID_MAP_ALL *map);
>  u16 MR_LdSpanArrayGet(u32 ld, u32 span, struct MR_DRV_RAID_MAP_ALL *map);
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c 
> b/drivers/scsi/megaraid/megaraid_sas_fp.c
> index a0b0e68..9d5d485 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fp.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_fp.c
> @@ -165,7 +165,7 @@ u16 MR_GetLDTgtId(u32 ld, struct MR_DRV_RAID_MAP_ALL *map)
>       return le16_to_cpu(map->raidMap.ldSpanMap[ld].ldRaid.targetId);
>  }
>  
> -u8 MR_TargetIdToLdGet(u32 ldTgtId, struct MR_DRV_RAID_MAP_ALL *map)
> +u16 MR_TargetIdToLdGet(u32 ldTgtId, struct MR_DRV_RAID_MAP_ALL *map)
>  {
>       return map->raidMap.ldTgtIdToLd[ldTgtId];
>  }
> @@ -1151,7 +1151,7 @@ MR_BuildRaidContext(struct megasas_instance *instance,
>  {
>       struct fusion_context *fusion;
>       struct MR_LD_RAID  *raid;
> -     u32         ld, stripSize, stripe_mask;
> +     u32         stripSize, stripe_mask;
>       u64         endLba, endStrip, endRow, start_row, start_strip;
>       u64         regStart;
>       u32         regSize;
> @@ -1163,6 +1163,7 @@ MR_BuildRaidContext(struct megasas_instance *instance,
>       u8          retval = 0;
>       u8          startlba_span = SPAN_INVALID;
>       u64 *pdBlock = &io_info->pdBlock;
> +     u16         ld;
>  
>       ldStartBlock = io_info->ldStartBlock;
>       numBlocks = io_info->numBlocks;
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c 
> b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> index 2f523f2..3d4d4b8 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> @@ -1120,7 +1120,8 @@ megasas_sync_map_info(struct megasas_instance *instance)
>       int i;
>       struct megasas_cmd *cmd;
>       struct megasas_dcmd_frame *dcmd;
> -     u32 size_sync_info, num_lds;
> +     u16 num_lds;
> +     u32 size_sync_info;
>       struct fusion_context *fusion;
>       struct MR_LD_TARGET_SYNC *ci = NULL;
>       struct MR_DRV_RAID_MAP_ALL *map;
> @@ -1867,7 +1868,7 @@ megasas_set_pd_lba(struct MPI2_RAID_SCSI_IO_REQUEST 
> *io_request, u8 cdb_len,
>                  struct MR_DRV_RAID_MAP_ALL *local_map_ptr, u32 ref_tag)
>  {
>       struct MR_LD_RAID *raid;
> -     u32 ld;
> +     u16 ld;
>       u64 start_blk = io_info->pdBlock;
>       u8 *cdb = io_request->CDB.CDB32;
>       u32 num_blocks = io_info->numBlocks;
> @@ -2300,10 +2301,11 @@ megasas_build_ldio_fusion(struct megasas_instance 
> *instance,
>  
>       local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)];
>       ld = MR_TargetIdToLdGet(device_id, local_map_ptr);
> -     raid = MR_LdRaidGet(ld, local_map_ptr);
>  
> -     if ((MR_TargetIdToLdGet(device_id, local_map_ptr) >=
> -             instance->fw_supported_vd_count) || (!fusion->fast_path_io)) {
> +     if (ld < instance->fw_supported_vd_count)
> +             raid = MR_LdRaidGet(ld, local_map_ptr);
> +
> +     if (!raid || (!fusion->fast_path_io)) {
>               io_request->RaidContext.raid_context.reg_lock_flags  = 0;
>               fp_possible = false;
>       } else {
> @@ -2475,12 +2477,12 @@ static void megasas_build_ld_nonrw_fusion(struct 
> megasas_instance *instance,
>  {
>       u32 device_id;
>       struct MPI2_RAID_SCSI_IO_REQUEST *io_request;
> -     u16 pd_index = 0;
> +     u16 pd_index = 0, ld;
>       struct MR_DRV_RAID_MAP_ALL *local_map_ptr;
>       struct fusion_context *fusion = instance->ctrl_context;
>       u8                          span, physArm;
>       __le16                      devHandle;
> -     u32                         ld, arRef, pd;
> +     u32                         arRef, pd;
>       struct MR_LD_RAID                  *raid;
>       struct RAID_CONTEXT                *pRAID_Context;
>       u8 fp_possible = 1;
> @@ -2503,10 +2505,11 @@ static void megasas_build_ld_nonrw_fusion(struct 
> megasas_instance *instance,
>               ld = MR_TargetIdToLdGet(device_id, local_map_ptr);
>               if (ld >= instance->fw_supported_vd_count)
>                       fp_possible = 0;
> -
> -             raid = MR_LdRaidGet(ld, local_map_ptr);
> -             if (!(raid->capability.fpNonRWCapable))
> -                     fp_possible = 0;
> +             else {
> +                     raid = MR_LdRaidGet(ld, local_map_ptr);
> +                     if (!(raid->capability.fpNonRWCapable))
> +                             fp_possible = 0;
> +             }
>       } else
>               fp_possible = 0;
>  
> 
I must be missing something obvious.
Where do you actually _check_ for 0xFF in the patches?
The descriptions doesn't really match the patch itself AFAICS...

Cheers,

Hannes
-- 
Dr. Hannes Reinecke                            zSeries & Storage
[email protected]                                  +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

Reply via email to