Lines Matching refs:buf

126 void xdr_terminate_string(const struct xdr_buf *buf, const u32 len)  in xdr_terminate_string()  argument
130 kaddr = kmap_atomic(buf->pages[0]); in xdr_terminate_string()
131 kaddr[buf->page_base + len] = '\0'; in xdr_terminate_string()
136 size_t xdr_buf_pagecount(const struct xdr_buf *buf) in xdr_buf_pagecount() argument
138 if (!buf->page_len) in xdr_buf_pagecount()
140 return (buf->page_base + buf->page_len + PAGE_SIZE - 1) >> PAGE_SHIFT; in xdr_buf_pagecount()
144 xdr_alloc_bvec(struct xdr_buf *buf, gfp_t gfp) in xdr_alloc_bvec() argument
146 size_t i, n = xdr_buf_pagecount(buf); in xdr_alloc_bvec()
148 if (n != 0 && buf->bvec == NULL) { in xdr_alloc_bvec()
149 buf->bvec = kmalloc_array(n, sizeof(buf->bvec[0]), gfp); in xdr_alloc_bvec()
150 if (!buf->bvec) in xdr_alloc_bvec()
153 buf->bvec[i].bv_page = buf->pages[i]; in xdr_alloc_bvec()
154 buf->bvec[i].bv_len = PAGE_SIZE; in xdr_alloc_bvec()
155 buf->bvec[i].bv_offset = 0; in xdr_alloc_bvec()
162 xdr_free_bvec(struct xdr_buf *buf) in xdr_free_bvec() argument
164 kfree(buf->bvec); in xdr_free_bvec()
165 buf->bvec = NULL; in xdr_free_bvec()
183 char *buf = (char *)head->iov_base; in xdr_inline_pages() local
192 tail->iov_base = buf + offset; in xdr_inline_pages()
441 static void xdr_buf_pages_zero(const struct xdr_buf *buf, unsigned int pgbase, in xdr_buf_pages_zero() argument
444 struct page **pages = buf->pages; in xdr_buf_pages_zero()
451 if (pgbase >= buf->page_len) { in xdr_buf_pages_zero()
452 xdr_buf_iov_zero(buf->tail, pgbase - buf->page_len, len); in xdr_buf_pages_zero()
455 if (pgbase + len > buf->page_len) { in xdr_buf_pages_zero()
456 xdr_buf_iov_zero(buf->tail, 0, pgbase + len - buf->page_len); in xdr_buf_pages_zero()
457 len = buf->page_len - pgbase; in xdr_buf_pages_zero()
460 pgbase += buf->page_base; in xdr_buf_pages_zero()
481 static unsigned int xdr_buf_pages_fill_sparse(const struct xdr_buf *buf, in xdr_buf_pages_fill_sparse() argument
486 if (!(buf->flags & XDRBUF_SPARSE_PAGES)) in xdr_buf_pages_fill_sparse()
488 if (buflen <= buf->head->iov_len) in xdr_buf_pages_fill_sparse()
490 pagelen = buflen - buf->head->iov_len; in xdr_buf_pages_fill_sparse()
491 if (pagelen > buf->page_len) in xdr_buf_pages_fill_sparse()
492 pagelen = buf->page_len; in xdr_buf_pages_fill_sparse()
493 npages = (pagelen + buf->page_base + PAGE_SIZE - 1) >> PAGE_SHIFT; in xdr_buf_pages_fill_sparse()
495 if (!buf->pages[i]) in xdr_buf_pages_fill_sparse()
497 buf->pages[i] = alloc_page(gfp); in xdr_buf_pages_fill_sparse()
498 if (likely(buf->pages[i])) in xdr_buf_pages_fill_sparse()
502 if (pagelen > buf->page_base) in xdr_buf_pages_fill_sparse()
503 buflen += pagelen - buf->page_base; in xdr_buf_pages_fill_sparse()
509 static void xdr_buf_try_expand(struct xdr_buf *buf, unsigned int len) in xdr_buf_try_expand() argument
511 struct kvec *head = buf->head; in xdr_buf_try_expand()
512 struct kvec *tail = buf->tail; in xdr_buf_try_expand()
513 unsigned int sum = head->iov_len + buf->page_len + tail->iov_len; in xdr_buf_try_expand()
516 if (sum > buf->len) { in xdr_buf_try_expand()
517 free_space = min_t(unsigned int, sum - buf->len, len); in xdr_buf_try_expand()
518 newlen = xdr_buf_pages_fill_sparse(buf, buf->len + free_space, in xdr_buf_try_expand()
520 free_space = newlen - buf->len; in xdr_buf_try_expand()
521 buf->len = newlen; in xdr_buf_try_expand()
527 if (buf->buflen > sum) { in xdr_buf_try_expand()
529 free_space = min_t(unsigned int, buf->buflen - sum, len); in xdr_buf_try_expand()
531 buf->len += free_space; in xdr_buf_try_expand()
535 static void xdr_buf_tail_copy_right(const struct xdr_buf *buf, in xdr_buf_tail_copy_right() argument
539 const struct kvec *tail = buf->tail; in xdr_buf_tail_copy_right()
549 static void xdr_buf_pages_copy_right(const struct xdr_buf *buf, in xdr_buf_pages_copy_right() argument
553 const struct kvec *tail = buf->tail; in xdr_buf_pages_copy_right()
558 if (base >= buf->page_len) in xdr_buf_pages_copy_right()
560 if (len > buf->page_len - base) in xdr_buf_pages_copy_right()
561 len = buf->page_len - base; in xdr_buf_pages_copy_right()
562 if (to >= buf->page_len) { in xdr_buf_pages_copy_right()
563 tato = to - buf->page_len; in xdr_buf_pages_copy_right()
568 } else if (len + to >= buf->page_len) { in xdr_buf_pages_copy_right()
569 pglen = buf->page_len - to; in xdr_buf_pages_copy_right()
576 _copy_from_pages(tail->iov_base + tato, buf->pages, in xdr_buf_pages_copy_right()
577 buf->page_base + base + pglen, talen); in xdr_buf_pages_copy_right()
578 _shift_data_right_pages(buf->pages, buf->page_base + to, in xdr_buf_pages_copy_right()
579 buf->page_base + base, pglen); in xdr_buf_pages_copy_right()
582 static void xdr_buf_head_copy_right(const struct xdr_buf *buf, in xdr_buf_head_copy_right() argument
586 const struct kvec *head = buf->head; in xdr_buf_head_copy_right()
587 const struct kvec *tail = buf->tail; in xdr_buf_head_copy_right()
596 if (to >= buf->page_len + head->iov_len) { in xdr_buf_head_copy_right()
597 tato = to - buf->page_len - head->iov_len; in xdr_buf_head_copy_right()
602 if (pgto + pglen > buf->page_len) { in xdr_buf_head_copy_right()
603 talen = pgto + pglen - buf->page_len; in xdr_buf_head_copy_right()
608 if (pglen > buf->page_len) { in xdr_buf_head_copy_right()
609 talen = pglen - buf->page_len; in xdr_buf_head_copy_right()
610 pglen = buf->page_len; in xdr_buf_head_copy_right()
622 _copy_to_pages(buf->pages, buf->page_base + pgto, head->iov_base + base, in xdr_buf_head_copy_right()
629 static void xdr_buf_tail_shift_right(const struct xdr_buf *buf, in xdr_buf_tail_shift_right() argument
633 const struct kvec *tail = buf->tail; in xdr_buf_tail_shift_right()
637 xdr_buf_tail_copy_right(buf, base, len, shift); in xdr_buf_tail_shift_right()
640 static void xdr_buf_pages_shift_right(const struct xdr_buf *buf, in xdr_buf_pages_shift_right() argument
646 if (base >= buf->page_len) { in xdr_buf_pages_shift_right()
647 xdr_buf_tail_shift_right(buf, base - buf->page_len, len, shift); in xdr_buf_pages_shift_right()
650 if (base + len > buf->page_len) in xdr_buf_pages_shift_right()
651 xdr_buf_tail_shift_right(buf, 0, base + len - buf->page_len, in xdr_buf_pages_shift_right()
653 xdr_buf_pages_copy_right(buf, base, len, shift); in xdr_buf_pages_shift_right()
656 static void xdr_buf_head_shift_right(const struct xdr_buf *buf, in xdr_buf_head_shift_right() argument
660 const struct kvec *head = buf->head; in xdr_buf_head_shift_right()
665 xdr_buf_pages_shift_right(buf, head->iov_len - base, len, in xdr_buf_head_shift_right()
670 xdr_buf_pages_shift_right(buf, 0, base + len - head->iov_len, in xdr_buf_head_shift_right()
672 xdr_buf_head_copy_right(buf, base, len, shift); in xdr_buf_head_shift_right()
675 static void xdr_buf_tail_copy_left(const struct xdr_buf *buf, unsigned int base, in xdr_buf_tail_copy_left() argument
678 const struct kvec *tail = buf->tail; in xdr_buf_tail_copy_left()
685 if (shift > buf->page_len + base) { in xdr_buf_tail_copy_left()
686 const struct kvec *head = buf->head; in xdr_buf_tail_copy_left()
688 head->iov_len + buf->page_len + base - shift; in xdr_buf_tail_copy_left()
691 if (WARN_ONCE(shift > head->iov_len + buf->page_len + base, in xdr_buf_tail_copy_left()
704 unsigned int pgto = buf->page_len + base - shift; in xdr_buf_tail_copy_left()
707 if (pgto + pglen > buf->page_len) in xdr_buf_tail_copy_left()
708 pglen = buf->page_len - pgto; in xdr_buf_tail_copy_left()
709 _copy_to_pages(buf->pages, buf->page_base + pgto, in xdr_buf_tail_copy_left()
719 static void xdr_buf_pages_copy_left(const struct xdr_buf *buf, in xdr_buf_pages_copy_left() argument
725 if (base >= buf->page_len) in xdr_buf_pages_copy_left()
727 if (len > buf->page_len - base) in xdr_buf_pages_copy_left()
728 len = buf->page_len - base; in xdr_buf_pages_copy_left()
731 const struct kvec *head = buf->head; in xdr_buf_pages_copy_left()
740 _copy_from_pages(head->iov_base + hdto, buf->pages, in xdr_buf_pages_copy_left()
741 buf->page_base + base, hdlen); in xdr_buf_pages_copy_left()
748 _shift_data_left_pages(buf->pages, buf->page_base + pgto, in xdr_buf_pages_copy_left()
749 buf->page_base + base, len); in xdr_buf_pages_copy_left()
752 static void xdr_buf_tail_shift_left(const struct xdr_buf *buf, in xdr_buf_tail_shift_left() argument
758 xdr_buf_tail_copy_left(buf, base, len, shift); in xdr_buf_tail_shift_left()
761 static void xdr_buf_pages_shift_left(const struct xdr_buf *buf, in xdr_buf_pages_shift_left() argument
767 if (base >= buf->page_len) { in xdr_buf_pages_shift_left()
768 xdr_buf_tail_shift_left(buf, base - buf->page_len, len, shift); in xdr_buf_pages_shift_left()
771 xdr_buf_pages_copy_left(buf, base, len, shift); in xdr_buf_pages_shift_left()
773 if (len <= buf->page_len) in xdr_buf_pages_shift_left()
775 xdr_buf_tail_copy_left(buf, 0, len - buf->page_len, shift); in xdr_buf_pages_shift_left()
787 static unsigned int xdr_shrink_bufhead(struct xdr_buf *buf, unsigned int len) in xdr_shrink_bufhead() argument
789 struct kvec *head = buf->head; in xdr_shrink_bufhead()
790 unsigned int shift, buflen = max(buf->len, len); in xdr_shrink_bufhead()
794 buf->buflen -= head->iov_len - buflen; in xdr_shrink_bufhead()
800 xdr_buf_try_expand(buf, shift); in xdr_shrink_bufhead()
801 xdr_buf_head_shift_right(buf, len, buflen - len, shift); in xdr_shrink_bufhead()
803 buf->buflen -= shift; in xdr_shrink_bufhead()
804 buf->len -= shift; in xdr_shrink_bufhead()
816 static unsigned int xdr_shrink_pagelen(struct xdr_buf *buf, unsigned int len) in xdr_shrink_pagelen() argument
818 unsigned int shift, buflen = buf->len - buf->head->iov_len; in xdr_shrink_pagelen()
820 WARN_ON_ONCE(len > buf->page_len); in xdr_shrink_pagelen()
821 if (buf->head->iov_len >= buf->len || len > buflen) in xdr_shrink_pagelen()
823 if (buf->page_len > buflen) { in xdr_shrink_pagelen()
824 buf->buflen -= buf->page_len - buflen; in xdr_shrink_pagelen()
825 buf->page_len = buflen; in xdr_shrink_pagelen()
827 if (len >= buf->page_len) in xdr_shrink_pagelen()
829 shift = buf->page_len - len; in xdr_shrink_pagelen()
830 xdr_buf_try_expand(buf, shift); in xdr_shrink_pagelen()
831 xdr_buf_pages_shift_right(buf, len, buflen - len, shift); in xdr_shrink_pagelen()
832 buf->page_len = len; in xdr_shrink_pagelen()
833 buf->len -= shift; in xdr_shrink_pagelen()
834 buf->buflen -= shift; in xdr_shrink_pagelen()
839 xdr_shift_buf(struct xdr_buf *buf, size_t len) in xdr_shift_buf() argument
841 xdr_shrink_bufhead(buf, buf->head->iov_len - len); in xdr_shift_buf()
851 return (unsigned int)(XDR_QUADLEN(xdr->buf->len) - xdr->nwords) << 2; in xdr_stream_pos()
857 unsigned int blen = xdr->buf->len; in xdr_stream_set_pos()
864 xdr_stream_set_pos(xdr, pos + xdr->buf->head[0].iov_len); in xdr_stream_page_set_pos()
875 WARN_ON(pos < xdr->buf->head[0].iov_len); in xdr_page_pos()
876 return pos - xdr->buf->head[0].iov_len; in xdr_page_pos()
894 void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, in xdr_init_encode() argument
897 struct kvec *iov = buf->head; in xdr_init_encode()
898 int scratch_len = buf->buflen - buf->page_len - buf->tail[0].iov_len; in xdr_init_encode()
902 xdr->buf = buf; in xdr_init_encode()
914 buf->len += len; in xdr_init_encode()
957 if (xdr->buf->len + nbytes > xdr->buf->buflen) in xdr_get_next_encode_buffer()
964 xdr->buf->page_len += frag1bytes; in xdr_get_next_encode_buffer()
981 space_left = xdr->buf->buflen - xdr->buf->len; in xdr_get_next_encode_buffer()
983 xdr->buf->page_len += frag2bytes; in xdr_get_next_encode_buffer()
984 xdr->buf->len += nbytes; in xdr_get_next_encode_buffer()
1016 xdr->buf->page_len += nbytes; in xdr_reserve_space()
1017 xdr->buf->len += nbytes; in xdr_reserve_space()
1044 if (xdr->iov == xdr->buf->head) { in xdr_reserve_space_vec()
1050 thislen = xdr->buf->page_len % PAGE_SIZE; in xdr_reserve_space_vec()
1088 struct xdr_buf *buf = xdr->buf; in xdr_truncate_encode() local
1089 struct kvec *head = buf->head; in xdr_truncate_encode()
1090 struct kvec *tail = buf->tail; in xdr_truncate_encode()
1094 if (len > buf->len) { in xdr_truncate_encode()
1100 fraglen = min_t(int, buf->len - len, tail->iov_len); in xdr_truncate_encode()
1102 buf->len -= fraglen; in xdr_truncate_encode()
1110 fraglen = min_t(int, buf->len - len, buf->page_len); in xdr_truncate_encode()
1111 buf->page_len -= fraglen; in xdr_truncate_encode()
1112 buf->len -= fraglen; in xdr_truncate_encode()
1114 new = buf->page_base + buf->page_len; in xdr_truncate_encode()
1116 xdr->page_ptr = buf->pages + (new >> PAGE_SHIFT); in xdr_truncate_encode()
1118 if (buf->page_len) { in xdr_truncate_encode()
1130 buf->len = len; in xdr_truncate_encode()
1132 xdr->iov = buf->head; in xdr_truncate_encode()
1150 struct xdr_buf *buf = xdr->buf; in xdr_restrict_buflen() local
1152 int end_offset = buf->len + left_in_this_buf; in xdr_restrict_buflen()
1154 if (newbuflen < 0 || newbuflen < buf->len) in xdr_restrict_buflen()
1156 if (newbuflen > buf->buflen) in xdr_restrict_buflen()
1160 buf->buflen = newbuflen; in xdr_restrict_buflen()
1176 struct xdr_buf *buf = xdr->buf; in xdr_write_pages() local
1177 struct kvec *iov = buf->tail; in xdr_write_pages()
1178 buf->pages = pages; in xdr_write_pages()
1179 buf->page_base = base; in xdr_write_pages()
1180 buf->page_len = len; in xdr_write_pages()
1195 buf->buflen += len; in xdr_write_pages()
1196 buf->len += len; in xdr_write_pages()
1217 struct xdr_buf *buf = xdr->buf; in xdr_set_tail_base() local
1219 xdr_stream_set_pos(xdr, base + buf->page_len + buf->head->iov_len); in xdr_set_tail_base()
1220 return xdr_set_iov(xdr, buf->tail, base, len); in xdr_set_tail_base()
1232 maxlen = xdr->buf->page_len; in xdr_set_page_base()
1241 base += xdr->buf->page_base; in xdr_set_page_base()
1244 xdr->page_ptr = &xdr->buf->pages[pgnr]; in xdr_set_page_base()
1262 base -= xdr->buf->page_len; in xdr_set_page()
1271 newbase = (1 + xdr->page_ptr - xdr->buf->pages) << PAGE_SHIFT; in xdr_set_next_page()
1272 newbase -= xdr->buf->page_base; in xdr_set_next_page()
1273 if (newbase < xdr->buf->page_len) in xdr_set_next_page()
1283 else if (xdr->iov == xdr->buf->head) in xdr_set_next_buffer()
1295 void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, in xdr_init_decode() argument
1298 xdr->buf = buf; in xdr_init_decode()
1300 xdr->nwords = XDR_QUADLEN(buf->len); in xdr_init_decode()
1301 if (xdr_set_iov(xdr, buf->head, 0, buf->len) == 0 && in xdr_init_decode()
1302 xdr_set_page_base(xdr, 0, buf->len) == 0) in xdr_init_decode()
1303 xdr_set_iov(xdr, buf->tail, 0, buf->len); in xdr_init_decode()
1319 void xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf, in xdr_init_decode_pages() argument
1322 memset(buf, 0, sizeof(*buf)); in xdr_init_decode_pages()
1323 buf->pages = pages; in xdr_init_decode_pages()
1324 buf->page_len = len; in xdr_init_decode_pages()
1325 buf->buflen = len; in xdr_init_decode_pages()
1326 buf->len = len; in xdr_init_decode_pages()
1327 xdr_init_decode(xdr, buf, NULL, NULL); in xdr_init_decode_pages()
1400 struct xdr_buf *buf = xdr->buf; in xdr_realign_pages() local
1401 struct kvec *iov = buf->head; in xdr_realign_pages()
1407 copied = xdr_shrink_bufhead(buf, cur); in xdr_realign_pages()
1409 xdr_set_page(xdr, 0, buf->page_len); in xdr_realign_pages()
1415 struct xdr_buf *buf = xdr->buf; in xdr_align_pages() local
1427 if (buf->page_len <= len) in xdr_align_pages()
1428 len = buf->page_len; in xdr_align_pages()
1431 copied = xdr_shrink_pagelen(buf, len); in xdr_align_pages()
1469 struct xdr_buf *buf = xdr->buf; in xdr_align_data() local
1476 if (from >= buf->page_len + buf->tail->iov_len) in xdr_align_data()
1478 if (from + buf->head->iov_len >= buf->len) in xdr_align_data()
1481 len = buf->len - buf->head->iov_len; in xdr_align_data()
1487 if (WARN_ONCE(offset > buf->page_len, in xdr_align_data()
1489 offset, buf->page_len)) in xdr_align_data()
1494 xdr_buf_pages_shift_left(buf, from, len, shift); in xdr_align_data()
1501 xdr->buf->len -= shift; in xdr_align_data()
1510 struct xdr_buf *buf = xdr->buf; in xdr_expand_hole() local
1519 unsigned int buflen = buf->len - buf->head->iov_len; in xdr_expand_hole()
1521 xdr_buf_try_expand(buf, shift); in xdr_expand_hole()
1522 xdr_buf_pages_shift_right(buf, from, buflen, shift); in xdr_expand_hole()
1526 xdr_buf_pages_zero(buf, offset, length); in xdr_expand_hole()
1556 void xdr_buf_from_iov(const struct kvec *iov, struct xdr_buf *buf) in xdr_buf_from_iov() argument
1558 buf->head[0] = *iov; in xdr_buf_from_iov()
1559 buf->tail[0] = empty_iov; in xdr_buf_from_iov()
1560 buf->page_len = 0; in xdr_buf_from_iov()
1561 buf->buflen = buf->len = iov->iov_len; in xdr_buf_from_iov()
1579 int xdr_buf_subsegment(const struct xdr_buf *buf, struct xdr_buf *subbuf, in xdr_buf_subsegment() argument
1583 if (base < buf->head[0].iov_len) { in xdr_buf_subsegment()
1584 subbuf->head[0].iov_base = buf->head[0].iov_base + base; in xdr_buf_subsegment()
1586 buf->head[0].iov_len - base); in xdr_buf_subsegment()
1590 base -= buf->head[0].iov_len; in xdr_buf_subsegment()
1591 subbuf->head[0].iov_base = buf->head[0].iov_base; in xdr_buf_subsegment()
1595 if (base < buf->page_len) { in xdr_buf_subsegment()
1596 subbuf->page_len = min(buf->page_len - base, len); in xdr_buf_subsegment()
1597 base += buf->page_base; in xdr_buf_subsegment()
1599 subbuf->pages = &buf->pages[base >> PAGE_SHIFT]; in xdr_buf_subsegment()
1603 base -= buf->page_len; in xdr_buf_subsegment()
1604 subbuf->pages = buf->pages; in xdr_buf_subsegment()
1609 if (base < buf->tail[0].iov_len) { in xdr_buf_subsegment()
1610 subbuf->tail[0].iov_base = buf->tail[0].iov_base + base; in xdr_buf_subsegment()
1612 buf->tail[0].iov_len - base); in xdr_buf_subsegment()
1616 base -= buf->tail[0].iov_len; in xdr_buf_subsegment()
1617 subbuf->tail[0].iov_base = buf->tail[0].iov_base; in xdr_buf_subsegment()
1649 if (xdr_buf_subsegment(xdr->buf, subbuf, start, nbytes)) in xdr_stream_subsegment()
1684 void xdr_buf_trim(struct xdr_buf *buf, unsigned int len) in xdr_buf_trim() argument
1689 if (buf->tail[0].iov_len) { in xdr_buf_trim()
1690 cur = min_t(size_t, buf->tail[0].iov_len, trim); in xdr_buf_trim()
1691 buf->tail[0].iov_len -= cur; in xdr_buf_trim()
1697 if (buf->page_len) { in xdr_buf_trim()
1698 cur = min_t(unsigned int, buf->page_len, trim); in xdr_buf_trim()
1699 buf->page_len -= cur; in xdr_buf_trim()
1705 if (buf->head[0].iov_len) { in xdr_buf_trim()
1706 cur = min_t(size_t, buf->head[0].iov_len, trim); in xdr_buf_trim()
1707 buf->head[0].iov_len -= cur; in xdr_buf_trim()
1711 buf->len -= (len - trim); in xdr_buf_trim()
1733 int read_bytes_from_xdr_buf(const struct xdr_buf *buf, unsigned int base, in read_bytes_from_xdr_buf() argument
1739 status = xdr_buf_subsegment(buf, &subbuf, base, len); in read_bytes_from_xdr_buf()
1765 int write_bytes_to_xdr_buf(const struct xdr_buf *buf, unsigned int base, in write_bytes_to_xdr_buf() argument
1771 status = xdr_buf_subsegment(buf, &subbuf, base, len); in write_bytes_to_xdr_buf()
1779 int xdr_decode_word(const struct xdr_buf *buf, unsigned int base, u32 *obj) in xdr_decode_word() argument
1784 status = read_bytes_from_xdr_buf(buf, base, &raw, sizeof(*obj)); in xdr_decode_word()
1792 int xdr_encode_word(const struct xdr_buf *buf, unsigned int base, u32 obj) in xdr_encode_word() argument
1796 return write_bytes_to_xdr_buf(buf, base, &raw, sizeof(obj)); in xdr_encode_word()
1801 static int xdr_xcode_array2(const struct xdr_buf *buf, unsigned int base, in xdr_xcode_array2() argument
1810 if (xdr_encode_word(buf, base, desc->array_len) != 0) in xdr_xcode_array2()
1813 if (xdr_decode_word(buf, base, &desc->array_len) != 0 || in xdr_xcode_array2()
1816 desc->elem_size > buf->len) in xdr_xcode_array2()
1827 if (todo && base < buf->head->iov_len) { in xdr_xcode_array2()
1828 c = buf->head->iov_base + base; in xdr_xcode_array2()
1830 buf->head->iov_len - base); in xdr_xcode_array2()
1856 base = buf->head->iov_len; /* align to start of pages */ in xdr_xcode_array2()
1860 base -= buf->head->iov_len; in xdr_xcode_array2()
1861 if (todo && base < buf->page_len) { in xdr_xcode_array2()
1864 avail_here = min(todo, buf->page_len - base); in xdr_xcode_array2()
1867 base += buf->page_base; in xdr_xcode_array2()
1868 ppages = buf->pages + (base >> PAGE_SHIFT); in xdr_xcode_array2()
1956 base = buf->page_len; /* align to start of tail */ in xdr_xcode_array2()
1960 base -= buf->page_len; in xdr_xcode_array2()
1962 c = buf->tail->iov_base + base; in xdr_xcode_array2()
1994 int xdr_decode_array2(const struct xdr_buf *buf, unsigned int base, in xdr_decode_array2() argument
1997 if (base >= buf->len) in xdr_decode_array2()
2000 return xdr_xcode_array2(buf, base, desc, 0); in xdr_decode_array2()
2004 int xdr_encode_array2(const struct xdr_buf *buf, unsigned int base, in xdr_encode_array2() argument
2008 buf->head->iov_len + buf->page_len + buf->tail->iov_len) in xdr_encode_array2()
2011 return xdr_xcode_array2(buf, base, desc, 1); in xdr_encode_array2()
2015 int xdr_process_buf(const struct xdr_buf *buf, unsigned int offset, in xdr_process_buf() argument
2025 if (offset >= buf->head[0].iov_len) { in xdr_process_buf()
2026 offset -= buf->head[0].iov_len; in xdr_process_buf()
2028 thislen = buf->head[0].iov_len - offset; in xdr_process_buf()
2031 sg_set_buf(sg, buf->head[0].iov_base + offset, thislen); in xdr_process_buf()
2041 if (offset >= buf->page_len) { in xdr_process_buf()
2042 offset -= buf->page_len; in xdr_process_buf()
2044 page_len = buf->page_len - offset; in xdr_process_buf()
2048 page_offset = (offset + buf->page_base) & (PAGE_SIZE - 1); in xdr_process_buf()
2049 i = (offset + buf->page_base) >> PAGE_SHIFT; in xdr_process_buf()
2054 sg_set_page(sg, buf->pages[i], thislen, page_offset); in xdr_process_buf()
2067 if (offset < buf->tail[0].iov_len) { in xdr_process_buf()
2068 thislen = buf->tail[0].iov_len - offset; in xdr_process_buf()
2071 sg_set_buf(sg, buf->tail[0].iov_base + offset, thislen); in xdr_process_buf()