- lib_nal_t *nal = apinal->nal_data;
- lib_me_t *me;
- lib_md_t *md;
- unsigned long flags;
- int rc;
-
- if ((umd->options & (PTL_MD_KIOV | PTL_MD_IOVEC)) != 0 &&
- umd->length > PTL_MD_MAX_IOV) /* too many fragments */
- return PTL_IOV_INVALID;
-
- md = lib_md_alloc(nal, umd);
- if (md == NULL)
- return PTL_NO_SPACE;
-
- LIB_LOCK(nal, flags);
-
- me = ptl_handle2me(meh, nal);
- if (me == NULL) {
- rc = PTL_ME_INVALID;
- } else if (me->md != NULL) {
- rc = PTL_ME_IN_USE;
- } else {
- rc = lib_md_build(nal, md, umd, unlink);
- if (rc == PTL_OK) {
- me->md = md;
- md->me = me;
-
- ptl_md2handle(handle, nal, md);
-
- LIB_UNLOCK(nal, flags);
- return (PTL_OK);
- }