diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-02-19 16:08:26 -0500 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2017-02-21 16:56:16 -0500 |
commit | ab6e9aaf16cfdfca630f9745fd6d453818df7f64 (patch) | |
tree | 0518bb63cde9902f4686eea336d665f38aee182d | |
parent | 0ae060ca2bdfe11181094699b0f76437ec210b17 (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.c | 8 | ||||
-rw-r--r-- | fs/nfs/flexfilelayout/flexfilelayout.c | 5 | ||||
-rw-r--r-- | fs/nfs/nfs4xdr.c | 33 |
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 | ||
583 | static __be32 encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) | 583 | static __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, | |||
1949 | static void | 1949 | static void |
1950 | encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) | 1950 | encode_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 | ||
1958 | static void | 1955 | static 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 | ||
925 | static void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len) | 925 | static 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 | ||
933 | static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *str) | 930 | static 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 | ||
941 | static void encode_uint32(struct xdr_stream *xdr, u32 n) | 935 | static 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 | ||
949 | static void encode_uint64(struct xdr_stream *xdr, u64 n) | 940 | static 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 | ||
957 | static void encode_nfs4_seqid(struct xdr_stream *xdr, | 945 | static void encode_nfs4_seqid(struct xdr_stream *xdr, |
@@ -4294,15 +4282,12 @@ out_overflow: | |||
4294 | 4282 | ||
4295 | static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len) | 4283 | static 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 | ||
4308 | static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid) | 4293 | static int decode_stateid(struct xdr_stream *xdr, nfs4_stateid *stateid) |