-int
-LNetMEInsert(lnet_handle_me_t current_meh,
- lnet_process_id_t match_id,
- __u64 match_bits, __u64 ignore_bits,
- lnet_unlink_t unlink, lnet_ins_pos_t pos,
- lnet_handle_me_t *handle)
-{
- lnet_me_t *current_me;
- lnet_me_t *new_me;
-
- LASSERT (the_lnet.ln_init);
- LASSERT (the_lnet.ln_refcount > 0);
-
- new_me = lnet_me_alloc();
- if (new_me == NULL)
- return -ENOMEM;
-
- LNET_LOCK();
-
- current_me = lnet_handle2me(¤t_meh);
- if (current_me == NULL) {
- lnet_me_free (new_me);
-
- LNET_UNLOCK();
- return -ENOENT;
- }
-
- new_me->me_portal = current_me->me_portal;
- new_me->me_match_id = match_id;
- new_me->me_match_bits = match_bits;
- new_me->me_ignore_bits = ignore_bits;
- new_me->me_unlink = unlink;
- new_me->me_md = NULL;
-
- lnet_initialise_handle (&new_me->me_lh, LNET_COOKIE_TYPE_ME);
-
- if (pos == LNET_INS_AFTER)
- cfs_list_add(&new_me->me_list, ¤t_me->me_list);
- else
- cfs_list_add_tail(&new_me->me_list, ¤t_me->me_list);
-
- lnet_me2handle(handle, new_me);
-
- LNET_UNLOCK();
-
- return 0;
-}
-
-int
-LNetMEUnlink(lnet_handle_me_t meh)
-{
- lnet_me_t *me;
- lnet_libmd_t *md;
- lnet_event_t ev;
-
- LASSERT (the_lnet.ln_init);
- LASSERT (the_lnet.ln_refcount > 0);
-
- LNET_LOCK();
-
- me = lnet_handle2me(&meh);
- if (me == NULL) {
- LNET_UNLOCK();
- return -ENOENT;
- }
-
- md = me->me_md;
- if (md != NULL &&
- md->md_eq != NULL &&
- md->md_refcount == 0) {
- lnet_build_unlink_event(md, &ev);
- lnet_enq_event_locked(md->md_eq, &ev);
- }
-
- lnet_me_unlink(me);
-
- LNET_UNLOCK();
- return 0;
-}
-
-/* call with LNET_LOCK please */