X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftarget%2Ftgt_handler.c;h=df2b1c6b98bb1eb2303989b419c16ddaea262deb;hb=f57030811f20b7c3e1432134ff97c9929ff4e0c8;hp=dd2ec2e3aeb6c61d4a0a8f0a34cfc3d9ce795a0f;hpb=d59f1b03eee0f908a99a6ea80642685fcb621974;p=fs%2Flustre-release.git diff --git a/lustre/target/tgt_handler.c b/lustre/target/tgt_handler.c index dd2ec2e..df2b1c6 100644 --- a/lustre/target/tgt_handler.c +++ b/lustre/target/tgt_handler.c @@ -1073,12 +1073,14 @@ int tgt_send_buffer(struct tgt_session_info *tsi, struct lu_rdbuf *rdbuf) ENTRY; - for (i = 0; i < rdbuf->rb_nbufs; i++) - /* There is only one caller (out_read) and we *know* that - * bufs are at most 4K, and 4K aligned, so a simple DIV_ROUND_UP - * is always sufficient. - */ - pages += DIV_ROUND_UP(rdbuf->rb_bufs[i].lb_len, PAGE_SIZE); + for (i = 0; i < rdbuf->rb_nbufs; i++) { + unsigned int offset; + + offset = (unsigned long)rdbuf->rb_bufs[i].lb_buf & ~PAGE_MASK; + pages += DIV_ROUND_UP(rdbuf->rb_bufs[i].lb_len + offset, + PAGE_SIZE); + } + desc = ptlrpc_prep_bulk_exp(req, pages, 1, PTLRPC_BULK_PUT_SOURCE | PTLRPC_BULK_BUF_KIOV, MDS_BULK_PORTAL,