Commit e0c44564 authored by Serguei Smirnov's avatar Serguei Smirnov Committed by Oleg Drokin
Browse files

LU-12233 lnet: deadlock on LNet shutdown



Release ln_api_mutex during LNet shutdown while waiting
for zombie LNI to allow other threads to read the LNet
state updated by the shutdown and fall through, avoiding
the deadlock
Signed-off-by: default avatarSerguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: Iaba11624d5b79bd0acb4add39f6153c55770440a
Reviewed-on: https://review.whamcloud.com/39933

Tested-by: default avatarjenkins <devops@whamcloud.com>
Tested-by: default avatarMaloo <maloo@whamcloud.com>
Reviewed-by: default avatarChris Horn <chris.horn@hpe.com>
Reviewed-by: default avatarAmir Shehata <ashehata@whamcloud.com>
Reviewed-by: default avatarOleg Drokin <green@whamcloud.com>
parent 88021878
......@@ -2114,7 +2114,13 @@ lnet_clear_zombies_nis_locked(struct lnet_net *net)
}
if (!list_empty(&ni->ni_netlist)) {
/* Unlock mutex while waiting to allow other
* threads to read the LNet state and fall through
* to avoid deadlock
*/
lnet_net_unlock(LNET_LOCK_EX);
mutex_unlock(&the_lnet.ln_api_mutex);
++i;
if ((i & (-i)) == i) {
CDEBUG(D_WARNING,
......@@ -2122,6 +2128,8 @@ lnet_clear_zombies_nis_locked(struct lnet_net *net)
libcfs_nid2str(ni->ni_nid));
}
schedule_timeout_uninterruptible(cfs_time_seconds(1));
mutex_lock(&the_lnet.ln_api_mutex);
lnet_net_lock(LNET_LOCK_EX);
continue;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment