* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
(*md->md_eq->eq_refs[cpt])--;
}
- LASSERT(!cfs_list_empty(&md->md_list));
- cfs_list_del_init(&md->md_list);
- lnet_md_free_locked(md);
+ LASSERT(!list_empty(&md->md_list));
+ list_del_init(&md->md_list);
+ lnet_md_free(md);
}
static int
return -EINVAL;
} else if ((umd->options & LNET_MD_KIOV) != 0) {
-#ifndef __KERNEL__
- return -EINVAL;
-#else
lmd->md_niov = niov = umd->length;
memcpy(lmd->md_iov.kiov, umd->start,
niov * sizeof (lmd->md_iov.kiov[0]));
(umd->max_size < 0 ||
umd->max_size > total_length)) // illegal max_size
return -EINVAL;
-#endif
} else { /* contiguous */
lmd->md_length = umd->length;
lmd->md_niov = niov = 1;
lnet_res_lh_initialize(container, &md->md_lh);
- LASSERT(cfs_list_empty(&md->md_list));
- cfs_list_add(&md->md_list, &container->rec_active);
+ LASSERT(list_empty(&md->md_list));
+ list_add(&md->md_list, &container->rec_active);
return 0;
}
lnet_eq2handle(&umd->eq_handle, lmd->md_eq);
}
-int
+static int
lnet_md_validate(lnet_md_t *umd)
{
if (umd->start == NULL && umd->length != 0) {
LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd,
lnet_unlink_t unlink, lnet_handle_md_t *handle)
{
- CFS_LIST_HEAD (matches);
- CFS_LIST_HEAD (drops);
+ struct list_head matches = LIST_HEAD_INIT(matches);
+ struct list_head drops = LIST_HEAD_INIT(drops);
struct lnet_me *me;
struct lnet_libmd *md;
int cpt;
int rc;
- LASSERT (the_lnet.ln_init);
LASSERT (the_lnet.ln_refcount > 0);
if (lnet_md_validate(&umd) != 0)
return 0;
failed:
- lnet_md_free_locked(md);
+ lnet_md_free(md);
lnet_res_unlock(cpt);
return rc;
int cpt;
int rc;
- LASSERT (the_lnet.ln_init);
LASSERT (the_lnet.ln_refcount > 0);
if (lnet_md_validate(&umd) != 0)
return 0;
failed:
- lnet_md_free_locked(md);
+ lnet_md_free(md);
lnet_res_unlock(cpt);
return rc;
/**
* Unlink the memory descriptor from any ME it may be linked to and release
- * the internal resources associated with it.
+ * the internal resources associated with it. As a result, active messages
+ * associated with the MD may get aborted.
*
* This function does not free the memory region associated with the MD;
* i.e., the memory the user allocated for this MD. If the ME associated with
lnet_libmd_t *md;
int cpt;
- LASSERT(the_lnet.ln_init);
LASSERT(the_lnet.ln_refcount > 0);
cpt = lnet_cpt_of_cookie(mdh.cookie);
return -ENOENT;
}
- /* If the MD is busy, lnet_md_unlink just marks it for deletion, and
- * when the NAL is done, the completion event flags that the MD was
- * unlinked. Otherwise, we enqueue an event now... */
-
- if (md->md_eq != NULL &&
- md->md_refcount == 0) {
- lnet_build_unlink_event(md, &ev);
+ md->md_flags |= LNET_MD_FLAG_ABORTED;
+ /* If the MD is busy, lnet_md_unlink just marks it for deletion, and
+ * when the LND is done, the completion event flags that the MD was
+ * unlinked. Otherwise, we enqueue an event now... */
+ if (md->md_eq != NULL && md->md_refcount == 0) {
+ lnet_build_unlink_event(md, &ev);
lnet_eq_enqueue_event(md->md_eq, &ev);
- }
+ }
lnet_md_unlink(md);