SUNRPC: Add encoders for list item discriminators
authorChuck Lever <chuck.lever@oracle.com>
Mon, 2 Mar 2020 20:02:20 +0000 (15:02 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 16 Mar 2020 16:04:32 +0000 (12:04 -0400)
Clean up. These are taken from the client-side RPC/RDMA transport
to a more global header file so they can be used elsewhere.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
include/linux/sunrpc/xdr.h
net/sunrpc/xprtrdma/rpc_rdma.c

index 83cd9f1..9c8b73b 100644 (file)
@@ -315,6 +315,44 @@ static inline size_t xdr_pad_size(size_t n)
        return xdr_align_size(n) - n;
 }
 
+/**
+ * xdr_stream_encode_item_present - Encode a "present" list item
+ * @xdr: pointer to xdr_stream
+ *
+ * Return values:
+ *   On success, returns length in bytes of XDR buffer consumed
+ *   %-EMSGSIZE on XDR buffer overflow
+ */
+static inline ssize_t xdr_stream_encode_item_present(struct xdr_stream *xdr)
+{
+       const size_t len = sizeof(__be32);
+       __be32 *p = xdr_reserve_space(xdr, len);
+
+       if (unlikely(!p))
+               return -EMSGSIZE;
+       *p = xdr_one;
+       return len;
+}
+
+/**
+ * xdr_stream_encode_item_absent - Encode a "not present" list item
+ * @xdr: pointer to xdr_stream
+ *
+ * Return values:
+ *   On success, returns length in bytes of XDR buffer consumed
+ *   %-EMSGSIZE on XDR buffer overflow
+ */
+static inline int xdr_stream_encode_item_absent(struct xdr_stream *xdr)
+{
+       const size_t len = sizeof(__be32);
+       __be32 *p = xdr_reserve_space(xdr, len);
+
+       if (unlikely(!p))
+               return -EMSGSIZE;
+       *p = xdr_zero;
+       return len;
+}
+
 /**
  * xdr_stream_encode_u32 - Encode a 32-bit integer
  * @xdr: pointer to xdr_stream
index 28020ec..577513b 100644 (file)
@@ -275,32 +275,6 @@ out:
        return n;
 }
 
-static inline int
-encode_item_present(struct xdr_stream *xdr)
-{
-       __be32 *p;
-
-       p = xdr_reserve_space(xdr, sizeof(*p));
-       if (unlikely(!p))
-               return -EMSGSIZE;
-
-       *p = xdr_one;
-       return 0;
-}
-
-static inline int
-encode_item_not_present(struct xdr_stream *xdr)
-{
-       __be32 *p;
-
-       p = xdr_reserve_space(xdr, sizeof(*p));
-       if (unlikely(!p))
-               return -EMSGSIZE;
-
-       *p = xdr_zero;
-       return 0;
-}
-
 static void
 xdr_encode_rdma_segment(__be32 *iptr, struct rpcrdma_mr *mr)
 {
@@ -414,7 +388,7 @@ static int rpcrdma_encode_read_list(struct rpcrdma_xprt *r_xprt,
        } while (nsegs);
 
 done:
-       return encode_item_not_present(xdr);
+       return xdr_stream_encode_item_absent(xdr);
 }
 
 /* Register and XDR encode the Write list. Supports encoding a list
@@ -453,7 +427,7 @@ static int rpcrdma_encode_write_list(struct rpcrdma_xprt *r_xprt,
        if (nsegs < 0)
                return nsegs;
 
-       if (encode_item_present(xdr) < 0)
+       if (xdr_stream_encode_item_present(xdr) < 0)
                return -EMSGSIZE;
        segcount = xdr_reserve_space(xdr, sizeof(*segcount));
        if (unlikely(!segcount))
@@ -480,7 +454,7 @@ static int rpcrdma_encode_write_list(struct rpcrdma_xprt *r_xprt,
        *segcount = cpu_to_be32(nchunks);
 
 done:
-       return encode_item_not_present(xdr);
+       return xdr_stream_encode_item_absent(xdr);
 }
 
 /* Register and XDR encode the Reply chunk. Supports encoding an array
@@ -507,14 +481,14 @@ static int rpcrdma_encode_reply_chunk(struct rpcrdma_xprt *r_xprt,
        __be32 *segcount;
 
        if (wtype != rpcrdma_replych)
-               return encode_item_not_present(xdr);
+               return xdr_stream_encode_item_absent(xdr);
 
        seg = req->rl_segments;
        nsegs = rpcrdma_convert_iovs(r_xprt, &rqst->rq_rcv_buf, 0, wtype, seg);
        if (nsegs < 0)
                return nsegs;
 
-       if (encode_item_present(xdr) < 0)
+       if (xdr_stream_encode_item_present(xdr) < 0)
                return -EMSGSIZE;
        segcount = xdr_reserve_space(xdr, sizeof(*segcount));
        if (unlikely(!segcount))