From: Liang Zhen Date: Sun, 1 Jul 2012 06:12:24 +0000 (+0800) Subject: LU-1588 lnet: deadlock while shutting down router X-Git-Tag: 2.2.60~37 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=48372a0f76e1395180c8a38f48e5e1567ea0d038;hp=1a73553d15b459208cbf7279ea6e5e5a110c632b;ds=sidebyside 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 --- 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); }