Lines Matching refs:buf
127 xdr_terminate_string(struct xdr_buf *buf, const u32 len) in xdr_terminate_string() argument
131 kaddr = kmap_atomic(buf->pages[0]); in xdr_terminate_string()
132 kaddr[buf->page_base + len] = '\0'; in xdr_terminate_string()
138 xdr_buf_pagecount(struct xdr_buf *buf) in xdr_buf_pagecount() argument
140 if (!buf->page_len) in xdr_buf_pagecount()
142 return (buf->page_base + buf->page_len + PAGE_SIZE - 1) >> PAGE_SHIFT; in xdr_buf_pagecount()
146 xdr_alloc_bvec(struct xdr_buf *buf, gfp_t gfp) in xdr_alloc_bvec() argument
148 size_t i, n = xdr_buf_pagecount(buf); in xdr_alloc_bvec()
150 if (n != 0 && buf->bvec == NULL) { in xdr_alloc_bvec()
151 buf->bvec = kmalloc_array(n, sizeof(buf->bvec[0]), gfp); in xdr_alloc_bvec()
152 if (!buf->bvec) in xdr_alloc_bvec()
155 buf->bvec[i].bv_page = buf->pages[i]; in xdr_alloc_bvec()
156 buf->bvec[i].bv_len = PAGE_SIZE; in xdr_alloc_bvec()
157 buf->bvec[i].bv_offset = 0; in xdr_alloc_bvec()
164 xdr_free_bvec(struct xdr_buf *buf) in xdr_free_bvec() argument
166 kfree(buf->bvec); in xdr_free_bvec()
167 buf->bvec = NULL; in xdr_free_bvec()
185 char *buf = (char *)head->iov_base; in xdr_inline_pages() local
194 tail->iov_base = buf + offset; in xdr_inline_pages()
270 _shift_data_left_tail(struct xdr_buf *buf, unsigned int pgto, size_t len) in _shift_data_left_tail() argument
272 struct kvec *tail = buf->tail; in _shift_data_left_tail()
277 _copy_to_pages(buf->pages, in _shift_data_left_tail()
278 buf->page_base + pgto, in _shift_data_left_tail()
355 _shift_data_right_tail(struct xdr_buf *buf, unsigned int pgfrom, size_t len) in _shift_data_right_tail() argument
357 struct kvec *tail = buf->tail; in _shift_data_right_tail()
362 tailbuf_len = buf->buflen - buf->head->iov_len - buf->page_len; in _shift_data_right_tail()
385 buf->pages, in _shift_data_right_tail()
386 buf->page_base + pgfrom, in _shift_data_right_tail()
520 xdr_shrink_bufhead(struct xdr_buf *buf, size_t len) in xdr_shrink_bufhead() argument
524 unsigned int pglen = buf->page_len; in xdr_shrink_bufhead()
528 tail = buf->tail; in xdr_shrink_bufhead()
529 head = buf->head; in xdr_shrink_bufhead()
554 buf->pages, in xdr_shrink_bufhead()
555 buf->page_base + pglen + offs - len, in xdr_shrink_bufhead()
574 _shift_data_right_pages(buf->pages, in xdr_shrink_bufhead()
575 buf->page_base + len, in xdr_shrink_bufhead()
576 buf->page_base, in xdr_shrink_bufhead()
581 _copy_to_pages(buf->pages, buf->page_base, in xdr_shrink_bufhead()
587 buf->buflen -= len; in xdr_shrink_bufhead()
589 if (buf->len > buf->buflen) in xdr_shrink_bufhead()
590 buf->len = buf->buflen; in xdr_shrink_bufhead()
604 xdr_shrink_pagelen(struct xdr_buf *buf, size_t len) in xdr_shrink_pagelen() argument
606 unsigned int pglen = buf->page_len; in xdr_shrink_pagelen()
609 if (len > buf->page_len) in xdr_shrink_pagelen()
610 len = buf-> page_len; in xdr_shrink_pagelen()
612 result = _shift_data_right_tail(buf, pglen - len, len); in xdr_shrink_pagelen()
613 buf->page_len -= len; in xdr_shrink_pagelen()
614 buf->buflen -= len; in xdr_shrink_pagelen()
616 if (buf->len > buf->buflen) in xdr_shrink_pagelen()
617 buf->len = buf->buflen; in xdr_shrink_pagelen()
623 xdr_shift_buf(struct xdr_buf *buf, size_t len) in xdr_shift_buf() argument
625 xdr_shrink_bufhead(buf, len); in xdr_shift_buf()
635 return (unsigned int)(XDR_QUADLEN(xdr->buf->len) - xdr->nwords) << 2; in xdr_stream_pos()
647 WARN_ON(pos < xdr->buf->head[0].iov_len); in xdr_page_pos()
648 return pos - xdr->buf->head[0].iov_len; in xdr_page_pos()
666 void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, in xdr_init_encode() argument
669 struct kvec *iov = buf->head; in xdr_init_encode()
670 int scratch_len = buf->buflen - buf->page_len - buf->tail[0].iov_len; in xdr_init_encode()
674 xdr->buf = buf; in xdr_init_encode()
686 buf->len += len; in xdr_init_encode()
729 if (xdr->buf->len + nbytes > xdr->buf->buflen) in xdr_get_next_encode_buffer()
736 xdr->buf->page_len += frag1bytes; in xdr_get_next_encode_buffer()
754 space_left = xdr->buf->buflen - xdr->buf->len; in xdr_get_next_encode_buffer()
760 xdr->buf->page_len += frag2bytes; in xdr_get_next_encode_buffer()
761 xdr->buf->len += nbytes; in xdr_get_next_encode_buffer()
793 xdr->buf->page_len += nbytes; in xdr_reserve_space()
794 xdr->buf->len += nbytes; in xdr_reserve_space()
821 if (xdr->iov == xdr->buf->head) { in xdr_reserve_space_vec()
827 thislen = xdr->buf->page_len % PAGE_SIZE; in xdr_reserve_space_vec()
865 struct xdr_buf *buf = xdr->buf; in xdr_truncate_encode() local
866 struct kvec *head = buf->head; in xdr_truncate_encode()
867 struct kvec *tail = buf->tail; in xdr_truncate_encode()
871 if (len > buf->len) { in xdr_truncate_encode()
877 fraglen = min_t(int, buf->len - len, tail->iov_len); in xdr_truncate_encode()
879 buf->len -= fraglen; in xdr_truncate_encode()
887 fraglen = min_t(int, buf->len - len, buf->page_len); in xdr_truncate_encode()
888 buf->page_len -= fraglen; in xdr_truncate_encode()
889 buf->len -= fraglen; in xdr_truncate_encode()
891 new = buf->page_base + buf->page_len; in xdr_truncate_encode()
893 xdr->page_ptr = buf->pages + (new >> PAGE_SHIFT); in xdr_truncate_encode()
895 if (buf->page_len) { in xdr_truncate_encode()
907 buf->len = len; in xdr_truncate_encode()
909 xdr->iov = buf->head; in xdr_truncate_encode()
927 struct xdr_buf *buf = xdr->buf; in xdr_restrict_buflen() local
929 int end_offset = buf->len + left_in_this_buf; in xdr_restrict_buflen()
931 if (newbuflen < 0 || newbuflen < buf->len) in xdr_restrict_buflen()
933 if (newbuflen > buf->buflen) in xdr_restrict_buflen()
937 buf->buflen = newbuflen; in xdr_restrict_buflen()
953 struct xdr_buf *buf = xdr->buf; in xdr_write_pages() local
954 struct kvec *iov = buf->tail; in xdr_write_pages()
955 buf->pages = pages; in xdr_write_pages()
956 buf->page_base = base; in xdr_write_pages()
957 buf->page_len = len; in xdr_write_pages()
972 buf->buflen += len; in xdr_write_pages()
973 buf->len += len; in xdr_write_pages()
997 maxlen = xdr->buf->page_len; in xdr_set_page_base()
1004 base += xdr->buf->page_base; in xdr_set_page_base()
1007 xdr->page_ptr = &xdr->buf->pages[pgnr]; in xdr_set_page_base()
1025 xdr_set_iov(xdr, xdr->buf->tail, xdr->nwords << 2); in xdr_set_page()
1032 newbase = (1 + xdr->page_ptr - xdr->buf->pages) << PAGE_SHIFT; in xdr_set_next_page()
1033 newbase -= xdr->buf->page_base; in xdr_set_next_page()
1042 else if (xdr->iov == xdr->buf->head) { in xdr_set_next_buffer()
1055 void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, in xdr_init_decode() argument
1058 xdr->buf = buf; in xdr_init_decode()
1061 xdr->nwords = XDR_QUADLEN(buf->len); in xdr_init_decode()
1062 if (buf->head[0].iov_len != 0) in xdr_init_decode()
1063 xdr_set_iov(xdr, buf->head, buf->len); in xdr_init_decode()
1064 else if (buf->page_len != 0) in xdr_init_decode()
1065 xdr_set_page_base(xdr, 0, buf->len); in xdr_init_decode()
1067 xdr_set_iov(xdr, buf->head, buf->len); in xdr_init_decode()
1083 void xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf, in xdr_init_decode_pages() argument
1086 memset(buf, 0, sizeof(*buf)); in xdr_init_decode_pages()
1087 buf->pages = pages; in xdr_init_decode_pages()
1088 buf->page_len = len; in xdr_init_decode_pages()
1089 buf->buflen = len; in xdr_init_decode_pages()
1090 buf->len = len; in xdr_init_decode_pages()
1091 xdr_init_decode(xdr, buf, NULL, NULL); in xdr_init_decode_pages()
1119 void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen) in xdr_set_scratch_buffer() argument
1121 xdr->scratch.iov_base = buf; in xdr_set_scratch_buffer()
1182 struct xdr_buf *buf = xdr->buf; in xdr_realign_pages() local
1183 struct kvec *iov = buf->head; in xdr_realign_pages()
1190 copied = xdr_shrink_bufhead(buf, offset); in xdr_realign_pages()
1192 xdr->nwords = XDR_QUADLEN(buf->len - cur); in xdr_realign_pages()
1198 struct xdr_buf *buf = xdr->buf; in xdr_align_pages() local
1211 if (buf->page_len <= len) in xdr_align_pages()
1212 len = buf->page_len; in xdr_align_pages()
1215 offset = buf->page_len - len; in xdr_align_pages()
1216 copied = xdr_shrink_pagelen(buf, offset); in xdr_align_pages()
1218 xdr->nwords = XDR_QUADLEN(buf->len - cur); in xdr_align_pages()
1236 struct xdr_buf *buf = xdr->buf; in xdr_read_pages() local
1247 xdr->iov = iov = buf->tail; in xdr_read_pages()
1267 struct xdr_buf *buf = xdr->buf; in xdr_align_data() local
1272 (offset + length) > buf->page_len) in xdr_align_data()
1273 length = buf->page_len - offset; in xdr_align_data()
1283 shift = min_t(unsigned int, bytes, buf->page_len - from); in xdr_align_data()
1284 _shift_data_left_pages(buf->pages, in xdr_align_data()
1285 buf->page_base + offset, in xdr_align_data()
1286 buf->page_base + from, in xdr_align_data()
1292 _shift_data_left_tail(buf, offset + shift, bytes); in xdr_align_data()
1303 struct xdr_buf *buf = xdr->buf; in xdr_expand_hole() local
1309 (offset + length) > buf->page_len) in xdr_expand_hole()
1310 length = buf->page_len - offset; in xdr_expand_hole()
1316 if (offset + length + bytes > buf->page_len) { in xdr_expand_hole()
1317 unsigned int shift = (offset + length + bytes) - buf->page_len; in xdr_expand_hole()
1318 unsigned int res = _shift_data_right_tail(buf, from + bytes - shift, shift); in xdr_expand_hole()
1326 _shift_data_right_pages(buf->pages, in xdr_expand_hole()
1327 buf->page_base + offset + length, in xdr_expand_hole()
1328 buf->page_base + from, in xdr_expand_hole()
1330 _zero_pages(buf->pages, buf->page_base + offset, length); in xdr_expand_hole()
1332 buf->len += length - (from - offset) - truncated; in xdr_expand_hole()
1363 xdr_buf_from_iov(struct kvec *iov, struct xdr_buf *buf) in xdr_buf_from_iov() argument
1365 buf->head[0] = *iov; in xdr_buf_from_iov()
1366 buf->tail[0] = empty_iov; in xdr_buf_from_iov()
1367 buf->page_len = 0; in xdr_buf_from_iov()
1368 buf->buflen = buf->len = iov->iov_len; in xdr_buf_from_iov()
1387 xdr_buf_subsegment(struct xdr_buf *buf, struct xdr_buf *subbuf, in xdr_buf_subsegment() argument
1391 if (base < buf->head[0].iov_len) { in xdr_buf_subsegment()
1392 subbuf->head[0].iov_base = buf->head[0].iov_base + base; in xdr_buf_subsegment()
1394 buf->head[0].iov_len - base); in xdr_buf_subsegment()
1398 base -= buf->head[0].iov_len; in xdr_buf_subsegment()
1399 subbuf->head[0].iov_base = buf->head[0].iov_base; in xdr_buf_subsegment()
1403 if (base < buf->page_len) { in xdr_buf_subsegment()
1404 subbuf->page_len = min(buf->page_len - base, len); in xdr_buf_subsegment()
1405 base += buf->page_base; in xdr_buf_subsegment()
1407 subbuf->pages = &buf->pages[base >> PAGE_SHIFT]; in xdr_buf_subsegment()
1411 base -= buf->page_len; in xdr_buf_subsegment()
1412 subbuf->pages = buf->pages; in xdr_buf_subsegment()
1417 if (base < buf->tail[0].iov_len) { in xdr_buf_subsegment()
1418 subbuf->tail[0].iov_base = buf->tail[0].iov_base + base; in xdr_buf_subsegment()
1420 buf->tail[0].iov_len - base); in xdr_buf_subsegment()
1424 base -= buf->tail[0].iov_len; in xdr_buf_subsegment()
1425 subbuf->tail[0].iov_base = buf->tail[0].iov_base; in xdr_buf_subsegment()
1445 void xdr_buf_trim(struct xdr_buf *buf, unsigned int len) in xdr_buf_trim() argument
1450 if (buf->tail[0].iov_len) { in xdr_buf_trim()
1451 cur = min_t(size_t, buf->tail[0].iov_len, trim); in xdr_buf_trim()
1452 buf->tail[0].iov_len -= cur; in xdr_buf_trim()
1458 if (buf->page_len) { in xdr_buf_trim()
1459 cur = min_t(unsigned int, buf->page_len, trim); in xdr_buf_trim()
1460 buf->page_len -= cur; in xdr_buf_trim()
1466 if (buf->head[0].iov_len) { in xdr_buf_trim()
1467 cur = min_t(size_t, buf->head[0].iov_len, trim); in xdr_buf_trim()
1468 buf->head[0].iov_len -= cur; in xdr_buf_trim()
1472 buf->len -= (len - trim); in xdr_buf_trim()
1494 int read_bytes_from_xdr_buf(struct xdr_buf *buf, unsigned int base, void *obj, unsigned int len) in read_bytes_from_xdr_buf() argument
1499 status = xdr_buf_subsegment(buf, &subbuf, base, len); in read_bytes_from_xdr_buf()
1525 int write_bytes_to_xdr_buf(struct xdr_buf *buf, unsigned int base, void *obj, unsigned int len) in write_bytes_to_xdr_buf() argument
1530 status = xdr_buf_subsegment(buf, &subbuf, base, len); in write_bytes_to_xdr_buf()
1539 xdr_decode_word(struct xdr_buf *buf, unsigned int base, u32 *obj) in xdr_decode_word() argument
1544 status = read_bytes_from_xdr_buf(buf, base, &raw, sizeof(*obj)); in xdr_decode_word()
1553 xdr_encode_word(struct xdr_buf *buf, unsigned int base, u32 obj) in xdr_encode_word() argument
1557 return write_bytes_to_xdr_buf(buf, base, &raw, sizeof(obj)); in xdr_encode_word()
1563 xdr_xcode_array2(struct xdr_buf *buf, unsigned int base, in xdr_xcode_array2() argument
1572 if (xdr_encode_word(buf, base, desc->array_len) != 0) in xdr_xcode_array2()
1575 if (xdr_decode_word(buf, base, &desc->array_len) != 0 || in xdr_xcode_array2()
1578 desc->elem_size > buf->len) in xdr_xcode_array2()
1589 if (todo && base < buf->head->iov_len) { in xdr_xcode_array2()
1590 c = buf->head->iov_base + base; in xdr_xcode_array2()
1592 buf->head->iov_len - base); in xdr_xcode_array2()
1618 base = buf->head->iov_len; /* align to start of pages */ in xdr_xcode_array2()
1622 base -= buf->head->iov_len; in xdr_xcode_array2()
1623 if (todo && base < buf->page_len) { in xdr_xcode_array2()
1626 avail_here = min(todo, buf->page_len - base); in xdr_xcode_array2()
1629 base += buf->page_base; in xdr_xcode_array2()
1630 ppages = buf->pages + (base >> PAGE_SHIFT); in xdr_xcode_array2()
1718 base = buf->page_len; /* align to start of tail */ in xdr_xcode_array2()
1722 base -= buf->page_len; in xdr_xcode_array2()
1724 c = buf->tail->iov_base + base; in xdr_xcode_array2()
1757 xdr_decode_array2(struct xdr_buf *buf, unsigned int base, in xdr_decode_array2() argument
1760 if (base >= buf->len) in xdr_decode_array2()
1763 return xdr_xcode_array2(buf, base, desc, 0); in xdr_decode_array2()
1768 xdr_encode_array2(struct xdr_buf *buf, unsigned int base, in xdr_encode_array2() argument
1772 buf->head->iov_len + buf->page_len + buf->tail->iov_len) in xdr_encode_array2()
1775 return xdr_xcode_array2(buf, base, desc, 1); in xdr_encode_array2()
1780 xdr_process_buf(struct xdr_buf *buf, unsigned int offset, unsigned int len, in xdr_process_buf() argument
1789 if (offset >= buf->head[0].iov_len) { in xdr_process_buf()
1790 offset -= buf->head[0].iov_len; in xdr_process_buf()
1792 thislen = buf->head[0].iov_len - offset; in xdr_process_buf()
1795 sg_set_buf(sg, buf->head[0].iov_base + offset, thislen); in xdr_process_buf()
1805 if (offset >= buf->page_len) { in xdr_process_buf()
1806 offset -= buf->page_len; in xdr_process_buf()
1808 page_len = buf->page_len - offset; in xdr_process_buf()
1812 page_offset = (offset + buf->page_base) & (PAGE_SIZE - 1); in xdr_process_buf()
1813 i = (offset + buf->page_base) >> PAGE_SHIFT; in xdr_process_buf()
1818 sg_set_page(sg, buf->pages[i], thislen, page_offset); in xdr_process_buf()
1831 if (offset < buf->tail[0].iov_len) { in xdr_process_buf()
1832 thislen = buf->tail[0].iov_len - offset; in xdr_process_buf()
1835 sg_set_buf(sg, buf->tail[0].iov_base + offset, thislen); in xdr_process_buf()