Commit e1bd8760 authored by Anna Schumaker's avatar Anna Schumaker Committed by Trond Myklebust

SUNRPC: Add a function for zeroing out a portion of an xdr_stream

This will be used during READ_PLUS decoding for handling HOLE segments.
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 7c4cd5f4
......@@ -265,6 +265,8 @@ extern bool xdr_stream_subsegment(struct xdr_stream *xdr, struct xdr_buf *subbuf
unsigned int len);
extern unsigned int xdr_stream_move_subsegment(struct xdr_stream *xdr, unsigned int offset,
unsigned int target, unsigned int length);
extern unsigned int xdr_stream_zero(struct xdr_stream *xdr, unsigned int offset,
unsigned int length);
/**
* xdr_set_scratch_buffer - Attach a scratch buffer for decoding data.
......
......@@ -1769,6 +1769,29 @@ unsigned int xdr_stream_move_subsegment(struct xdr_stream *xdr, unsigned int off
}
EXPORT_SYMBOL_GPL(xdr_stream_move_subsegment);
/**
* xdr_stream_zero - zero out a portion of an xdr_stream
* @xdr: an xdr_stream to zero out
* @offset: the starting point in the stream
* @length: the number of bytes to zero
*/
unsigned int xdr_stream_zero(struct xdr_stream *xdr, unsigned int offset,
unsigned int length)
{
struct xdr_buf buf;
if (xdr_buf_subsegment(xdr->buf, &buf, offset, length) < 0)
return 0;
if (buf.head[0].iov_len)
xdr_buf_iov_zero(buf.head, 0, buf.head[0].iov_len);
if (buf.page_len > 0)
xdr_buf_pages_zero(&buf, 0, buf.page_len);
if (buf.tail[0].iov_len)
xdr_buf_iov_zero(buf.tail, 0, buf.tail[0].iov_len);
return length;
}
EXPORT_SYMBOL_GPL(xdr_stream_zero);
/**
* xdr_buf_trim - lop at most "len" bytes off the end of "buf"
* @buf: buf to be trimmed
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment