- if (md->eq != NULL &&
- md->pending == 0) {
- memset(&ev, 0, sizeof(ev));
-
- ev.type = PTL_EVENT_UNLINK;
- ev.ni_fail_type = PTL_OK;
- ev.unlinked = 1;
- lib_md_deconstruct(nal, md, &ev.mem_desc);
-
- lib_enq_event_locked(nal, private, md->eq, &ev);
- }
-
- lib_md_deconstruct(nal, md, &ret->status_out);
- lib_md_unlink(nal, md);
- ret->rc = PTL_OK;
-
- state_unlock(nal, &flags);
-
- return (PTL_OK);
-}
-
-int do_PtlMDUpdate_internal(nal_cb_t * nal, void *private, void *v_args,
- void *v_ret)
-{
- /*
- * Incoming:
- * ptl_handle_md_t md_in
- * ptl_md_t * old_inout
- * ptl_md_t * new_inout
- * ptl_handle_eq_t testq_in
- * ptl_seq_t sequence_in
- *
- * Outgoing:
- * ptl_md_t * old_inout
- * ptl_md_t * new_inout
- */
- PtlMDUpdate_internal_in *args = v_args;
- PtlMDUpdate_internal_out *ret = v_ret;
- lib_md_t *md;
- lib_eq_t *test_eq = NULL;
- ptl_md_t *new = &args->new_inout;
- unsigned long flags;
-
- state_lock(nal, &flags);
-
- md = ptl_handle2md(&args->md_in, nal);
- if (md == NULL) {
- ret->rc = PTL_MD_INVALID;
- goto out;
- }
-
- if (args->old_inout_valid)
- lib_md_deconstruct(nal, md, &ret->old_inout);
-
- if (!args->new_inout_valid) {
- ret->rc = PTL_OK;
- goto out;
- }
-
- /* XXX fttb, the new MD must be the same "shape" wrt fragmentation,
- * since we simply overwrite the old lib-md */
- if ((((new->options ^ md->options) &
- (PTL_MD_IOVEC | PTL_MD_KIOV)) != 0) ||
- ((new->options & (PTL_MD_IOVEC | PTL_MD_KIOV)) != 0 &&
- new->length != md->md_niov)) {
- ret->rc = PTL_IOV_INVALID;
- goto out;
- }
-
- if (!PtlHandleIsEqual (args->testq_in, PTL_EQ_NONE)) {
- test_eq = ptl_handle2eq(&args->testq_in, nal);
- if (test_eq == NULL) {
- ret->rc = PTL_EQ_INVALID;
- goto out;
- }
- }
-
- if (md->pending != 0) {
- ret->rc = PTL_MD_NO_UPDATE;
- goto out;