X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fpers.c;h=1009fd559cf90fdcb2811c5628a529463e71082a;hb=5c89fa57cb2dfff667ddd75eaeb13f942f5b155d;hp=e899d796ff700d9477e1d0ebf98869479bf08dac;hpb=6c6ca1fbfb1b2be0e6a9675f9214f98e59bc8088;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/pers.c b/lustre/ptlrpc/pers.c index e899d79..1009fd5 100644 --- a/lustre/ptlrpc/pers.c +++ b/lustre/ptlrpc/pers.c @@ -44,31 +44,31 @@ void ptlrpc_fill_bulk_md(struct lnet_md *md, struct ptlrpc_bulk_desc *desc, int mdidx) { + 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]; }