From bb0a44845815bc7559e929f9754590e883bfbd95 Mon Sep 17 00:00:00 2001 From: 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 bba14a1..ec80e0c 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 cf9226d..717a346 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 379ce87..39fa978 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; -- 1.8.3.1