On 05/01/2022 09:55, Wen Gu wrote: > On 2022/1/5 3:54 pm, dust.li wrote: > >>> - if (rc) >>> + if (rc) { >>> + spin_lock_bh(lgr_lock); >>> + if (!list_empty(&lgr->list)) >>> + list_del_init(&lgr->list); >>> + spin_unlock_bh(lgr_lock); >>> + __smc_lgr_terminate(lgr, true); >> >> What about adding a smc_lgr_terminate() wrapper and put list_del_init() >> and __smc_lgr_terminate() into it ? > > Adding a new wrapper is a good idea. But I think the logic here is relatively simple. > So instead of wrapping them, I coded them like what smc_lgr_cleanup_early() does. It might look cleaner with the following changes: - adopt smc_lgr_cleanup_early() to take only an lgr as parameter and remove the call to smc_conn_free() - change smc_conn_abort() (which is the only caller of smc_lgr_cleanup_early() right now), always call smc_conn_free() and if (local_first) additionally call smc_lgr_cleanup_early() (hold a local copy of the lgr for this call) - finally call smc_lgr_cleanup_early(lgr) from smc_conn_create() This should be the same processing, but the smc_conn_free() is moved to smc_conn_abort() where it looks to be a better place for this call. And smc_lgr_cleanup_early() takes only care of an lgr. What do you think? Did I miss something?