X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Flnet%2Flib-md.c;h=c78221cceac34ef7c2473e1edc4b87f3708f19d8;hb=2104ed0f0da3651f0cb4ab0c78a1037891d7cb4f;hp=255a22b95fbec93c24e47d5a4839909cbbf2f5e3;hpb=1cbd19abbed9dbfd3bbc485f0991cfaeb02b7dae;p=fs%2Flustre-release.git diff --git a/lnet/lnet/lib-md.c b/lnet/lnet/lib-md.c index 255a22b..c78221c 100644 --- a/lnet/lnet/lib-md.c +++ b/lnet/lnet/lib-md.c @@ -27,7 +27,7 @@ * 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/ @@ -81,7 +81,7 @@ lnet_md_unlink(lnet_libmd_t *md) LASSERT(!list_empty(&md->md_list)); list_del_init(&md->md_list); - lnet_md_free_locked(md); + lnet_md_free(md); } static int @@ -127,9 +127,6 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) 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])); @@ -137,7 +134,7 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) 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; @@ -149,7 +146,6 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) (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; @@ -219,7 +215,7 @@ lnet_md_deconstruct(lnet_libmd_t *lmd, lnet_md_t *umd) 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) { @@ -274,7 +270,6 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd, int cpt; int rc; - LASSERT (the_lnet.ln_init); LASSERT (the_lnet.ln_refcount > 0); if (lnet_md_validate(&umd) != 0) @@ -290,11 +285,12 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd, 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) @@ -305,7 +301,7 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd, 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 */ @@ -320,10 +316,10 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd, 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); @@ -351,7 +347,6 @@ LNetMDBind(lnet_md_t umd, lnet_unlink_t unlink, lnet_handle_md_t *handle) int cpt; int rc; - LASSERT (the_lnet.ln_init); LASSERT (the_lnet.ln_refcount > 0); if (lnet_md_validate(&umd) != 0) @@ -367,24 +362,25 @@ LNetMDBind(lnet_md_t umd, lnet_unlink_t unlink, lnet_handle_md_t *handle) 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); @@ -426,7 +422,6 @@ LNetMDUnlink (lnet_handle_md_t mdh) lnet_libmd_t *md; int cpt; - LASSERT(the_lnet.ln_init); LASSERT(the_lnet.ln_refcount > 0); cpt = lnet_cpt_of_cookie(mdh.cookie);