SUNRPC: xdr_stream_subsegment() must handle non-zero page_bases
authorChuck Lever <chuck.lever@oracle.com>
Thu, 30 Sep 2021 21:06:15 +0000 (17:06 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Sat, 2 Oct 2021 20:10:01 +0000 (16:10 -0400)
commitf49b68ddc9d7dddf1530312108a648dd815a2f30
treef334c2ae41449300456a13db6f2b7e8b85bd63c0
parent8e70bf27fd20cc17e87150327a640e546bfbee64
SUNRPC: xdr_stream_subsegment() must handle non-zero page_bases

xdr_stream_subsegment() was introduced in commit c1346a1216ab
("NFSD: Replace the internals of the READ_BUF() macro").

There are two call sites for xdr_stream_subsegment(). One is
nfsd4_decode_write(), and the other is nfsd4_decode_setxattr().
Currently neither of these call sites calls this API when
xdr_buf::page_base is a non-zero value.

However, I'm about to add a case where page_base will sometimes not
be zero when nfsd4_decode_write() invokes this API. Replace the
logic in xdr_stream_subsegment() that advances to the next data item
in the xdr_stream with something more generic in order to handle
this new use case.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/xdr.c