File tree Expand file tree Collapse file tree 1 file changed +5
-1
lines changed Expand file tree Collapse file tree 1 file changed +5
-1
lines changed Original file line number Diff line number Diff line change @@ -648,8 +648,10 @@ void smc_wr_free_link(struct smc_link *lnk)
648
648
smc_wr_tx_wait_no_pending_sends (lnk );
649
649
percpu_ref_kill (& lnk -> wr_reg_refs );
650
650
wait_for_completion (& lnk -> reg_ref_comp );
651
+ percpu_ref_exit (& lnk -> wr_reg_refs );
651
652
percpu_ref_kill (& lnk -> wr_tx_refs );
652
653
wait_for_completion (& lnk -> tx_ref_comp );
654
+ percpu_ref_exit (& lnk -> wr_tx_refs );
653
655
654
656
if (lnk -> wr_rx_dma_addr ) {
655
657
ib_dma_unmap_single (ibdev , lnk -> wr_rx_dma_addr ,
@@ -912,11 +914,13 @@ int smc_wr_create_link(struct smc_link *lnk)
912
914
init_waitqueue_head (& lnk -> wr_reg_wait );
913
915
rc = percpu_ref_init (& lnk -> wr_reg_refs , smcr_wr_reg_refs_free , 0 , GFP_KERNEL );
914
916
if (rc )
915
- goto dma_unmap ;
917
+ goto cancel_ref ;
916
918
init_completion (& lnk -> reg_ref_comp );
917
919
init_waitqueue_head (& lnk -> wr_rx_empty_wait );
918
920
return rc ;
919
921
922
+ cancel_ref :
923
+ percpu_ref_exit (& lnk -> wr_tx_refs );
920
924
dma_unmap :
921
925
if (lnk -> wr_rx_v2_dma_addr ) {
922
926
ib_dma_unmap_single (ibdev , lnk -> wr_rx_v2_dma_addr ,
You can’t perform that action at this time.
0 commit comments