Re: [PATCH v4 22/31] scsi: pm8001: Fix tag leaks on error

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

 



On 2/18/22 02:41, John Garry wrote:
> On 17/02/2022 13:29, Damien Le Moal wrote:
>> In pm8001_chip_set_dev_state_req(), pm8001_chip_fw_flash_update_req()
>> and pm8001_chip_reg_dev_req() add missing calls to pm8001_tag_free() to
>> free the allocated tag when pm8001_mpi_build_cmd() fails.
>>
>> Similarly, in pm8001_exec_internal_task_abort(), if the chip
>> ->task_abort method fails, the tag allocated for the abort request task
>> must be freed. Add the missing call to pm8001_tag_free(). Also remove
>> the useless ex_err label and use "break" instead of "goto" statements
>> in the retry loop.
>>
>> Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx>
> 
> This looks ok, but I think pm80xx_chip_phy_ctl_req() might be missed.
> 
> Apart from that and a nit, below:

[...]

>> diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
>> index d0f5feb4f2d3..0440777a9135 100644
>> --- a/drivers/scsi/pm8001/pm8001_sas.c
>> +++ b/drivers/scsi/pm8001/pm8001_sas.c
>> @@ -834,7 +834,8 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
>>   
>>   		res = pm8001_tag_alloc(pm8001_ha, &ccb_tag);
>>   		if (res)
>> -			goto ex_err;
>> +			break;
>> +
>>   		ccb = &pm8001_ha->ccb_info[ccb_tag];
>>   		ccb->device = pm8001_dev;
>>   		ccb->ccb_tag = ccb_tag;
>> @@ -843,36 +844,38 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
>>   
>>   		res = PM8001_CHIP_DISP->task_abort(pm8001_ha,
>>   			pm8001_dev, flag, task_tag, ccb_tag);
>> -
>>   		if (res) {
>>   			del_timer(&task->slow_task->timer);
>> -			pm8001_dbg(pm8001_ha, FAIL, "Executing internal task failed\n");
>> -			goto ex_err;
>> +			pm8001_dbg(pm8001_ha, FAIL,
>> +				   "Executing internal task failed\n");
>> +			pm8001_tag_free(pm8001_ha, ccb_tag);
>> +			break;
>>   		}
>> +
>>   		wait_for_completion(&task->slow_task->completion);
>>   		res = TMF_RESP_FUNC_FAILED;
>> +
>>   		/* Even TMF timed out, return direct. */
>>   		if (task->task_state_flags & SAS_TASK_STATE_ABORTED) {
>>   			pm8001_dbg(pm8001_ha, FAIL, "TMF task timeout.\n");
>> -			goto ex_err;
>> +			break;
>>   		}
> 
> nit: these are really separate changes, but this series is so long 
> already :)

As it is better to have fixes and cleanups separated, I moved these
style changes to another patch and squashed the
pm80xx_chip_phy_ctl_req() tag leak patch into this one. So patch count
remains the same.

Sending v5. All but 2 patches are reviewed now.

Thanks !

-- 
Damien Le Moal
Western Digital Research



[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