Whamcloud - gitweb
LU-1832 ldlm: fix double list add
authorPeng Tao <tao.peng@emc.com>
Wed, 5 Sep 2012 07:51:04 +0000 (15:51 +0800)
committerOleg Drokin <green@whamcloud.com>
Thu, 8 Nov 2012 23:54:59 +0000 (18:54 -0500)
Adding list to itself will cause kernel warning if
CONFIG_DEBUG_LIST is on.

Signed-off-by: Peng Tao <tao.peng@emc.com>
Change-Id: Ibaf135c2c6ca6cc8ee4f0e6f270d738c6964fddb
Reviewed-on: http://review.whamcloud.com/3880
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Fan Yong <yong.fan@whamcloud.com>
Reviewed-by: Keith Mannthey <kemannthey@gmail.com>
lustre/ldlm/ldlm_lock.c

index 607c631..f575bda 100644 (file)
@@ -982,9 +982,16 @@ static void ldlm_granted_list_add_lock(struct ldlm_lock *lock,
         LASSERT(cfs_list_empty(&lock->l_sl_mode));
         LASSERT(cfs_list_empty(&lock->l_sl_policy));
 
         LASSERT(cfs_list_empty(&lock->l_sl_mode));
         LASSERT(cfs_list_empty(&lock->l_sl_policy));
 
-        cfs_list_add(&lock->l_res_link, prev->res_link);
-        cfs_list_add(&lock->l_sl_mode, prev->mode_link);
-        cfs_list_add(&lock->l_sl_policy, prev->policy_link);
+       /*
+        * lock->link == prev->link means lock is first starting the group.
+        * Don't re-add to itself to suppress kernel warnings.
+        */
+       if (&lock->l_res_link != prev->res_link)
+               cfs_list_add(&lock->l_res_link, prev->res_link);
+       if (&lock->l_sl_mode != prev->mode_link)
+               cfs_list_add(&lock->l_sl_mode, prev->mode_link);
+       if (&lock->l_sl_policy != prev->policy_link)
+               cfs_list_add(&lock->l_sl_policy, prev->policy_link);
 
         EXIT;
 }
 
         EXIT;
 }