Whamcloud - gitweb
This is a debugging patch from LLNL for a rare list walking issue.
authordeen <deen>
Tue, 23 Sep 2008 16:13:34 +0000 (16:13 +0000)
committerdeen <deen>
Tue, 23 Sep 2008 16:13:34 +0000 (16:13 +0000)
b=16206
i=he.huang
i=alexey.lyashkov

lnet/include/lnet/lib-lnet.h
lnet/lnet/api-ni.c
lnet/lnet/lib-md.c

index bba14a1..ec80e0c 100644 (file)
@@ -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();
 
         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);
 }
 
         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;
                 /* 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);
         }
         
         return (md);
index cf9226d..717a346 100644 (file)
@@ -734,7 +734,7 @@ lnet_unprepare (void)
                                                lnet_libmd_t, md_list);
 
                 CERROR ("Active md %p on exit\n", md);
                                                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);
         }
 
                 lnet_md_free (md);
         }
 
index 379ce87..39fa978 100644 (file)
@@ -77,7 +77,8 @@ lnet_md_unlink(lnet_libmd_t *md)
                 LASSERT (md->md_eq->eq_refcount >= 0);
         }
 
                 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);
 }
 
         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);
 
         /* 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;
         list_add (&lmd->md_list, &the_lnet.ln_active_mds);
 
         return 0;