Skip to content

Commit 25c12b4

Browse files
Kai Shenkuba-moo
authored andcommitted
net/smc: Fix memory leak when using percpu refs
This patch adds missing percpu_ref_exit when releasing percpu refs. When releasing percpu refs, percpu_ref_exit should be called. Otherwise, memory leak happens. Fixes: 79a2223 ("net/smc: Use percpu ref for wr tx reference") Signed-off-by: Kai Shen <[email protected]> Reviewed-by: Dust Li <[email protected]> Reviewed-by: Wenjia Zhang <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent e3e4e56 commit 25c12b4

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

net/smc/smc_wr.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,8 +648,10 @@ void smc_wr_free_link(struct smc_link *lnk)
648648
smc_wr_tx_wait_no_pending_sends(lnk);
649649
percpu_ref_kill(&lnk->wr_reg_refs);
650650
wait_for_completion(&lnk->reg_ref_comp);
651+
percpu_ref_exit(&lnk->wr_reg_refs);
651652
percpu_ref_kill(&lnk->wr_tx_refs);
652653
wait_for_completion(&lnk->tx_ref_comp);
654+
percpu_ref_exit(&lnk->wr_tx_refs);
653655

654656
if (lnk->wr_rx_dma_addr) {
655657
ib_dma_unmap_single(ibdev, lnk->wr_rx_dma_addr,
@@ -912,11 +914,13 @@ int smc_wr_create_link(struct smc_link *lnk)
912914
init_waitqueue_head(&lnk->wr_reg_wait);
913915
rc = percpu_ref_init(&lnk->wr_reg_refs, smcr_wr_reg_refs_free, 0, GFP_KERNEL);
914916
if (rc)
915-
goto dma_unmap;
917+
goto cancel_ref;
916918
init_completion(&lnk->reg_ref_comp);
917919
init_waitqueue_head(&lnk->wr_rx_empty_wait);
918920
return rc;
919921

922+
cancel_ref:
923+
percpu_ref_exit(&lnk->wr_tx_refs);
920924
dma_unmap:
921925
if (lnk->wr_rx_v2_dma_addr) {
922926
ib_dma_unmap_single(ibdev, lnk->wr_rx_v2_dma_addr,

0 commit comments

Comments
 (0)