diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c index 86cccc24e52e2d047c5617af4421902e8dd6c747..aee9ccfa99c22e264c0f984e353d3767c5ac9e9c 100644 --- a/net/smc/smc_clc.c +++ b/net/smc/smc_clc.c @@ -349,7 +349,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, smc->peer_diagnosis = ntohl(dclc->peer_diagnosis); if (((struct smc_clc_msg_decline *)buf)->hdr.flag) { smc->conn.lgr->sync_err = 1; - smc_lgr_terminate(smc->conn.lgr, true); + smc_lgr_terminate(smc->conn.lgr); } } diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c index 9b92b52952dd4471c9c6dabf667320a833b2721f..53b6afbb1d9340e32ab09ea83189529a03fce5cd 100644 --- a/net/smc/smc_core.c +++ b/net/smc/smc_core.c @@ -229,7 +229,7 @@ static void smc_lgr_terminate_work(struct work_struct *work) struct smc_link_group *lgr = container_of(work, struct smc_link_group, terminate_work); - smc_lgr_terminate(lgr, true); + smc_lgr_terminate(lgr); } /* create a new SMC link group */ @@ -581,7 +581,10 @@ static void smc_lgr_cleanup(struct smc_link_group *lgr) } } -/* terminate link group */ +/* terminate link group + * @soft: true if link group shutdown can take its time + * false if immediate link group shutdown is required + */ static void __smc_lgr_terminate(struct smc_link_group *lgr, bool soft) { struct smc_connection *conn; @@ -619,11 +622,8 @@ static void __smc_lgr_terminate(struct smc_link_group *lgr, bool soft) smc_lgr_free(lgr); } -/* unlink and terminate link group - * @soft: true if link group shutdown can take its time - * false if immediate link group shutdown is required - */ -void smc_lgr_terminate(struct smc_link_group *lgr, bool soft) +/* unlink and terminate link group */ +void smc_lgr_terminate(struct smc_link_group *lgr) { spinlock_t *lgr_lock; @@ -633,11 +633,9 @@ void smc_lgr_terminate(struct smc_link_group *lgr, bool soft) spin_unlock_bh(lgr_lock); return; /* lgr already terminating */ } - if (!soft) - lgr->freeing = 1; list_del_init(&lgr->list); spin_unlock_bh(lgr_lock); - __smc_lgr_terminate(lgr, soft); + __smc_lgr_terminate(lgr, true); } /* Called when IB port is terminated */ diff --git a/net/smc/smc_core.h b/net/smc/smc_core.h index c472e12951d1abbf52c8ab44f041b3042605b5e6..094d43c2434573799cc6cde41749ef7f59d8f546 100644 --- a/net/smc/smc_core.h +++ b/net/smc/smc_core.h @@ -296,7 +296,7 @@ struct smc_clc_msg_accept_confirm; struct smc_clc_msg_local; void smc_lgr_forget(struct smc_link_group *lgr); -void smc_lgr_terminate(struct smc_link_group *lgr, bool soft); +void smc_lgr_terminate(struct smc_link_group *lgr); void smc_port_terminate(struct smc_ib_device *smcibdev, u8 ibport); void smc_smcd_terminate(struct smcd_dev *dev, u64 peer_gid, unsigned short vlan); diff --git a/net/smc/smc_llc.c b/net/smc/smc_llc.c index a9f6431dd69a804138df3bda0cce393572def2bf..b134a08c929eb0d98526ccaf5a1929dd2eaa68e2 100644 --- a/net/smc/smc_llc.c +++ b/net/smc/smc_llc.c @@ -614,7 +614,7 @@ static void smc_llc_testlink_work(struct work_struct *work) rc = wait_for_completion_interruptible_timeout(&link->llc_testlink_resp, SMC_LLC_WAIT_TIME); if (rc <= 0) { - smc_lgr_terminate(smc_get_lgr(link), true); + smc_lgr_terminate(smc_get_lgr(link)); return; } next_interval = link->llc_testlink_time;