Lines Matching refs:subbuf
1673 * xdr_buf_subsegment - set subbuf to a portion of buf
1675 * @subbuf: the result buffer
1679 * sets @subbuf to an xdr buffer representing the portion of @buf of
1682 * @buf and @subbuf may be pointers to the same struct xdr_buf.
1686 int xdr_buf_subsegment(const struct xdr_buf *buf, struct xdr_buf *subbuf,
1689 subbuf->buflen = subbuf->len = len;
1691 subbuf->head[0].iov_base = buf->head[0].iov_base + base;
1692 subbuf->head[0].iov_len = min_t(unsigned int, len,
1694 len -= subbuf->head[0].iov_len;
1698 subbuf->head[0].iov_base = buf->head[0].iov_base;
1699 subbuf->head[0].iov_len = 0;
1703 subbuf->page_len = min(buf->page_len - base, len);
1705 subbuf->page_base = base & ~PAGE_MASK;
1706 subbuf->pages = &buf->pages[base >> PAGE_SHIFT];
1707 len -= subbuf->page_len;
1711 subbuf->pages = buf->pages;
1712 subbuf->page_base = 0;
1713 subbuf->page_len = 0;
1717 subbuf->tail[0].iov_base = buf->tail[0].iov_base + base;
1718 subbuf->tail[0].iov_len = min_t(unsigned int, len,
1720 len -= subbuf->tail[0].iov_len;
1724 subbuf->tail[0].iov_base = buf->tail[0].iov_base;
1725 subbuf->tail[0].iov_len = 0;
1735 * xdr_stream_subsegment - set @subbuf to a portion of @xdr
1737 * @subbuf: the result buffer
1740 * Sets up @subbuf to represent a portion of @xdr. The portion
1746 * %true: @subbuf has been initialized, and @xdr has been advanced.
1749 bool xdr_stream_subsegment(struct xdr_stream *xdr, struct xdr_buf *subbuf,
1755 /* Extract @subbuf and bounds-check the fn arguments */
1756 if (xdr_buf_subsegment(xdr->buf, subbuf, start, nbytes))
1876 static void __read_bytes_from_xdr_buf(const struct xdr_buf *subbuf,
1881 this_len = min_t(unsigned int, len, subbuf->head[0].iov_len);
1882 memcpy(obj, subbuf->head[0].iov_base, this_len);
1885 this_len = min_t(unsigned int, len, subbuf->page_len);
1886 _copy_from_pages(obj, subbuf->pages, subbuf->page_base, this_len);
1889 this_len = min_t(unsigned int, len, subbuf->tail[0].iov_len);
1890 memcpy(obj, subbuf->tail[0].iov_base, this_len);
1897 struct xdr_buf subbuf;
1900 status = xdr_buf_subsegment(buf, &subbuf, base, len);
1903 __read_bytes_from_xdr_buf(&subbuf, obj, len);
1908 static void __write_bytes_to_xdr_buf(const struct xdr_buf *subbuf,
1913 this_len = min_t(unsigned int, len, subbuf->head[0].iov_len);
1914 memcpy(subbuf->head[0].iov_base, obj, this_len);
1917 this_len = min_t(unsigned int, len, subbuf->page_len);
1918 _copy_to_pages(subbuf->pages, subbuf->page_base, obj, this_len);
1921 this_len = min_t(unsigned int, len, subbuf->tail[0].iov_len);
1922 memcpy(subbuf->tail[0].iov_base, obj, this_len);
1929 struct xdr_buf subbuf;
1932 status = xdr_buf_subsegment(buf, &subbuf, base, len);
1935 __write_bytes_to_xdr_buf(&subbuf, obj, len);