Re: [PATCH 4/8] pm80xx: fix missing tag_free in NVMD DATA req

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 30, 2020 at 5:47 AM Viswas G <Viswas.G@xxxxxxxxxxxxxxxxx> wrote:
>
> From: akshatzen <akshatzen@xxxxxxxxxx>
>
> Tag is not free'd in NVMD get/set data request failure scenario,
> which would have caused tag leak each time the request fails.
>
> Signed-off-by: akshatzen <akshatzen@xxxxxxxxxx>
> Signed-off-by: Viswas G <Viswas.G@xxxxxxxxxxxxx>
> Signed-off-by: Ruksar Devadi <Ruksar.devadi@xxxxxxxxxxxxx>
> Signed-off-by: Radha Ramachandran <radha@xxxxxxxxxx>
Acked-by: Jack Wang <jinpu.wang@xxxxxxxxxxxxxxx>
Thx
> ---
>  drivers/scsi/pm8001/pm8001_hwi.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
> index f147193d67bd..9cd6a654f8b2 100644
> --- a/drivers/scsi/pm8001/pm8001_hwi.c
> +++ b/drivers/scsi/pm8001/pm8001_hwi.c
> @@ -3038,8 +3038,8 @@ void pm8001_mpi_set_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
>         complete(pm8001_ha->nvmd_completion);
>         pm8001_dbg(pm8001_ha, MSG, "Set nvm data complete!\n");
>         if ((dlen_status & NVMD_STAT) != 0) {
> -               pm8001_dbg(pm8001_ha, FAIL, "Set nvm data error!\n");
> -               return;
> +               pm8001_dbg(pm8001_ha, FAIL, "Set nvm data error %x\n",
> +                               dlen_status);
>         }
>         ccb->task = NULL;
>         ccb->ccb_tag = 0xFFFFFFFF;
> @@ -3062,11 +3062,17 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
>
>         pm8001_dbg(pm8001_ha, MSG, "Get nvm data complete!\n");
>         if ((dlen_status & NVMD_STAT) != 0) {
> -               pm8001_dbg(pm8001_ha, FAIL, "Get nvm data error!\n");
> +               pm8001_dbg(pm8001_ha, FAIL, "Get nvm data error %x\n",
> +                               dlen_status);
>                 complete(pm8001_ha->nvmd_completion);
> +               /* We should free tag during failure also, the tag is not being
> +                * free'd by requesting path anywhere.
> +                */
> +               ccb->task = NULL;
> +               ccb->ccb_tag = 0xFFFFFFFF;
> +               pm8001_tag_free(pm8001_ha, tag);
>                 return;
>         }
> -
>         if (ir_tds_bn_dps_das_nvm & IPMode) {
>                 /* indirect mode - IR bit set */
>                 pm8001_dbg(pm8001_ha, MSG, "Get NVMD success, IR=1\n");
> --
> 2.16.3
>



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux