diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index e9f93b3ab435..221643624ace 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -665,8 +665,10 @@ static int smcr_clnt_conf_first_link(struct smc_sock *smc) if (rc < 0) return SMC_CLC_DECL_TIMEOUT_CL; + down_write(&link->lgr->llc_conf_mutex); smc_llc_link_active(link); smcr_lgr_set_type(link->lgr, SMC_LGR_SINGLE); + up_write(&link->lgr->llc_conf_mutex); if (link->lgr->max_links > 1) { /* optional 2nd link, receive ADD LINK request from server */ @@ -682,7 +684,9 @@ static int smcr_clnt_conf_first_link(struct smc_sock *smc) return rc; } smc_llc_flow_qentry_clr(&link->lgr->llc_flow_lcl); + down_write(&link->lgr->llc_conf_mutex); smc_llc_cli_add_link(link, qentry); + up_write(&link->lgr->llc_conf_mutex); } return 0; } @@ -1909,8 +1913,10 @@ static int smcr_serv_conf_first_link(struct smc_sock *smc) /* confirm_rkey is implicit on 1st contact */ smc->conn.rmb_desc->is_conf_rkey = true; + down_write(&link->lgr->llc_conf_mutex); smc_llc_link_active(link); smcr_lgr_set_type(link->lgr, SMC_LGR_SINGLE); + up_write(&link->lgr->llc_conf_mutex); if (link->lgr->max_links > 1) { down_write(&link->lgr->llc_conf_mutex);