static int ptlrpc_prep_bulk_frag_pages(struct ptlrpc_bulk_desc *desc,
void *frag, int len)
{
- unsigned int offset = (uintptr_t)frag & ~PAGE_MASK;
+ unsigned int offset = (unsigned long)frag & ~PAGE_MASK;
ENTRY;
while (len > 0) {
int page_len = min_t(unsigned int, PAGE_SIZE - offset,
len);
- uintptr_t vaddr = (uintptr_t) frag;
+ unsigned long vaddr = (unsigned long)frag;
ptlrpc_prep_bulk_page_nopin(desc,
lnet_kvaddr_to_page(vaddr),
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,