* in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see [sun.com URL with a
- * copy of GPLv2].
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
LASSERT (md->md_eq->eq_refcount >= 0);
}
- list_del (&md->md_list);
+ LASSERT (!list_empty(&md->md_list));
+ list_del_init (&md->md_list);
lnet_md_free(md);
}
* otherwise caller may only lnet_md_free() it.
*/
- if (!LNetHandleIsEqual (umd->eq_handle, LNET_EQ_NONE)) {
+ if (!LNetHandleIsInvalid (umd->eq_handle)) {
eq = lnet_handle2eq(&umd->eq_handle);
if (eq == NULL)
return -ENOENT;
memcpy(lmd->md_iov.iov, umd->start,
niov * sizeof (lmd->md_iov.iov[0]));
- for (i = 0; i < niov; i++) {
+ for (i = 0; i < (int)niov; i++) {
/* We take the base address on trust */
if (lmd->md_iov.iov[i].iov_len <= 0) /* invalid length */
return -EINVAL;
memcpy(lmd->md_iov.kiov, umd->start,
niov * sizeof (lmd->md_iov.kiov[0]));
- for (i = 0; i < niov; i++) {
+ 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 > CFS_PAGE_SIZE )
if ((umd->options & LNET_MD_MAX_SIZE) != 0 && /* max size used */
(umd->max_size < 0 ||
- umd->max_size > umd->length)) // illegal max_size
+ umd->max_size > (int)umd->length)) // illegal max_size
return -EINVAL;
}
/* It's good; let handle2md succeed and add to active mds */
lnet_initialise_handle (&lmd->md_lh, LNET_COOKIE_TYPE_MD);
+ LASSERT (list_empty(&lmd->md_list));
list_add (&lmd->md_list, &the_lnet.ln_active_mds);
return 0;
LASSERT (the_lnet.ln_init);
LASSERT (the_lnet.ln_refcount > 0);
-
+
if ((umd.options & (LNET_MD_KIOV | LNET_MD_IOVEC)) != 0 &&
umd.length > LNET_MAX_IOV) /* too many fragments */
return -EINVAL;
+ if ((umd.options & (LNET_MD_OP_GET | LNET_MD_OP_PUT)) == 0)
+ return -EINVAL;
+
md = lnet_md_alloc(&umd);
if (md == NULL)
return -ENOMEM;
} else {
rc = lib_md_build(md, &umd, unlink);
if (rc == 0) {
+ the_lnet.ln_portals[me->me_portal].ptl_ml_version++;
+
me->me_md = md;
md->md_me = me;
LASSERT (the_lnet.ln_init);
LASSERT (the_lnet.ln_refcount > 0);
-
+
if ((umd.options & (LNET_MD_KIOV | LNET_MD_IOVEC)) != 0 &&
umd.length > LNET_MAX_IOV) /* too many fragments */
return -EINVAL;
+ if ((umd.options & (LNET_MD_OP_GET | LNET_MD_OP_PUT)) != 0)
+ return -EINVAL;
+
md = lnet_md_alloc(&umd);
if (md == NULL)
return -ENOMEM;