diff options
author | Karsten Graul <kgraul@linux.ibm.com> | 2019-04-11 12:17:30 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-11 21:04:08 +0300 |
commit | fd57770dd198f5b2ddd5b9e6bf282cf98d63adb9 (patch) | |
tree | 37e08bc918b40df3a79e4fc28ba16f8a2821d2c4 /net/smc/smc_close.h | |
parent | 988dc4a9a3b66be75b30405a5494faf0dc7cffb6 (diff) | |
download | linux-fd57770dd198f5b2ddd5b9e6bf282cf98d63adb9.tar.xz |
net/smc: wait for pending work before clcsock release_sock
When the clcsock is already released using sock_release() and a pending
smc_listen_work accesses the clcsock than that will fail. Solve this
by canceling and waiting for the work to complete first. Because the
work holds the sock_lock it must make sure that the lock is not hold
before the new helper smc_clcsock_release() is invoked. And before the
smc_listen_work starts working check if the parent listen socket is
still valid, otherwise stop the work early.
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: Ursula Braun <ubraun@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/smc/smc_close.h')
-rw-r--r-- | net/smc/smc_close.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/smc/smc_close.h b/net/smc/smc_close.h index 19eb6a211c23..e0e3b5df25d2 100644 --- a/net/smc/smc_close.h +++ b/net/smc/smc_close.h @@ -23,5 +23,6 @@ void smc_close_wake_tx_prepared(struct smc_sock *smc); int smc_close_active(struct smc_sock *smc); int smc_close_shutdown_write(struct smc_sock *smc); void smc_close_init(struct smc_sock *smc); +void smc_clcsock_release(struct smc_sock *smc); #endif /* SMC_CLOSE_H */ |