diff options
author | Ursula Braun <ubraun@linux.vnet.ibm.com> | 2018-01-25 11:15:34 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-25 16:10:42 -0500 |
commit | 610db66f377cf99aa07a2b1990727238f2e2d6d3 (patch) | |
tree | debd8dd0cdd136ceafd56b28be0919c785147e26 /net/smc/smc_core.c | |
parent | b4772b3a87b772401e2af1c894fef323fb5c6e7c (diff) | |
download | linux-610db66f377cf99aa07a2b1990727238f2e2d6d3.tar.gz linux-610db66f377cf99aa07a2b1990727238f2e2d6d3.tar.bz2 linux-610db66f377cf99aa07a2b1990727238f2e2d6d3.zip |
net/smc: do not reuse a linkgroup with setup problems
Once a linkgroup is created successfully, it stays alive for a
certain time to service more connections potentially created.
If one of the initialization steps for a new linkgroup fails,
the linkgroup should not be reused by other connections following.
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/smc/smc_core.c')
-rw-r--r-- | net/smc/smc_core.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c index 94f21116dac5..7406cbb41856 100644 --- a/net/smc/smc_core.c +++ b/net/smc/smc_core.c @@ -128,6 +128,8 @@ static void smc_lgr_free_work(struct work_struct *work) bool conns; spin_lock_bh(&smc_lgr_list.lock); + if (list_empty(&lgr->list)) + goto free; read_lock_bh(&lgr->conns_lock); conns = RB_EMPTY_ROOT(&lgr->conns_all); read_unlock_bh(&lgr->conns_lock); @@ -136,6 +138,7 @@ static void smc_lgr_free_work(struct work_struct *work) return; } list_del_init(&lgr->list); /* remove from smc_lgr_list */ +free: spin_unlock_bh(&smc_lgr_list.lock); smc_lgr_free(lgr); } |