From 48372a0f76e1395180c8a38f48e5e1567ea0d038 Mon Sep 17 00:00:00 2001 From: Liang Zhen Date: Sun, 1 Jul 2012 14:12:24 +0800 Subject: [PATCH] LU-1588 lnet: deadlock while shutting down router Should release lock on exiting of lnet_prune_rc_data(), otherwise we will get deadlock on later attempting on lnet_net_lock(). Also, there is a wrong condition check in lnet_prune_rc_data() can prevent router checker from shutting down. Signed-off-by: Liang Zhen Change-Id: I5292075453e61f300384043e2346df714c530303 Reviewed-on: http://review.whamcloud.com/3250 Tested-by: Hudson Reviewed-by: Bobi Jam Reviewed-by: Doug Oucharek Tested-by: Maloo Reviewed-by: Oleg Drokin --- lnet/lnet/router.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c index 81cc9d8..7c2a453 100644 --- a/lnet/lnet/router.c +++ b/lnet/lnet/router.c @@ -1162,7 +1162,7 @@ lnet_prune_rc_data(int wait_unlink) while (!cfs_list_empty(&the_lnet.ln_rcd_zombie)) { cfs_list_for_each_entry_safe(rcd, tmp, &the_lnet.ln_rcd_zombie, rcd_list) { - if (!LNetHandleIsInvalid(rcd->rcd_mdh)) + if (LNetHandleIsInvalid(rcd->rcd_mdh)) cfs_list_move(&rcd->rcd_list, &head); } @@ -1179,7 +1179,7 @@ lnet_prune_rc_data(int wait_unlink) } if (!wait_unlink) - break; + return; i++; CDEBUG(((i & (-i)) == i) ? D_WARNING : D_NET, @@ -1188,6 +1188,8 @@ lnet_prune_rc_data(int wait_unlink) lnet_net_lock(LNET_LOCK_EX); } + + lnet_net_unlock(LNET_LOCK_EX); } -- 1.8.3.1