aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2017-02-19 16:08:26 -0500
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2017-02-21 16:56:16 -0500
commitab6e9aaf16cfdfca630f9745fd6d453818df7f64 (patch)
tree0518bb63cde9902f4686eea336d665f38aee182d
parent0ae060ca2bdfe11181094699b0f76437ec210b17 (diff)
NFSv4: Replace ad-hoc xdr encode/decode helpers with xdr_stream_* generics
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>
-rw-r--r--fs/nfs/callback_xdr.c8
-rw-r--r--fs/nfs/flexfilelayout/flexfilelayout.c5
-rw-r--r--fs/nfs/nfs4xdr.c33
3 files changed, 12 insertions, 34 deletions
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
index eb094c6011d8..e732a65db546 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -582,12 +582,8 @@ out:
582 582
583static __be32 encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) 583static __be32 encode_string(struct xdr_stream *xdr, unsigned int len, const char *str)
584{ 584{
585 __be32 *p; 585 if (unlikely(xdr_stream_encode_opaque(xdr, str, len) < 0))
586 586 return cpu_to_be32(NFS4ERR_RESOURCE);
587 p = xdr_reserve_space(xdr, 4 + len);
588 if (unlikely(p == NULL))
589 return htonl(NFS4ERR_RESOURCE);
590 xdr_encode_opaque(p, str, len);
591 return 0; 587 return 0;
592} 588}
593 589
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
index 6104696325be..7b5f37f5ddf1 100644
--- a/fs/nfs/flexfilelayout/flexfilelayout.c
+++ b/fs/nfs/flexfilelayout/flexfilelayout.c
@@ -1949,10 +1949,7 @@ static int ff_layout_encode_ioerr(struct xdr_stream *xdr,
1949static void 1949static void
1950encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) 1950encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len)
1951{ 1951{
1952 __be32 *p; 1952 WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0);
1953
1954 p = xdr_reserve_space(xdr, len);
1955 xdr_encode_opaque_fixed(p, buf, len);
1956} 1953}
1957 1954
1958static void 1955static void
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index e9255cb453e6..5f0a6fcd0030 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -924,34 +924,22 @@ static __be32 *reserve_space(struct xdr_stream *xdr, size_t nbytes)
924 924
925static void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) 925static void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len)
926{ 926{
927 __be32 *p; 927 WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0);
928
929 p = xdr_reserve_space(xdr, len);
930 xdr_encode_opaque_fixed(p, buf, len);
931} 928}
932 929
933static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) 930static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *str)
934{ 931{
935 __be32 *p; 932 WARN_ON_ONCE(xdr_stream_encode_opaque(xdr, str, len) < 0);
936
937 p = reserve_space(xdr, 4 + len);
938 xdr_encode_opaque(p, str, len);
939} 933}
940 934
941static void encode_uint32(struct xdr_stream *xdr, u32 n) 935static void encode_uint32(struct xdr_stream *xdr, u32 n)
942{ 936{
943 __be32 *p; 937 WARN_ON_ONCE(xdr_stream_encode_u32(xdr, n) < 0);
944
945 p = reserve_space(xdr, 4);
946 *p = cpu_to_be32(n);
947} 938}
948 939
949static void encode_uint64(struct xdr_stream *xdr, u64 n) 940static void encode_uint64(struct xdr_stream *xdr, u64 n)
950{ 941{
951 __be32 *p; 942 WARN_ON_ONCE(xdr_stream_encode_u64(xdr, n) < 0);
952
953 p = reserve_space(xdr, 8);
954 xdr_encode_hyper(p, n);
955} 943}
956 944
957static void encode_nfs4_seqid(struct xdr_stream *xdr, 945static void encode_nfs4_seqid(struct xdr_stream *xdr,
@@ -4294,15 +4282,12 @@ out_overflow:
4294 4282
4295static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len) 4283static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len)
4296{ 4284{
4297 __be32 *p; 4285 ssize_t ret = xdr_stream_decode_opaque_fixed(xdr, buf, len);
4298 4286 if (unlikely(ret < 0)) {
4299 p = xdr_inline_decode(xdr, len); 4287 print_overflow_msg(__func__, xdr);
4300 if (likely(p)) { 4288 return -EIO;
4301 memcpy(buf, p, len);
4302 return 0;
4303 } 4289 }
4304 print_overflow_msg(__func__, xdr); 4290 return 0;
4305 return -EIO;
4306} 4291}
4307 4292
4308static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid) 4293static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid)