X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fpers.c;h=1009fd559cf90fdcb2811c5628a529463e71082a;hb=5c89fa57cb2dfff667ddd75eaeb13f942f5b155d;hp=4a66fb8abe3c8216046cde9fadcb3bea4ff56c42;hpb=7cb2e4b642b51b42f9f3a448251774929073e17c;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/pers.c b/lustre/ptlrpc/pers.c index 4a66fb8..1009fd5 100644 --- a/lustre/ptlrpc/pers.c +++ b/lustre/ptlrpc/pers.c @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * 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 - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,7 +23,7 @@ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2014, Intel Corporation. + * Copyright (c) 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -45,34 +41,34 @@ #include "ptlrpc_internal.h" -void ptlrpc_fill_bulk_md(lnet_md_t *md, struct ptlrpc_bulk_desc *desc, +void ptlrpc_fill_bulk_md(struct lnet_md *md, struct ptlrpc_bulk_desc *desc, int mdidx) { - CLASSERT(PTLRPC_MAX_BRW_PAGES < LI_POISON); + unsigned int start = desc->bd_mds_off[mdidx]; + + BUILD_BUG_ON(PTLRPC_MAX_BRW_PAGES >= LI_POISON); LASSERT(mdidx < desc->bd_md_max_brw); LASSERT(desc->bd_iov_count <= PTLRPC_MAX_BRW_PAGES); - LASSERT(!(md->options & (LNET_MD_IOVEC | LNET_MD_KIOV | - LNET_MD_PHYS))); - - md->length = max(0, desc->bd_iov_count - mdidx * LNET_MAX_IOV); - md->length = min_t(unsigned int, LNET_MAX_IOV, md->length); - if (ptlrpc_is_bulk_desc_kiov(desc->bd_type)) { + /* just send a lnet header */ + if (mdidx >= desc->bd_md_count) { md->options |= LNET_MD_KIOV; - if (GET_ENC_KIOV(desc)) - md->start = &BD_GET_ENC_KIOV(desc, mdidx * - LNET_MAX_IOV); - else - md->start = &BD_GET_KIOV(desc, mdidx * LNET_MAX_IOV); - } else if (ptlrpc_is_bulk_desc_kvec(desc->bd_type)) { - md->options |= LNET_MD_IOVEC; - if (GET_ENC_KVEC(desc)) - md->start = &BD_GET_ENC_KVEC(desc, mdidx * - LNET_MAX_IOV); - else - md->start = &BD_GET_KVEC(desc, mdidx * LNET_MAX_IOV); + md->length = 0; + md->start = NULL; + return; } + + if (mdidx == (desc->bd_md_count - 1)) + md->length = desc->bd_iov_count - start; + else + md->length = desc->bd_mds_off[mdidx + 1] - start; + + md->options |= LNET_MD_KIOV; + if (desc->bd_enc_vec) + md->start = &desc->bd_enc_vec[start]; + else + md->start = &desc->bd_vec[start]; }