From bb0a44845815bc7559e929f9754590e883bfbd95 Mon Sep 17 00:00:00 2001
From: deen <deen>
Date: Tue, 23 Sep 2008 16:13:34 +0000
Subject: [PATCH] This is a debugging patch from LLNL for a rare list walking
 issue.

b=16206
i=he.huang
i=alexey.lyashkov
---
 lnet/include/lnet/lib-lnet.h | 4 ++++
 lnet/lnet/api-ni.c           | 2 +-
 lnet/lnet/lib-md.c           | 4 +++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h
index bba14a102e..ec80e0c4f2 100644
--- a/lnet/include/lnet/lib-lnet.h
+++ b/lnet/include/lnet/lib-lnet.h
@@ -182,6 +182,9 @@ lnet_md_alloc (lnet_md_t *umd)
         md = (lnet_libmd_t *)lnet_freelist_alloc(&the_lnet.ln_free_mds);
         LNET_UNLOCK();
 
+        if (md != NULL)
+                CFS_INIT_LIST_HEAD(&md->md_list);
+
         return (md);
 }
 
@@ -282,6 +285,7 @@ lnet_md_alloc (lnet_md_t *umd)
                 /* Set here in case of early free */
                 md->md_options = umd->options;
                 md->md_niov = niov;
+                CFS_INIT_LIST_HEAD(&md->md_list);
         }
         
         return (md);
diff --git a/lnet/lnet/api-ni.c b/lnet/lnet/api-ni.c
index cf9226d6dd..717a346338 100644
--- a/lnet/lnet/api-ni.c
+++ b/lnet/lnet/api-ni.c
@@ -734,7 +734,7 @@ lnet_unprepare (void)
                                                lnet_libmd_t, md_list);
 
                 CERROR ("Active md %p on exit\n", md);
-                list_del (&md->md_list);
+                list_del_init (&md->md_list);
                 lnet_md_free (md);
         }
 
diff --git a/lnet/lnet/lib-md.c b/lnet/lnet/lib-md.c
index 379ce878eb..39fa978355 100644
--- a/lnet/lnet/lib-md.c
+++ b/lnet/lnet/lib-md.c
@@ -77,7 +77,8 @@ lnet_md_unlink(lnet_libmd_t *md)
                 LASSERT (md->md_eq->eq_refcount >= 0);
         }
 
-        list_del (&md->md_list);
+        LASSERT (!list_empty(&md->md_list));
+        list_del_init (&md->md_list);
         lnet_md_free(md);
 }
 
@@ -186,6 +187,7 @@ lib_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink)
 
         /* It's good; let handle2md succeed and add to active mds */
         lnet_initialise_handle (&lmd->md_lh, LNET_COOKIE_TYPE_MD);
+        LASSERT (list_empty(&lmd->md_list));
         list_add (&lmd->md_list, &the_lnet.ln_active_mds);
 
         return 0;
-- 
GitLab