* 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/
LASSERT(!list_empty(&md->md_list));
list_del_init(&md->md_list);
- lnet_md_free_locked(md);
+ 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]));
for (i = 0; i < (int)niov; i++) {
/* We take the page pointer on trust */
if (lmd->md_iov.kiov[i].kiov_offset +
- lmd->md_iov.kiov[i].kiov_len > PAGE_CACHE_SIZE)
+ lmd->md_iov.kiov[i].kiov_len > PAGE_SIZE)
return -EINVAL; /* invalid length */
total_length += lmd->md_iov.kiov[i].kiov_len;
(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_eq2handle(&umd->eq_handle, lmd->md_eq);
}
-int
+static int
lnet_md_validate(lnet_md_t *umd)
{
if (umd->start == NULL && umd->length != 0) {
int cpt;
int rc;
- LASSERT (the_lnet.ln_init);
LASSERT (the_lnet.ln_refcount > 0);
if (lnet_md_validate(&umd) != 0)
return -ENOMEM;
rc = lnet_md_build(md, &umd, unlink);
+ if (rc != 0)
+ goto out_free;
+
cpt = lnet_cpt_of_cookie(meh.cookie);
lnet_res_lock(cpt);
- if (rc != 0)
- goto failed;
me = lnet_handle2me(&meh);
if (me == NULL)
rc = lnet_md_link(md, umd.eq_handle, cpt);
if (rc != 0)
- goto failed;
+ goto out_unlock;
/* attach this MD to portal of ME and check if it matches any
* blocked msgs on this portal */
return 0;
- failed:
- lnet_md_free_locked(md);
-
+out_unlock:
lnet_res_unlock(cpt);
+out_free:
+ lnet_md_free(md);
return rc;
}
EXPORT_SYMBOL(LNetMDAttach);
int cpt;
int rc;
- LASSERT (the_lnet.ln_init);
LASSERT (the_lnet.ln_refcount > 0);
if (lnet_md_validate(&umd) != 0)
return -ENOMEM;
rc = lnet_md_build(md, &umd, unlink);
+ if (rc != 0)
+ goto out_free;
cpt = lnet_res_lock_current();
- if (rc != 0)
- goto failed;
rc = lnet_md_link(md, umd.eq_handle, cpt);
if (rc != 0)
- goto failed;
+ goto out_unlock;
lnet_md2handle(handle, md);
lnet_res_unlock(cpt);
return 0;
- failed:
- lnet_md_free_locked(md);
-
+ out_unlock:
lnet_res_unlock(cpt);
+
+ out_free:
+ lnet_md_free(md);
return rc;
}
EXPORT_SYMBOL(LNetMDBind);
lnet_libmd_t *md;
int cpt;
- LASSERT(the_lnet.ln_init);
LASSERT(the_lnet.ln_refcount > 0);
cpt = lnet_cpt_of_cookie(mdh.cookie);