OSDN Git Service

net/smc: wait for pending work before clcsock release_sock
authorKarsten Graul <kgraul@linux.ibm.com>
Thu, 11 Apr 2019 09:17:30 +0000 (11:17 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Apr 2019 18:04:08 +0000 (11:04 -0700)
commitfd57770dd198f5b2ddd5b9e6bf282cf98d63adb9
tree37e08bc918b40df3a79e4fc28ba16f8a2821d2c4
parent988dc4a9a3b66be75b30405a5494faf0dc7cffb6
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>
net/smc/af_smc.c
net/smc/smc_close.c
net/smc/smc_close.h