diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index bba14a102ef9ae10fe3c3c58ecd7daadbb775cc1..ec80e0c4f26ad17da08e7872c6686216d8427025 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 cf9226d6dd23d99ee576aee83cf323336bb0918b..717a346338065d7437981a5382ffe10e5cb2a296 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 379ce878eb8cbe82bbbb2598a82f3612b0db33fd..39fa978355f445ad31a90ee210e71ca827c2de56 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;