NFSv4: Replace ad-hoc xdr encode/decode helpers with xdr_stream_* generics
authorTrond Myklebust <trond.myklebust@primarydata.com>
Sun, 19 Feb 2017 21:08:26 +0000 (16:08 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 21 Feb 2017 21:56:16 +0000 (16:56 -0500)
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/callback_xdr.c
fs/nfs/flexfilelayout/flexfilelayout.c
fs/nfs/nfs4xdr.c

index eb094c6011d85bb7ce7bd544a3d203defd50b03a..e732a65db5460b12e8d55b4328c060659426685a 100644 (file)
@@ -582,12 +582,8 @@ out:
 
 static __be32 encode_string(struct xdr_stream *xdr, unsigned int len, const char *str)
 {
-       __be32 *p;
-
-       p = xdr_reserve_space(xdr, 4 + len);
-       if (unlikely(p == NULL))
-               return htonl(NFS4ERR_RESOURCE);
-       xdr_encode_opaque(p, str, len);
+       if (unlikely(xdr_stream_encode_opaque(xdr, str, len) < 0))
+               return cpu_to_be32(NFS4ERR_RESOURCE);
        return 0;
 }
 
index 6104696325be51725a161f86ff0a957578c09d0b..7b5f37f5ddf109cdb1c5905ee6c049de64ae9ea0 100644 (file)
@@ -1949,10 +1949,7 @@ static int ff_layout_encode_ioerr(struct xdr_stream *xdr,
 static void
 encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len)
 {
-       __be32 *p;
-
-       p = xdr_reserve_space(xdr, len);
-       xdr_encode_opaque_fixed(p, buf, len);
+       WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0);
 }
 
 static void
index e9255cb453e664c385c9a94969f69bc3514024b1..5f0a6fcd00307d9051baf74bfdf0f567a2973212 100644 (file)
@@ -924,34 +924,22 @@ static __be32 *reserve_space(struct xdr_stream *xdr, size_t nbytes)
 
 static void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len)
 {
-       __be32 *p;
-
-       p = xdr_reserve_space(xdr, len);
-       xdr_encode_opaque_fixed(p, buf, len);
+       WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0);
 }
 
 static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *str)
 {
-       __be32 *p;
-
-       p = reserve_space(xdr, 4 + len);
-       xdr_encode_opaque(p, str, len);
+       WARN_ON_ONCE(xdr_stream_encode_opaque(xdr, str, len) < 0);
 }
 
 static void encode_uint32(struct xdr_stream *xdr, u32 n)
 {
-       __be32 *p;
-
-       p = reserve_space(xdr, 4);
-       *p = cpu_to_be32(n);
+       WARN_ON_ONCE(xdr_stream_encode_u32(xdr, n) < 0);
 }
 
 static void encode_uint64(struct xdr_stream *xdr, u64 n)
 {
-       __be32 *p;
-
-       p = reserve_space(xdr, 8);
-       xdr_encode_hyper(p, n);
+       WARN_ON_ONCE(xdr_stream_encode_u64(xdr, n) < 0);
 }
 
 static void encode_nfs4_seqid(struct xdr_stream *xdr,
@@ -4294,15 +4282,12 @@ out_overflow:
 
 static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len)
 {
-       __be32 *p;
-
-       p = xdr_inline_decode(xdr, len);
-       if (likely(p)) {
-               memcpy(buf, p, len);
-               return 0;
+       ssize_t ret = xdr_stream_decode_opaque_fixed(xdr, buf, len);
+       if (unlikely(ret < 0)) {
+               print_overflow_msg(__func__, xdr);
+               return -EIO;
        }
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
+       return 0;
 }
 
 static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid)