On 11/01/2022 16:49, Wen Gu wrote: > Thanks for your review. > > On 2022/1/11 4:40 pm, Karsten Graul wrote: >> On 10/01/2022 10:26, Wen Gu wrote: >>> @@ -1226,15 +1245,23 @@ void smcr_link_clear(struct smc_link *lnk, bool log) >>> smc_wr_free_link(lnk); >>> smc_ib_destroy_queue_pair(lnk); >>> smc_ib_dealloc_protection_domain(lnk); >>> - smc_wr_free_link_mem(lnk); >>> - smc_lgr_put(lnk->lgr); /* lgr_hold in smcr_link_init() */ >>> smc_ibdev_cnt_dec(lnk); >>> put_device(&lnk->smcibdev->ibdev->dev); >>> smcibdev = lnk->smcibdev; >>> - memset(lnk, 0, sizeof(struct smc_link)); >>> - lnk->state = SMC_LNK_UNUSED; >>> if (!atomic_dec_return(&smcibdev->lnk_cnt)) >>> wake_up(&smcibdev->lnks_deleted); >> >> Same here, waiter should not be woken up until the link memory is actually freed. >> > > OK, I will correct this as well. > > And similarly I want to move smc_ibdev_cnt_dec() and put_device() to > __smcr_link_clear() as well to ensure that put link related resources > only when link is actually cleared. What do you think? I think that's a good idea, yes.