Lines Matching refs:buf

121 xdr_terminate_string(struct xdr_buf *buf, const u32 len)  in xdr_terminate_string()  argument
125 kaddr = kmap_atomic(buf->pages[0]); in xdr_terminate_string()
126 kaddr[buf->page_base + len] = '\0'; in xdr_terminate_string()
137 char *buf = (char *)head->iov_base; in xdr_inline_pages() local
146 tail->iov_base = buf + offset; in xdr_inline_pages()
316 xdr_shrink_bufhead(struct xdr_buf *buf, size_t len) in xdr_shrink_bufhead() argument
320 unsigned int pglen = buf->page_len; in xdr_shrink_bufhead()
322 tail = buf->tail; in xdr_shrink_bufhead()
323 head = buf->head; in xdr_shrink_bufhead()
347 buf->pages, in xdr_shrink_bufhead()
348 buf->page_base + pglen + offs - len, in xdr_shrink_bufhead()
364 _shift_data_right_pages(buf->pages, in xdr_shrink_bufhead()
365 buf->page_base + len, in xdr_shrink_bufhead()
366 buf->page_base, in xdr_shrink_bufhead()
371 _copy_to_pages(buf->pages, buf->page_base, in xdr_shrink_bufhead()
376 buf->buflen -= len; in xdr_shrink_bufhead()
378 if (buf->len > buf->buflen) in xdr_shrink_bufhead()
379 buf->len = buf->buflen; in xdr_shrink_bufhead()
392 xdr_shrink_pagelen(struct xdr_buf *buf, size_t len) in xdr_shrink_pagelen() argument
396 unsigned int pglen = buf->page_len; in xdr_shrink_pagelen()
399 tail = buf->tail; in xdr_shrink_pagelen()
402 tailbuf_len = buf->buflen - buf->head->iov_len - buf->page_len; in xdr_shrink_pagelen()
420 buf->pages, buf->page_base + pglen - len, in xdr_shrink_pagelen()
423 buf->page_len -= len; in xdr_shrink_pagelen()
424 buf->buflen -= len; in xdr_shrink_pagelen()
426 if (buf->len > buf->buflen) in xdr_shrink_pagelen()
427 buf->len = buf->buflen; in xdr_shrink_pagelen()
431 xdr_shift_buf(struct xdr_buf *buf, size_t len) in xdr_shift_buf() argument
433 xdr_shrink_bufhead(buf, len); in xdr_shift_buf()
443 return (unsigned int)(XDR_QUADLEN(xdr->buf->len) - xdr->nwords) << 2; in xdr_stream_pos()
460 void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p) in xdr_init_encode() argument
462 struct kvec *iov = buf->head; in xdr_init_encode()
463 int scratch_len = buf->buflen - buf->page_len - buf->tail[0].iov_len; in xdr_init_encode()
467 xdr->buf = buf; in xdr_init_encode()
479 buf->len += len; in xdr_init_encode()
521 if (xdr->buf->len + nbytes > xdr->buf->buflen) in xdr_get_next_encode_buffer()
528 xdr->buf->page_len += frag1bytes; in xdr_get_next_encode_buffer()
546 space_left = xdr->buf->buflen - xdr->buf->len; in xdr_get_next_encode_buffer()
548 xdr->buf->page_len += frag2bytes; in xdr_get_next_encode_buffer()
549 xdr->buf->len += nbytes; in xdr_get_next_encode_buffer()
578 xdr->buf->page_len += nbytes; in xdr_reserve_space()
579 xdr->buf->len += nbytes; in xdr_reserve_space()
605 struct xdr_buf *buf = xdr->buf; in xdr_truncate_encode() local
606 struct kvec *head = buf->head; in xdr_truncate_encode()
607 struct kvec *tail = buf->tail; in xdr_truncate_encode()
611 if (len > buf->len) { in xdr_truncate_encode()
617 fraglen = min_t(int, buf->len - len, tail->iov_len); in xdr_truncate_encode()
619 buf->len -= fraglen; in xdr_truncate_encode()
627 fraglen = min_t(int, buf->len - len, buf->page_len); in xdr_truncate_encode()
628 buf->page_len -= fraglen; in xdr_truncate_encode()
629 buf->len -= fraglen; in xdr_truncate_encode()
631 new = buf->page_base + buf->page_len; in xdr_truncate_encode()
633 xdr->page_ptr = buf->pages + (new >> PAGE_SHIFT); in xdr_truncate_encode()
635 if (buf->page_len) { in xdr_truncate_encode()
648 buf->len = len; in xdr_truncate_encode()
650 xdr->iov = buf->head; in xdr_truncate_encode()
668 struct xdr_buf *buf = xdr->buf; in xdr_restrict_buflen() local
670 int end_offset = buf->len + left_in_this_buf; in xdr_restrict_buflen()
672 if (newbuflen < 0 || newbuflen < buf->len) in xdr_restrict_buflen()
674 if (newbuflen > buf->buflen) in xdr_restrict_buflen()
678 buf->buflen = newbuflen; in xdr_restrict_buflen()
694 struct xdr_buf *buf = xdr->buf; in xdr_write_pages() local
695 struct kvec *iov = buf->tail; in xdr_write_pages()
696 buf->pages = pages; in xdr_write_pages()
697 buf->page_base = base; in xdr_write_pages()
698 buf->page_len = len; in xdr_write_pages()
713 buf->buflen += len; in xdr_write_pages()
714 buf->len += len; in xdr_write_pages()
738 maxlen = xdr->buf->page_len; in xdr_set_page_base()
745 base += xdr->buf->page_base; in xdr_set_page_base()
748 xdr->page_ptr = &xdr->buf->pages[pgnr]; in xdr_set_page_base()
766 newbase = (1 + xdr->page_ptr - xdr->buf->pages) << PAGE_SHIFT; in xdr_set_next_page()
767 newbase -= xdr->buf->page_base; in xdr_set_next_page()
770 xdr_set_iov(xdr, xdr->buf->tail, xdr->buf->len); in xdr_set_next_page()
777 else if (xdr->iov == xdr->buf->head) { in xdr_set_next_buffer()
779 xdr_set_iov(xdr, xdr->buf->tail, xdr->buf->len); in xdr_set_next_buffer()
790 void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p) in xdr_init_decode() argument
792 xdr->buf = buf; in xdr_init_decode()
795 xdr->nwords = XDR_QUADLEN(buf->len); in xdr_init_decode()
796 if (buf->head[0].iov_len != 0) in xdr_init_decode()
797 xdr_set_iov(xdr, buf->head, buf->len); in xdr_init_decode()
798 else if (buf->page_len != 0) in xdr_init_decode()
799 xdr_set_page_base(xdr, 0, buf->len); in xdr_init_decode()
814 void xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf, in xdr_init_decode_pages() argument
817 memset(buf, 0, sizeof(*buf)); in xdr_init_decode_pages()
818 buf->pages = pages; in xdr_init_decode_pages()
819 buf->page_len = len; in xdr_init_decode_pages()
820 buf->buflen = len; in xdr_init_decode_pages()
821 buf->len = len; in xdr_init_decode_pages()
822 xdr_init_decode(xdr, buf, NULL); in xdr_init_decode_pages()
850 void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen) in xdr_set_scratch_buffer() argument
852 xdr->scratch.iov_base = buf; in xdr_set_scratch_buffer()
904 struct xdr_buf *buf = xdr->buf; in xdr_align_pages() local
912 iov = buf->head; in xdr_align_pages()
914 xdr_shrink_bufhead(buf, iov->iov_len - cur); in xdr_align_pages()
915 xdr->nwords = XDR_QUADLEN(buf->len - cur); in xdr_align_pages()
922 if (buf->page_len <= len) in xdr_align_pages()
923 len = buf->page_len; in xdr_align_pages()
926 xdr_shrink_pagelen(buf, buf->page_len - len); in xdr_align_pages()
927 xdr->nwords = XDR_QUADLEN(buf->len - cur); in xdr_align_pages()
945 struct xdr_buf *buf = xdr->buf; in xdr_read_pages() local
956 xdr->iov = iov = buf->tail; in xdr_read_pages()
999 xdr_buf_from_iov(struct kvec *iov, struct xdr_buf *buf) in xdr_buf_from_iov() argument
1001 buf->head[0] = *iov; in xdr_buf_from_iov()
1002 buf->tail[0] = empty_iov; in xdr_buf_from_iov()
1003 buf->page_len = 0; in xdr_buf_from_iov()
1004 buf->buflen = buf->len = iov->iov_len; in xdr_buf_from_iov()
1023 xdr_buf_subsegment(struct xdr_buf *buf, struct xdr_buf *subbuf, in xdr_buf_subsegment() argument
1027 if (base < buf->head[0].iov_len) { in xdr_buf_subsegment()
1028 subbuf->head[0].iov_base = buf->head[0].iov_base + base; in xdr_buf_subsegment()
1030 buf->head[0].iov_len - base); in xdr_buf_subsegment()
1034 base -= buf->head[0].iov_len; in xdr_buf_subsegment()
1038 if (base < buf->page_len) { in xdr_buf_subsegment()
1039 subbuf->page_len = min(buf->page_len - base, len); in xdr_buf_subsegment()
1040 base += buf->page_base; in xdr_buf_subsegment()
1042 subbuf->pages = &buf->pages[base >> PAGE_CACHE_SHIFT]; in xdr_buf_subsegment()
1046 base -= buf->page_len; in xdr_buf_subsegment()
1050 if (base < buf->tail[0].iov_len) { in xdr_buf_subsegment()
1051 subbuf->tail[0].iov_base = buf->tail[0].iov_base + base; in xdr_buf_subsegment()
1053 buf->tail[0].iov_len - base); in xdr_buf_subsegment()
1057 base -= buf->tail[0].iov_len; in xdr_buf_subsegment()
1077 void xdr_buf_trim(struct xdr_buf *buf, unsigned int len) in xdr_buf_trim() argument
1082 if (buf->tail[0].iov_len) { in xdr_buf_trim()
1083 cur = min_t(size_t, buf->tail[0].iov_len, trim); in xdr_buf_trim()
1084 buf->tail[0].iov_len -= cur; in xdr_buf_trim()
1090 if (buf->page_len) { in xdr_buf_trim()
1091 cur = min_t(unsigned int, buf->page_len, trim); in xdr_buf_trim()
1092 buf->page_len -= cur; in xdr_buf_trim()
1098 if (buf->head[0].iov_len) { in xdr_buf_trim()
1099 cur = min_t(size_t, buf->head[0].iov_len, trim); in xdr_buf_trim()
1100 buf->head[0].iov_len -= cur; in xdr_buf_trim()
1104 buf->len -= (len - trim); in xdr_buf_trim()
1126 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
1131 status = xdr_buf_subsegment(buf, &subbuf, base, len); in read_bytes_from_xdr_buf()
1157 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
1162 status = xdr_buf_subsegment(buf, &subbuf, base, len); in write_bytes_to_xdr_buf()
1171 xdr_decode_word(struct xdr_buf *buf, unsigned int base, u32 *obj) in xdr_decode_word() argument
1176 status = read_bytes_from_xdr_buf(buf, base, &raw, sizeof(*obj)); in xdr_decode_word()
1185 xdr_encode_word(struct xdr_buf *buf, unsigned int base, u32 obj) in xdr_encode_word() argument
1189 return write_bytes_to_xdr_buf(buf, base, &raw, sizeof(obj)); in xdr_encode_word()
1197 int xdr_buf_read_netobj(struct xdr_buf *buf, struct xdr_netobj *obj, unsigned int offset) in xdr_buf_read_netobj() argument
1201 if (xdr_decode_word(buf, offset, &obj->len)) in xdr_buf_read_netobj()
1203 if (xdr_buf_subsegment(buf, &subbuf, offset + 4, obj->len)) in xdr_buf_read_netobj()
1220 if (obj->len > buf->buflen - buf->len) in xdr_buf_read_netobj()
1222 if (buf->tail[0].iov_len != 0) in xdr_buf_read_netobj()
1223 obj->data = buf->tail[0].iov_base + buf->tail[0].iov_len; in xdr_buf_read_netobj()
1225 obj->data = buf->head[0].iov_base + buf->head[0].iov_len; in xdr_buf_read_netobj()
1233 xdr_xcode_array2(struct xdr_buf *buf, unsigned int base, in xdr_xcode_array2() argument
1242 if (xdr_encode_word(buf, base, desc->array_len) != 0) in xdr_xcode_array2()
1245 if (xdr_decode_word(buf, base, &desc->array_len) != 0 || in xdr_xcode_array2()
1248 desc->elem_size > buf->len) in xdr_xcode_array2()
1259 if (todo && base < buf->head->iov_len) { in xdr_xcode_array2()
1260 c = buf->head->iov_base + base; in xdr_xcode_array2()
1262 buf->head->iov_len - base); in xdr_xcode_array2()
1288 base = buf->head->iov_len; /* align to start of pages */ in xdr_xcode_array2()
1292 base -= buf->head->iov_len; in xdr_xcode_array2()
1293 if (todo && base < buf->page_len) { in xdr_xcode_array2()
1296 avail_here = min(todo, buf->page_len - base); in xdr_xcode_array2()
1299 base += buf->page_base; in xdr_xcode_array2()
1300 ppages = buf->pages + (base >> PAGE_CACHE_SHIFT); in xdr_xcode_array2()
1388 base = buf->page_len; /* align to start of tail */ in xdr_xcode_array2()
1392 base -= buf->page_len; in xdr_xcode_array2()
1394 c = buf->tail->iov_base + base; in xdr_xcode_array2()
1427 xdr_decode_array2(struct xdr_buf *buf, unsigned int base, in xdr_decode_array2() argument
1430 if (base >= buf->len) in xdr_decode_array2()
1433 return xdr_xcode_array2(buf, base, desc, 0); in xdr_decode_array2()
1438 xdr_encode_array2(struct xdr_buf *buf, unsigned int base, in xdr_encode_array2() argument
1442 buf->head->iov_len + buf->page_len + buf->tail->iov_len) in xdr_encode_array2()
1445 return xdr_xcode_array2(buf, base, desc, 1); in xdr_encode_array2()
1450 xdr_process_buf(struct xdr_buf *buf, unsigned int offset, unsigned int len, in xdr_process_buf() argument
1459 if (offset >= buf->head[0].iov_len) { in xdr_process_buf()
1460 offset -= buf->head[0].iov_len; in xdr_process_buf()
1462 thislen = buf->head[0].iov_len - offset; in xdr_process_buf()
1465 sg_set_buf(sg, buf->head[0].iov_base + offset, thislen); in xdr_process_buf()
1475 if (offset >= buf->page_len) { in xdr_process_buf()
1476 offset -= buf->page_len; in xdr_process_buf()
1478 page_len = buf->page_len - offset; in xdr_process_buf()
1482 page_offset = (offset + buf->page_base) & (PAGE_CACHE_SIZE - 1); in xdr_process_buf()
1483 i = (offset + buf->page_base) >> PAGE_CACHE_SHIFT; in xdr_process_buf()
1488 sg_set_page(sg, buf->pages[i], thislen, page_offset); in xdr_process_buf()
1501 if (offset < buf->tail[0].iov_len) { in xdr_process_buf()
1502 thislen = buf->tail[0].iov_len - offset; in xdr_process_buf()
1505 sg_set_buf(sg, buf->tail[0].iov_base + offset, thislen); in xdr_process_buf()