Lines Matching refs:buf
98 void xdr_terminate_string(const struct xdr_buf *buf, const u32 len) in xdr_terminate_string() argument
102 kaddr = kmap_atomic(buf->pages[0]); in xdr_terminate_string()
103 kaddr[buf->page_base + len] = '\0'; in xdr_terminate_string()
108 size_t xdr_buf_pagecount(const struct xdr_buf *buf) in xdr_buf_pagecount() argument
110 if (!buf->page_len) in xdr_buf_pagecount()
112 return (buf->page_base + buf->page_len + PAGE_SIZE - 1) >> PAGE_SHIFT; in xdr_buf_pagecount()
116 xdr_alloc_bvec(struct xdr_buf *buf, gfp_t gfp) in xdr_alloc_bvec() argument
118 size_t i, n = xdr_buf_pagecount(buf); in xdr_alloc_bvec()
120 if (n != 0 && buf->bvec == NULL) { in xdr_alloc_bvec()
121 buf->bvec = kmalloc_array(n, sizeof(buf->bvec[0]), gfp); in xdr_alloc_bvec()
122 if (!buf->bvec) in xdr_alloc_bvec()
125 bvec_set_page(&buf->bvec[i], buf->pages[i], PAGE_SIZE, in xdr_alloc_bvec()
133 xdr_free_bvec(struct xdr_buf *buf) in xdr_free_bvec() argument
135 kfree(buf->bvec); in xdr_free_bvec()
136 buf->bvec = NULL; in xdr_free_bvec()
205 char *buf = (char *)head->iov_base; in xdr_inline_pages() local
214 tail->iov_base = buf + offset; in xdr_inline_pages()
463 static void xdr_buf_pages_zero(const struct xdr_buf *buf, unsigned int pgbase, in xdr_buf_pages_zero() argument
466 struct page **pages = buf->pages; in xdr_buf_pages_zero()
473 if (pgbase >= buf->page_len) { in xdr_buf_pages_zero()
474 xdr_buf_iov_zero(buf->tail, pgbase - buf->page_len, len); in xdr_buf_pages_zero()
477 if (pgbase + len > buf->page_len) { in xdr_buf_pages_zero()
478 xdr_buf_iov_zero(buf->tail, 0, pgbase + len - buf->page_len); in xdr_buf_pages_zero()
479 len = buf->page_len - pgbase; in xdr_buf_pages_zero()
482 pgbase += buf->page_base; in xdr_buf_pages_zero()
503 static unsigned int xdr_buf_pages_fill_sparse(const struct xdr_buf *buf, in xdr_buf_pages_fill_sparse() argument
508 if (!(buf->flags & XDRBUF_SPARSE_PAGES)) in xdr_buf_pages_fill_sparse()
510 if (buflen <= buf->head->iov_len) in xdr_buf_pages_fill_sparse()
512 pagelen = buflen - buf->head->iov_len; in xdr_buf_pages_fill_sparse()
513 if (pagelen > buf->page_len) in xdr_buf_pages_fill_sparse()
514 pagelen = buf->page_len; in xdr_buf_pages_fill_sparse()
515 npages = (pagelen + buf->page_base + PAGE_SIZE - 1) >> PAGE_SHIFT; in xdr_buf_pages_fill_sparse()
517 if (!buf->pages[i]) in xdr_buf_pages_fill_sparse()
519 buf->pages[i] = alloc_page(gfp); in xdr_buf_pages_fill_sparse()
520 if (likely(buf->pages[i])) in xdr_buf_pages_fill_sparse()
524 if (pagelen > buf->page_base) in xdr_buf_pages_fill_sparse()
525 buflen += pagelen - buf->page_base; in xdr_buf_pages_fill_sparse()
531 static void xdr_buf_try_expand(struct xdr_buf *buf, unsigned int len) in xdr_buf_try_expand() argument
533 struct kvec *head = buf->head; in xdr_buf_try_expand()
534 struct kvec *tail = buf->tail; in xdr_buf_try_expand()
535 unsigned int sum = head->iov_len + buf->page_len + tail->iov_len; in xdr_buf_try_expand()
538 if (sum > buf->len) { in xdr_buf_try_expand()
539 free_space = min_t(unsigned int, sum - buf->len, len); in xdr_buf_try_expand()
540 newlen = xdr_buf_pages_fill_sparse(buf, buf->len + free_space, in xdr_buf_try_expand()
542 free_space = newlen - buf->len; in xdr_buf_try_expand()
543 buf->len = newlen; in xdr_buf_try_expand()
549 if (buf->buflen > sum) { in xdr_buf_try_expand()
551 free_space = min_t(unsigned int, buf->buflen - sum, len); in xdr_buf_try_expand()
553 buf->len += free_space; in xdr_buf_try_expand()
557 static void xdr_buf_tail_copy_right(const struct xdr_buf *buf, in xdr_buf_tail_copy_right() argument
561 const struct kvec *tail = buf->tail; in xdr_buf_tail_copy_right()
571 static void xdr_buf_pages_copy_right(const struct xdr_buf *buf, in xdr_buf_pages_copy_right() argument
575 const struct kvec *tail = buf->tail; in xdr_buf_pages_copy_right()
580 if (base >= buf->page_len) in xdr_buf_pages_copy_right()
582 if (len > buf->page_len - base) in xdr_buf_pages_copy_right()
583 len = buf->page_len - base; in xdr_buf_pages_copy_right()
584 if (to >= buf->page_len) { in xdr_buf_pages_copy_right()
585 tato = to - buf->page_len; in xdr_buf_pages_copy_right()
590 } else if (len + to >= buf->page_len) { in xdr_buf_pages_copy_right()
591 pglen = buf->page_len - to; in xdr_buf_pages_copy_right()
598 _copy_from_pages(tail->iov_base + tato, buf->pages, in xdr_buf_pages_copy_right()
599 buf->page_base + base + pglen, talen); in xdr_buf_pages_copy_right()
600 _shift_data_right_pages(buf->pages, buf->page_base + to, in xdr_buf_pages_copy_right()
601 buf->page_base + base, pglen); in xdr_buf_pages_copy_right()
604 static void xdr_buf_head_copy_right(const struct xdr_buf *buf, in xdr_buf_head_copy_right() argument
608 const struct kvec *head = buf->head; in xdr_buf_head_copy_right()
609 const struct kvec *tail = buf->tail; in xdr_buf_head_copy_right()
618 if (to >= buf->page_len + head->iov_len) { in xdr_buf_head_copy_right()
619 tato = to - buf->page_len - head->iov_len; in xdr_buf_head_copy_right()
624 if (pgto + pglen > buf->page_len) { in xdr_buf_head_copy_right()
625 talen = pgto + pglen - buf->page_len; in xdr_buf_head_copy_right()
630 if (pglen > buf->page_len) { in xdr_buf_head_copy_right()
631 talen = pglen - buf->page_len; in xdr_buf_head_copy_right()
632 pglen = buf->page_len; in xdr_buf_head_copy_right()
644 _copy_to_pages(buf->pages, buf->page_base + pgto, head->iov_base + base, in xdr_buf_head_copy_right()
651 static void xdr_buf_tail_shift_right(const struct xdr_buf *buf, in xdr_buf_tail_shift_right() argument
655 const struct kvec *tail = buf->tail; in xdr_buf_tail_shift_right()
659 xdr_buf_tail_copy_right(buf, base, len, shift); in xdr_buf_tail_shift_right()
662 static void xdr_buf_pages_shift_right(const struct xdr_buf *buf, in xdr_buf_pages_shift_right() argument
668 if (base >= buf->page_len) { in xdr_buf_pages_shift_right()
669 xdr_buf_tail_shift_right(buf, base - buf->page_len, len, shift); in xdr_buf_pages_shift_right()
672 if (base + len > buf->page_len) in xdr_buf_pages_shift_right()
673 xdr_buf_tail_shift_right(buf, 0, base + len - buf->page_len, in xdr_buf_pages_shift_right()
675 xdr_buf_pages_copy_right(buf, base, len, shift); in xdr_buf_pages_shift_right()
678 static void xdr_buf_head_shift_right(const struct xdr_buf *buf, in xdr_buf_head_shift_right() argument
682 const struct kvec *head = buf->head; in xdr_buf_head_shift_right()
687 xdr_buf_pages_shift_right(buf, head->iov_len - base, len, in xdr_buf_head_shift_right()
692 xdr_buf_pages_shift_right(buf, 0, base + len - head->iov_len, in xdr_buf_head_shift_right()
694 xdr_buf_head_copy_right(buf, base, len, shift); in xdr_buf_head_shift_right()
697 static void xdr_buf_tail_copy_left(const struct xdr_buf *buf, unsigned int base, in xdr_buf_tail_copy_left() argument
700 const struct kvec *tail = buf->tail; in xdr_buf_tail_copy_left()
707 if (shift > buf->page_len + base) { in xdr_buf_tail_copy_left()
708 const struct kvec *head = buf->head; in xdr_buf_tail_copy_left()
710 head->iov_len + buf->page_len + base - shift; in xdr_buf_tail_copy_left()
713 if (WARN_ONCE(shift > head->iov_len + buf->page_len + base, in xdr_buf_tail_copy_left()
726 unsigned int pgto = buf->page_len + base - shift; in xdr_buf_tail_copy_left()
729 if (pgto + pglen > buf->page_len) in xdr_buf_tail_copy_left()
730 pglen = buf->page_len - pgto; in xdr_buf_tail_copy_left()
731 _copy_to_pages(buf->pages, buf->page_base + pgto, in xdr_buf_tail_copy_left()
741 static void xdr_buf_pages_copy_left(const struct xdr_buf *buf, in xdr_buf_pages_copy_left() argument
747 if (base >= buf->page_len) in xdr_buf_pages_copy_left()
749 if (len > buf->page_len - base) in xdr_buf_pages_copy_left()
750 len = buf->page_len - base; in xdr_buf_pages_copy_left()
753 const struct kvec *head = buf->head; in xdr_buf_pages_copy_left()
762 _copy_from_pages(head->iov_base + hdto, buf->pages, in xdr_buf_pages_copy_left()
763 buf->page_base + base, hdlen); in xdr_buf_pages_copy_left()
770 _shift_data_left_pages(buf->pages, buf->page_base + pgto, in xdr_buf_pages_copy_left()
771 buf->page_base + base, len); in xdr_buf_pages_copy_left()
774 static void xdr_buf_tail_shift_left(const struct xdr_buf *buf, in xdr_buf_tail_shift_left() argument
780 xdr_buf_tail_copy_left(buf, base, len, shift); in xdr_buf_tail_shift_left()
783 static void xdr_buf_pages_shift_left(const struct xdr_buf *buf, in xdr_buf_pages_shift_left() argument
789 if (base >= buf->page_len) { in xdr_buf_pages_shift_left()
790 xdr_buf_tail_shift_left(buf, base - buf->page_len, len, shift); in xdr_buf_pages_shift_left()
793 xdr_buf_pages_copy_left(buf, base, len, shift); in xdr_buf_pages_shift_left()
795 if (len <= buf->page_len) in xdr_buf_pages_shift_left()
797 xdr_buf_tail_copy_left(buf, 0, len - buf->page_len, shift); in xdr_buf_pages_shift_left()
800 static void xdr_buf_head_shift_left(const struct xdr_buf *buf, in xdr_buf_head_shift_left() argument
804 const struct kvec *head = buf->head; in xdr_buf_head_shift_left()
825 xdr_buf_pages_shift_left(buf, base - head->iov_len, len, shift); in xdr_buf_head_shift_left()
837 static unsigned int xdr_shrink_bufhead(struct xdr_buf *buf, unsigned int len) in xdr_shrink_bufhead() argument
839 struct kvec *head = buf->head; in xdr_shrink_bufhead()
840 unsigned int shift, buflen = max(buf->len, len); in xdr_shrink_bufhead()
844 buf->buflen -= head->iov_len - buflen; in xdr_shrink_bufhead()
850 xdr_buf_try_expand(buf, shift); in xdr_shrink_bufhead()
851 xdr_buf_head_shift_right(buf, len, buflen - len, shift); in xdr_shrink_bufhead()
853 buf->buflen -= shift; in xdr_shrink_bufhead()
854 buf->len -= shift; in xdr_shrink_bufhead()
866 static unsigned int xdr_shrink_pagelen(struct xdr_buf *buf, unsigned int len) in xdr_shrink_pagelen() argument
868 unsigned int shift, buflen = buf->len - buf->head->iov_len; in xdr_shrink_pagelen()
870 WARN_ON_ONCE(len > buf->page_len); in xdr_shrink_pagelen()
871 if (buf->head->iov_len >= buf->len || len > buflen) in xdr_shrink_pagelen()
873 if (buf->page_len > buflen) { in xdr_shrink_pagelen()
874 buf->buflen -= buf->page_len - buflen; in xdr_shrink_pagelen()
875 buf->page_len = buflen; in xdr_shrink_pagelen()
877 if (len >= buf->page_len) in xdr_shrink_pagelen()
879 shift = buf->page_len - len; in xdr_shrink_pagelen()
880 xdr_buf_try_expand(buf, shift); in xdr_shrink_pagelen()
881 xdr_buf_pages_shift_right(buf, len, buflen - len, shift); in xdr_shrink_pagelen()
882 buf->page_len = len; in xdr_shrink_pagelen()
883 buf->len -= shift; in xdr_shrink_pagelen()
884 buf->buflen -= shift; in xdr_shrink_pagelen()
894 return (unsigned int)(XDR_QUADLEN(xdr->buf->len) - xdr->nwords) << 2; in xdr_stream_pos()
900 unsigned int blen = xdr->buf->len; in xdr_stream_set_pos()
907 xdr_stream_set_pos(xdr, pos + xdr->buf->head[0].iov_len); in xdr_stream_page_set_pos()
918 WARN_ON(pos < xdr->buf->head[0].iov_len); in xdr_page_pos()
919 return pos - xdr->buf->head[0].iov_len; in xdr_page_pos()
937 void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, in xdr_init_encode() argument
940 struct kvec *iov = buf->head; in xdr_init_encode()
941 int scratch_len = buf->buflen - buf->page_len - buf->tail[0].iov_len; in xdr_init_encode()
945 xdr->buf = buf; in xdr_init_encode()
957 buf->len += len; in xdr_init_encode()
970 void xdr_init_encode_pages(struct xdr_stream *xdr, struct xdr_buf *buf) in xdr_init_encode_pages() argument
974 xdr->buf = buf; in xdr_init_encode_pages()
975 xdr->page_ptr = buf->pages; in xdr_init_encode_pages()
978 xdr->end = (void *)xdr->p + min_t(u32, buf->buflen, PAGE_SIZE); in xdr_init_encode_pages()
1022 if (xdr->buf->len + nbytes > xdr->buf->buflen) in xdr_get_next_encode_buffer()
1029 xdr->buf->page_len += frag1bytes; in xdr_get_next_encode_buffer()
1048 space_left = xdr->buf->buflen - xdr->buf->len; in xdr_get_next_encode_buffer()
1054 xdr->buf->page_len += frag2bytes; in xdr_get_next_encode_buffer()
1055 xdr->buf->len += nbytes; in xdr_get_next_encode_buffer()
1093 xdr->buf->page_len += nbytes; in xdr_reserve_space()
1094 xdr->buf->len += nbytes; in xdr_reserve_space()
1121 if (xdr->iov == xdr->buf->head) { in xdr_reserve_space_vec()
1128 thislen = xdr->buf->page_len % PAGE_SIZE; in xdr_reserve_space_vec()
1163 struct xdr_buf *buf = xdr->buf; in xdr_truncate_encode() local
1164 struct kvec *head = buf->head; in xdr_truncate_encode()
1165 struct kvec *tail = buf->tail; in xdr_truncate_encode()
1169 if (len > buf->len) { in xdr_truncate_encode()
1175 fraglen = min_t(int, buf->len - len, tail->iov_len); in xdr_truncate_encode()
1177 buf->len -= fraglen; in xdr_truncate_encode()
1185 fraglen = min_t(int, buf->len - len, buf->page_len); in xdr_truncate_encode()
1186 buf->page_len -= fraglen; in xdr_truncate_encode()
1187 buf->len -= fraglen; in xdr_truncate_encode()
1189 new = buf->page_base + buf->page_len; in xdr_truncate_encode()
1191 xdr->page_ptr = buf->pages + (new >> PAGE_SHIFT); in xdr_truncate_encode()
1193 if (buf->page_len) { in xdr_truncate_encode()
1205 buf->len = len; in xdr_truncate_encode()
1207 xdr->iov = buf->head; in xdr_truncate_encode()
1221 xdr->buf->len -= nbytes; in xdr_truncate_decode()
1240 struct xdr_buf *buf = xdr->buf; in xdr_restrict_buflen() local
1242 int end_offset = buf->len + left_in_this_buf; in xdr_restrict_buflen()
1244 if (newbuflen < 0 || newbuflen < buf->len) in xdr_restrict_buflen()
1246 if (newbuflen > buf->buflen) in xdr_restrict_buflen()
1250 buf->buflen = newbuflen; in xdr_restrict_buflen()
1269 struct xdr_buf *buf = xdr->buf; in xdr_write_pages() local
1270 struct kvec *tail = buf->tail; in xdr_write_pages()
1272 buf->pages = pages; in xdr_write_pages()
1273 buf->page_base = base; in xdr_write_pages()
1274 buf->page_len = len; in xdr_write_pages()
1289 buf->buflen += len; in xdr_write_pages()
1290 buf->len += len; in xdr_write_pages()
1311 struct xdr_buf *buf = xdr->buf; in xdr_set_tail_base() local
1313 xdr_stream_set_pos(xdr, base + buf->page_len + buf->head->iov_len); in xdr_set_tail_base()
1314 return xdr_set_iov(xdr, buf->tail, base, len); in xdr_set_tail_base()
1334 maxlen = xdr->buf->page_len; in xdr_set_page_base()
1344 base += xdr->buf->page_base; in xdr_set_page_base()
1347 xdr->page_ptr = &xdr->buf->pages[pgnr]; in xdr_set_page_base()
1370 base -= xdr->buf->page_len; in xdr_set_page()
1379 newbase = (1 + xdr->page_ptr - xdr->buf->pages) << PAGE_SHIFT; in xdr_set_next_page()
1380 newbase -= xdr->buf->page_base; in xdr_set_next_page()
1381 if (newbase < xdr->buf->page_len) in xdr_set_next_page()
1391 else if (xdr->iov == xdr->buf->head) in xdr_set_next_buffer()
1403 void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, in xdr_init_decode() argument
1406 xdr->buf = buf; in xdr_init_decode()
1409 xdr->nwords = XDR_QUADLEN(buf->len); in xdr_init_decode()
1410 if (xdr_set_iov(xdr, buf->head, 0, buf->len) == 0 && in xdr_init_decode()
1411 xdr_set_page_base(xdr, 0, buf->len) == 0) in xdr_init_decode()
1412 xdr_set_iov(xdr, buf->tail, 0, buf->len); in xdr_init_decode()
1428 void xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf, in xdr_init_decode_pages() argument
1431 memset(buf, 0, sizeof(*buf)); in xdr_init_decode_pages()
1432 buf->pages = pages; in xdr_init_decode_pages()
1433 buf->page_len = len; in xdr_init_decode_pages()
1434 buf->buflen = len; in xdr_init_decode_pages()
1435 buf->len = len; in xdr_init_decode_pages()
1436 xdr_init_decode(xdr, buf, NULL, NULL); in xdr_init_decode_pages()
1519 struct xdr_buf *buf = xdr->buf; in xdr_realign_pages() local
1520 struct kvec *iov = buf->head; in xdr_realign_pages()
1526 copied = xdr_shrink_bufhead(buf, cur); in xdr_realign_pages()
1528 xdr_set_page(xdr, 0, buf->page_len); in xdr_realign_pages()
1534 struct xdr_buf *buf = xdr->buf; in xdr_align_pages() local
1546 if (buf->page_len <= len) in xdr_align_pages()
1547 len = buf->page_len; in xdr_align_pages()
1550 copied = xdr_shrink_pagelen(buf, len); in xdr_align_pages()
1598 struct xdr_buf *buf = xdr->buf; in xdr_set_pagelen() local
1602 if (len < buf->page_len) { in xdr_set_pagelen()
1603 base = buf->page_len - len; in xdr_set_pagelen()
1604 xdr_shrink_pagelen(buf, len); in xdr_set_pagelen()
1606 xdr_buf_head_shift_right(buf, xdr_stream_pos(xdr), in xdr_set_pagelen()
1607 buf->page_len, remaining); in xdr_set_pagelen()
1608 if (len > buf->page_len) in xdr_set_pagelen()
1609 xdr_buf_try_expand(buf, len - buf->page_len); in xdr_set_pagelen()
1639 void xdr_buf_from_iov(const struct kvec *iov, struct xdr_buf *buf) in xdr_buf_from_iov() argument
1641 buf->head[0] = *iov; in xdr_buf_from_iov()
1642 buf->tail[0] = empty_iov; in xdr_buf_from_iov()
1643 buf->page_len = 0; in xdr_buf_from_iov()
1644 buf->buflen = buf->len = iov->iov_len; in xdr_buf_from_iov()
1662 int xdr_buf_subsegment(const struct xdr_buf *buf, struct xdr_buf *subbuf, in xdr_buf_subsegment() argument
1666 if (base < buf->head[0].iov_len) { in xdr_buf_subsegment()
1667 subbuf->head[0].iov_base = buf->head[0].iov_base + base; in xdr_buf_subsegment()
1669 buf->head[0].iov_len - base); in xdr_buf_subsegment()
1673 base -= buf->head[0].iov_len; in xdr_buf_subsegment()
1674 subbuf->head[0].iov_base = buf->head[0].iov_base; in xdr_buf_subsegment()
1678 if (base < buf->page_len) { in xdr_buf_subsegment()
1679 subbuf->page_len = min(buf->page_len - base, len); in xdr_buf_subsegment()
1680 base += buf->page_base; in xdr_buf_subsegment()
1682 subbuf->pages = &buf->pages[base >> PAGE_SHIFT]; in xdr_buf_subsegment()
1686 base -= buf->page_len; in xdr_buf_subsegment()
1687 subbuf->pages = buf->pages; in xdr_buf_subsegment()
1692 if (base < buf->tail[0].iov_len) { in xdr_buf_subsegment()
1693 subbuf->tail[0].iov_base = buf->tail[0].iov_base + base; in xdr_buf_subsegment()
1695 buf->tail[0].iov_len - base); in xdr_buf_subsegment()
1699 base -= buf->tail[0].iov_len; in xdr_buf_subsegment()
1700 subbuf->tail[0].iov_base = buf->tail[0].iov_base; in xdr_buf_subsegment()
1732 if (xdr_buf_subsegment(xdr->buf, subbuf, start, nbytes)) in xdr_stream_subsegment()
1770 struct xdr_buf buf; in xdr_stream_move_subsegment() local
1775 if (xdr_buf_subsegment(xdr->buf, &buf, offset, shift + length) < 0) in xdr_stream_move_subsegment()
1777 xdr_buf_head_shift_right(&buf, 0, length, shift); in xdr_stream_move_subsegment()
1780 if (xdr_buf_subsegment(xdr->buf, &buf, target, shift + length) < 0) in xdr_stream_move_subsegment()
1782 xdr_buf_head_shift_left(&buf, shift, length, shift); in xdr_stream_move_subsegment()
1797 struct xdr_buf buf; in xdr_stream_zero() local
1799 if (xdr_buf_subsegment(xdr->buf, &buf, offset, length) < 0) in xdr_stream_zero()
1801 if (buf.head[0].iov_len) in xdr_stream_zero()
1802 xdr_buf_iov_zero(buf.head, 0, buf.head[0].iov_len); in xdr_stream_zero()
1803 if (buf.page_len > 0) in xdr_stream_zero()
1804 xdr_buf_pages_zero(&buf, 0, buf.page_len); in xdr_stream_zero()
1805 if (buf.tail[0].iov_len) in xdr_stream_zero()
1806 xdr_buf_iov_zero(buf.tail, 0, buf.tail[0].iov_len); in xdr_stream_zero()
1821 void xdr_buf_trim(struct xdr_buf *buf, unsigned int len) in xdr_buf_trim() argument
1826 if (buf->tail[0].iov_len) { in xdr_buf_trim()
1827 cur = min_t(size_t, buf->tail[0].iov_len, trim); in xdr_buf_trim()
1828 buf->tail[0].iov_len -= cur; in xdr_buf_trim()
1834 if (buf->page_len) { in xdr_buf_trim()
1835 cur = min_t(unsigned int, buf->page_len, trim); in xdr_buf_trim()
1836 buf->page_len -= cur; in xdr_buf_trim()
1842 if (buf->head[0].iov_len) { in xdr_buf_trim()
1843 cur = min_t(size_t, buf->head[0].iov_len, trim); in xdr_buf_trim()
1844 buf->head[0].iov_len -= cur; in xdr_buf_trim()
1848 buf->len -= (len - trim); in xdr_buf_trim()
1870 int read_bytes_from_xdr_buf(const struct xdr_buf *buf, unsigned int base, in read_bytes_from_xdr_buf() argument
1876 status = xdr_buf_subsegment(buf, &subbuf, base, len); in read_bytes_from_xdr_buf()
1902 int write_bytes_to_xdr_buf(const struct xdr_buf *buf, unsigned int base, in write_bytes_to_xdr_buf() argument
1908 status = xdr_buf_subsegment(buf, &subbuf, base, len); in write_bytes_to_xdr_buf()
1916 int xdr_decode_word(const struct xdr_buf *buf, unsigned int base, u32 *obj) in xdr_decode_word() argument
1921 status = read_bytes_from_xdr_buf(buf, base, &raw, sizeof(*obj)); in xdr_decode_word()
1929 int xdr_encode_word(const struct xdr_buf *buf, unsigned int base, u32 obj) in xdr_encode_word() argument
1933 return write_bytes_to_xdr_buf(buf, base, &raw, sizeof(obj)); in xdr_encode_word()
1938 static int xdr_xcode_array2(const struct xdr_buf *buf, unsigned int base, in xdr_xcode_array2() argument
1947 if (xdr_encode_word(buf, base, desc->array_len) != 0) in xdr_xcode_array2()
1950 if (xdr_decode_word(buf, base, &desc->array_len) != 0 || in xdr_xcode_array2()
1953 desc->elem_size > buf->len) in xdr_xcode_array2()
1964 if (todo && base < buf->head->iov_len) { in xdr_xcode_array2()
1965 c = buf->head->iov_base + base; in xdr_xcode_array2()
1967 buf->head->iov_len - base); in xdr_xcode_array2()
1993 base = buf->head->iov_len; /* align to start of pages */ in xdr_xcode_array2()
1997 base -= buf->head->iov_len; in xdr_xcode_array2()
1998 if (todo && base < buf->page_len) { in xdr_xcode_array2()
2001 avail_here = min(todo, buf->page_len - base); in xdr_xcode_array2()
2004 base += buf->page_base; in xdr_xcode_array2()
2005 ppages = buf->pages + (base >> PAGE_SHIFT); in xdr_xcode_array2()
2093 base = buf->page_len; /* align to start of tail */ in xdr_xcode_array2()
2097 base -= buf->page_len; in xdr_xcode_array2()
2099 c = buf->tail->iov_base + base; in xdr_xcode_array2()
2131 int xdr_decode_array2(const struct xdr_buf *buf, unsigned int base, in xdr_decode_array2() argument
2134 if (base >= buf->len) in xdr_decode_array2()
2137 return xdr_xcode_array2(buf, base, desc, 0); in xdr_decode_array2()
2141 int xdr_encode_array2(const struct xdr_buf *buf, unsigned int base, in xdr_encode_array2() argument
2145 buf->head->iov_len + buf->page_len + buf->tail->iov_len) in xdr_encode_array2()
2148 return xdr_xcode_array2(buf, base, desc, 1); in xdr_encode_array2()
2152 int xdr_process_buf(const struct xdr_buf *buf, unsigned int offset, in xdr_process_buf() argument
2162 if (offset >= buf->head[0].iov_len) { in xdr_process_buf()
2163 offset -= buf->head[0].iov_len; in xdr_process_buf()
2165 thislen = buf->head[0].iov_len - offset; in xdr_process_buf()
2168 sg_set_buf(sg, buf->head[0].iov_base + offset, thislen); in xdr_process_buf()
2178 if (offset >= buf->page_len) { in xdr_process_buf()
2179 offset -= buf->page_len; in xdr_process_buf()
2181 page_len = buf->page_len - offset; in xdr_process_buf()
2185 page_offset = (offset + buf->page_base) & (PAGE_SIZE - 1); in xdr_process_buf()
2186 i = (offset + buf->page_base) >> PAGE_SHIFT; in xdr_process_buf()
2191 sg_set_page(sg, buf->pages[i], thislen, page_offset); in xdr_process_buf()
2204 if (offset < buf->tail[0].iov_len) { in xdr_process_buf()
2205 thislen = buf->tail[0].iov_len - offset; in xdr_process_buf()
2208 sg_set_buf(sg, buf->tail[0].iov_base + offset, thislen); in xdr_process_buf()