SUNRPC: Split out a function for setting current page
authorAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 26 Jan 2015 22:26:19 +0000 (17:26 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 7 Oct 2020 18:28:39 +0000 (14:28 -0400)
I'm going to need this bit of code in a few places for READ_PLUS
decoding, so let's make it a helper function.

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xdr.c

index be11d67..fa7517c 100644 (file)
@@ -825,6 +825,13 @@ static int xdr_set_page_base(struct xdr_stream *xdr,
        return 0;
 }
 
+static void xdr_set_page(struct xdr_stream *xdr, unsigned int base,
+                        unsigned int len)
+{
+       if (xdr_set_page_base(xdr, base, len) < 0)
+               xdr_set_iov(xdr, xdr->buf->tail, xdr->nwords << 2);
+}
+
 static void xdr_set_next_page(struct xdr_stream *xdr)
 {
        unsigned int newbase;
@@ -832,8 +839,7 @@ static void xdr_set_next_page(struct xdr_stream *xdr)
        newbase = (1 + xdr->page_ptr - xdr->buf->pages) << PAGE_SHIFT;
        newbase -= xdr->buf->page_base;
 
-       if (xdr_set_page_base(xdr, newbase, PAGE_SIZE) < 0)
-               xdr_set_iov(xdr, xdr->buf->tail, xdr->nwords << 2);
+       xdr_set_page(xdr, newbase, PAGE_SIZE);
 }
 
 static bool xdr_set_next_buffer(struct xdr_stream *xdr)
@@ -841,8 +847,7 @@ static bool xdr_set_next_buffer(struct xdr_stream *xdr)
        if (xdr->page_ptr != NULL)
                xdr_set_next_page(xdr);
        else if (xdr->iov == xdr->buf->head) {
-               if (xdr_set_page_base(xdr, 0, PAGE_SIZE) < 0)
-                       xdr_set_iov(xdr, xdr->buf->tail, xdr->nwords << 2);
+               xdr_set_page(xdr, 0, PAGE_SIZE);
        }
        return xdr->p != xdr->end;
 }