Re: [PATCH] hinic: fix potential resource leak

2020-09-16 Thread luobin (L)
On 2020/9/17 11:03, Wei Li wrote:
> + err = irq_set_affinity_hint(rq->irq, >affinity_mask);
> + if (err)
> + goto err_irq;
> +
> + return 0;
> +
> +err_irq:
> + rx_del_napi(rxq);
> + return err;
If irq_set_affinity_hint fails, irq should be freed as well.


Re: [PATCH] hinic: fix potential resource leak

2020-09-16 Thread liwei (GF)
Hi luobin,

On 2020/9/17 11:44, luobin (L) wrote:
> On 2020/9/17 11:03, Wei Li wrote:
>> +err = irq_set_affinity_hint(rq->irq, >affinity_mask);
>> +if (err)
>> +goto err_irq;
>> +
>> +return 0;
>> +
>> +err_irq:
>> +rx_del_napi(rxq);
>> +return err;
> If irq_set_affinity_hint fails, irq should be freed as well.
> 
Yes, indeed.
I will fix that in the next spin.

Thanks,
Wei


[PATCH] hinic: fix potential resource leak

2020-09-16 Thread Wei Li
In rx_request_irq(), it will just return what irq_set_affinity_hint()
returns. If it is failed, the napi added is not deleted properly.
Add a common exit for failures to do this.

Signed-off-by: Wei Li 
---
 drivers/net/ethernet/huawei/hinic/hinic_rx.c | 19 ---
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_rx.c 
b/drivers/net/ethernet/huawei/hinic/hinic_rx.c
index 5bee951fe9d4..63da9cc8ca51 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_rx.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_rx.c
@@ -543,18 +543,23 @@ static int rx_request_irq(struct hinic_rxq *rxq)
if (err) {
netif_err(nic_dev, drv, rxq->netdev,
  "Failed to set RX interrupt coalescing attribute\n");
-   rx_del_napi(rxq);
-   return err;
+   goto err_irq;
}
 
err = request_irq(rq->irq, rx_irq, 0, rxq->irq_name, rxq);
-   if (err) {
-   rx_del_napi(rxq);
-   return err;
-   }
+   if (err)
+   goto err_irq;
 
cpumask_set_cpu(qp->q_id % num_online_cpus(), >affinity_mask);
-   return irq_set_affinity_hint(rq->irq, >affinity_mask);
+   err = irq_set_affinity_hint(rq->irq, >affinity_mask);
+   if (err)
+   goto err_irq;
+
+   return 0;
+
+err_irq:
+   rx_del_napi(rxq);
+   return err;
 }
 
 static void rx_free_irq(struct hinic_rxq *rxq)
-- 
2.17.1