From: Bruno Faccini Date: Mon, 20 Apr 2015 14:25:30 +0000 (+0200) Subject: LU-6476 lnet: avoid race during acceptor thread termination X-Git-Tag: 2.7.54~21 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=7574e32e64b77851163d0a8d3141b406d03621be LU-6476 lnet: avoid race during acceptor thread termination This patch will avoid potential race, around socket sleepers wait list, during acceptor thread termination and using sk_callback_lock RW-Lock protection. Signed-off-by: Bruno Faccini Change-Id: Ib0a06bd8b3947648cb3ab7e1148b5073f68316fe Reviewed-on: http://review.whamcloud.com/14503 Reviewed-by: Amir Shehata Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond Reviewed-by: Oleg Drokin --- diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c index a0c0783..3585d20 100644 --- a/lnet/lnet/acceptor.c +++ b/lnet/lnet/acceptor.c @@ -507,11 +507,17 @@ lnet_acceptor_start(void) void lnet_acceptor_stop(void) { + struct sock *sk; + if (lnet_acceptor_state.pta_shutdown) /* not running */ return; lnet_acceptor_state.pta_shutdown = 1; - wake_up_all(sk_sleep(lnet_acceptor_state.pta_sock->sk)); + + sk = lnet_acceptor_state.pta_sock->sk; + + /* awake any sleepers using safe method */ + sk->sk_state_change(sk); /* block until acceptor signals exit */ wait_for_completion(&lnet_acceptor_state.pta_signal);