mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
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: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
7c4cd5f4d2
commit
e1bd87608d
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user