Merge tag 'libnvdimm-for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm...
[linux-2.6-microblaze.git] / fs / nfs / nfs4xdr.c
index 2fc8f6f..cfcabc3 100644 (file)
@@ -54,6 +54,7 @@
 #include <linux/nfs_fs.h>
 
 #include "nfs4_fs.h"
+#include "nfs4trace.h"
 #include "internal.h"
 #include "nfs4idmap.h"
 #include "nfs4session.h"
@@ -214,14 +215,14 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
                                 nfs4_fattr_bitmap_maxsz)
 #define encode_read_maxsz      (op_encode_hdr_maxsz + \
                                 encode_stateid_maxsz + 3)
-#define decode_read_maxsz      (op_decode_hdr_maxsz + 2)
+#define decode_read_maxsz      (op_decode_hdr_maxsz + 2 + 1)
 #define encode_readdir_maxsz   (op_encode_hdr_maxsz + \
                                 2 + encode_verifier_maxsz + 5 + \
                                nfs4_label_maxsz)
 #define decode_readdir_maxsz   (op_decode_hdr_maxsz + \
-                                decode_verifier_maxsz)
+                                decode_verifier_maxsz + 1)
 #define encode_readlink_maxsz  (op_encode_hdr_maxsz)
-#define decode_readlink_maxsz  (op_decode_hdr_maxsz + 1)
+#define decode_readlink_maxsz  (op_decode_hdr_maxsz + 1 + 1)
 #define encode_write_maxsz     (op_encode_hdr_maxsz + \
                                 encode_stateid_maxsz + 4)
 #define decode_write_maxsz     (op_decode_hdr_maxsz + \
@@ -283,14 +284,14 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
 #define decode_delegreturn_maxsz (op_decode_hdr_maxsz)
 #define encode_getacl_maxsz    (encode_getattr_maxsz)
 #define decode_getacl_maxsz    (op_decode_hdr_maxsz + \
-                                nfs4_fattr_bitmap_maxsz + 1)
+                                nfs4_fattr_bitmap_maxsz + 1 + 1)
 #define encode_setacl_maxsz    (op_encode_hdr_maxsz + \
                                 encode_stateid_maxsz + 3)
 #define decode_setacl_maxsz    (decode_setattr_maxsz)
 #define encode_fs_locations_maxsz \
                                (encode_getattr_maxsz)
 #define decode_fs_locations_maxsz \
-                               (0)
+                               (1)
 #define encode_secinfo_maxsz   (op_encode_hdr_maxsz + nfs4_name_maxsz)
 #define decode_secinfo_maxsz   (op_decode_hdr_maxsz + 1 + ((NFS_MAX_SECFLAVORS * (16 + GSS_OID_MAX_LEN)) / 4))
 
@@ -391,12 +392,13 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
                                1 /* opaque devaddr4 length */ + \
                                  /* devaddr4 payload is read into page */ \
                                1 /* notification bitmap length */ + \
-                               1 /* notification bitmap, word 0 */)
+                               1 /* notification bitmap, word 0 */ + \
+                               1 /* possible XDR padding */)
 #define encode_layoutget_maxsz (op_encode_hdr_maxsz + 10 + \
                                encode_stateid_maxsz)
 #define decode_layoutget_maxsz (op_decode_hdr_maxsz + 8 + \
                                decode_stateid_maxsz + \
-                               XDR_QUADLEN(PNFS_LAYOUT_MAXSIZE))
+                               XDR_QUADLEN(PNFS_LAYOUT_MAXSIZE) + 1)
 #define encode_layoutcommit_maxsz (op_encode_hdr_maxsz +          \
                                2 /* offset */ + \
                                2 /* length */ + \
@@ -1015,12 +1017,11 @@ static void encode_compound_hdr(struct xdr_stream *xdr,
                                struct compound_hdr *hdr)
 {
        __be32 *p;
-       struct rpc_auth *auth = req->rq_cred->cr_auth;
 
        /* initialize running count of expected bytes in reply.
         * NOTE: the replied tag SHOULD be the same is the one sent,
         * but this is not required as a MUST for the server to do so. */
-       hdr->replen = RPC_REPHDRSIZE + auth->au_rslack + 3 + hdr->taglen;
+       hdr->replen = 3 + hdr->taglen;
 
        WARN_ON_ONCE(hdr->taglen > NFS4_MAXTAGLEN);
        encode_string(xdr, hdr->taglen, hdr->tag);
@@ -2340,9 +2341,9 @@ static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr,
        encode_getfattr_open(xdr, args->bitmask, args->open_bitmap, &hdr);
        if (args->lg_args) {
                encode_layoutget(xdr, args->lg_args, &hdr);
-               xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2,
-                                args->lg_args->layout.pages,
-                                0, args->lg_args->layout.pglen);
+               rpc_prepare_reply_pages(req, args->lg_args->layout.pages, 0,
+                                       args->lg_args->layout.pglen,
+                                       hdr.replen);
        }
        encode_nops(&hdr);
 }
@@ -2386,9 +2387,9 @@ static void nfs4_xdr_enc_open_noattr(struct rpc_rqst *req,
        encode_getfattr_open(xdr, args->bitmask, args->open_bitmap, &hdr);
        if (args->lg_args) {
                encode_layoutget(xdr, args->lg_args, &hdr);
-               xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2,
-                                args->lg_args->layout.pages,
-                                0, args->lg_args->layout.pglen);
+               rpc_prepare_reply_pages(req, args->lg_args->layout.pages, 0,
+                                       args->lg_args->layout.pglen,
+                                       hdr.replen);
        }
        encode_nops(&hdr);
 }
@@ -2498,8 +2499,8 @@ static void nfs4_xdr_enc_readlink(struct rpc_rqst *req, struct xdr_stream *xdr,
        encode_putfh(xdr, args->fh, &hdr);
        encode_readlink(xdr, args, req, &hdr);
 
-       xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2, args->pages,
-                       args->pgbase, args->pglen);
+       rpc_prepare_reply_pages(req, args->pages, args->pgbase,
+                               args->pglen, hdr.replen);
        encode_nops(&hdr);
 }
 
@@ -2519,11 +2520,8 @@ static void nfs4_xdr_enc_readdir(struct rpc_rqst *req, struct xdr_stream *xdr,
        encode_putfh(xdr, args->fh, &hdr);
        encode_readdir(xdr, args, req, &hdr);
 
-       xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2, args->pages,
-                        args->pgbase, args->count);
-       dprintk("%s: inlined page args = (%u, %p, %u, %u)\n",
-                       __func__, hdr.replen << 2, args->pages,
-                       args->pgbase, args->count);
+       rpc_prepare_reply_pages(req, args->pages, args->pgbase,
+                               args->count, hdr.replen);
        encode_nops(&hdr);
 }
 
@@ -2543,8 +2541,8 @@ static void nfs4_xdr_enc_read(struct rpc_rqst *req, struct xdr_stream *xdr,
        encode_putfh(xdr, args->fh, &hdr);
        encode_read(xdr, args, &hdr);
 
-       xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2,
-                        args->pages, args->pgbase, args->count);
+       rpc_prepare_reply_pages(req, args->pages, args->pgbase,
+                               args->count, hdr.replen);
        req->rq_rcv_buf.flags |= XDRBUF_READ;
        encode_nops(&hdr);
 }
@@ -2590,9 +2588,8 @@ static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr,
        encode_getattr(xdr, nfs4_acl_bitmap, NULL,
                        ARRAY_SIZE(nfs4_acl_bitmap), &hdr);
 
-       xdr_inline_pages(&req->rq_rcv_buf, replen << 2,
-               args->acl_pages, 0, args->acl_len);
-
+       rpc_prepare_reply_pages(req, args->acl_pages, 0,
+                               args->acl_len, replen);
        encode_nops(&hdr);
 }
 
@@ -2813,9 +2810,8 @@ static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req,
                encode_fs_locations(xdr, args->bitmask, &hdr);
        }
 
-       /* Set up reply kvec to capture returned fs_locations array. */
-       xdr_inline_pages(&req->rq_rcv_buf, replen << 2,
-                        (struct page **)&args->page, 0, PAGE_SIZE);
+       rpc_prepare_reply_pages(req, (struct page **)&args->page, 0,
+                               PAGE_SIZE, replen);
        encode_nops(&hdr);
 }
 
@@ -3017,10 +3013,8 @@ static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req,
 
        /* set up reply kvec. Subtract notification bitmap max size (2)
         * so that notification bitmap is put in xdr_buf tail */
-       xdr_inline_pages(&req->rq_rcv_buf, (hdr.replen - 2) << 2,
-                        args->pdev->pages, args->pdev->pgbase,
-                        args->pdev->pglen);
-
+       rpc_prepare_reply_pages(req, args->pdev->pages, args->pdev->pgbase,
+                               args->pdev->pglen, hdr.replen - 2);
        encode_nops(&hdr);
 }
 
@@ -3041,9 +3035,8 @@ static void nfs4_xdr_enc_layoutget(struct rpc_rqst *req,
        encode_putfh(xdr, NFS_FH(args->inode), &hdr);
        encode_layoutget(xdr, args, &hdr);
 
-       xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2,
-           args->layout.pages, 0, args->layout.pglen);
-
+       rpc_prepare_reply_pages(req, args->layout.pages, 0,
+                               args->layout.pglen, hdr.replen);
        encode_nops(&hdr);
 }
 
@@ -3144,22 +3137,12 @@ static void nfs4_xdr_enc_free_stateid(struct rpc_rqst *req,
 }
 #endif /* CONFIG_NFS_V4_1 */
 
-static void print_overflow_msg(const char *func, const struct xdr_stream *xdr)
-{
-       dprintk("nfs: %s: prematurely hit end of receive buffer. "
-               "Remaining buffer length is %tu words.\n",
-               func, xdr->end - xdr->p);
-}
-
 static int decode_opaque_inline(struct xdr_stream *xdr, unsigned int *len, char **string)
 {
        ssize_t ret = xdr_stream_decode_opaque_inline(xdr, (void **)string,
                        NFS4_OPAQUE_LIMIT);
-       if (unlikely(ret < 0)) {
-               if (ret == -EBADMSG)
-                       print_overflow_msg(__func__, xdr);
+       if (unlikely(ret < 0))
                return -EIO;
-       }
        *len = ret;
        return 0;
 }
@@ -3170,22 +3153,19 @@ static int decode_compound_hdr(struct xdr_stream *xdr, struct compound_hdr *hdr)
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        hdr->status = be32_to_cpup(p++);
        hdr->taglen = be32_to_cpup(p);
 
        p = xdr_inline_decode(xdr, hdr->taglen + 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        hdr->tag = (char *)p;
        p += XDR_QUADLEN(hdr->taglen);
        hdr->nops = be32_to_cpup(p);
        if (unlikely(hdr->nops < 1))
                return nfs4_stat_to_errno(hdr->status);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static bool __decode_op_hdr(struct xdr_stream *xdr, enum nfs_opnum4 expected,
@@ -3201,11 +3181,14 @@ static bool __decode_op_hdr(struct xdr_stream *xdr, enum nfs_opnum4 expected,
        opnum = be32_to_cpup(p++);
        if (unlikely(opnum != expected))
                goto out_bad_operation;
+       if (unlikely(*p != cpu_to_be32(NFS_OK)))
+               goto out_status;
+       *nfs_retval = 0;
+       return true;
+out_status:
        nfserr = be32_to_cpup(p);
-       if (nfserr == NFS_OK)
-               *nfs_retval = 0;
-       else
-               *nfs_retval = nfs4_stat_to_errno(nfserr);
+       trace_nfs4_xdr_status(opnum, nfserr);
+       *nfs_retval = nfs4_stat_to_errno(nfserr);
        return true;
 out_bad_operation:
        dprintk("nfs: Server returned operation"
@@ -3214,7 +3197,6 @@ out_bad_operation:
        *nfs_retval = -EREMOTEIO;
        return false;
 out_overflow:
-       print_overflow_msg(__func__, xdr);
        *nfs_retval = -EIO;
        return false;
 }
@@ -3235,10 +3217,9 @@ static int decode_ace(struct xdr_stream *xdr, void *ace)
        char *str;
 
        p = xdr_inline_decode(xdr, 12);
-       if (likely(p))
-               return decode_opaque_inline(xdr, &strlen, &str);
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
+       if (unlikely(!p))
+               return -EIO;
+       return decode_opaque_inline(xdr, &strlen, &str);
 }
 
 static ssize_t
@@ -3249,10 +3230,9 @@ decode_bitmap4(struct xdr_stream *xdr, uint32_t *bitmap, size_t sz)
        ret = xdr_stream_decode_uint32_array(xdr, bitmap, sz);
        if (likely(ret >= 0))
                return ret;
-       if (ret == -EMSGSIZE)
-               return sz;
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
+       if (ret != -EMSGSIZE)
+               return -EIO;
+       return sz;
 }
 
 static int decode_attr_bitmap(struct xdr_stream *xdr, uint32_t *bitmap)
@@ -3268,13 +3248,10 @@ static int decode_attr_length(struct xdr_stream *xdr, uint32_t *attrlen, unsigne
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        *attrlen = be32_to_cpup(p);
        *savep = xdr_stream_pos(xdr);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_supported(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *bitmask)
@@ -3303,7 +3280,7 @@ static int decode_attr_type(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *
        if (likely(bitmap[0] & FATTR4_WORD0_TYPE)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *type = be32_to_cpup(p);
                if (*type < NF4REG || *type > NF4NAMEDATTR) {
                        dprintk("%s: bad type %d\n", __func__, *type);
@@ -3314,9 +3291,6 @@ static int decode_attr_type(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *
        }
        dprintk("%s: type=0%o\n", __func__, nfs_type2fmt[*type]);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_fh_expire_type(struct xdr_stream *xdr,
@@ -3330,15 +3304,12 @@ static int decode_attr_fh_expire_type(struct xdr_stream *xdr,
        if (likely(bitmap[0] & FATTR4_WORD0_FH_EXPIRE_TYPE)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *type = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_FH_EXPIRE_TYPE;
        }
        dprintk("%s: expire type=0x%x\n", __func__, *type);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_change(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *change)
@@ -3352,7 +3323,7 @@ static int decode_attr_change(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
        if (likely(bitmap[0] & FATTR4_WORD0_CHANGE)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, change);
                bitmap[0] &= ~FATTR4_WORD0_CHANGE;
                ret = NFS_ATTR_FATTR_CHANGE;
@@ -3360,9 +3331,6 @@ static int decode_attr_change(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
        dprintk("%s: change attribute=%Lu\n", __func__,
                        (unsigned long long)*change);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_size(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *size)
@@ -3376,16 +3344,13 @@ static int decode_attr_size(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *
        if (likely(bitmap[0] & FATTR4_WORD0_SIZE)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, size);
                bitmap[0] &= ~FATTR4_WORD0_SIZE;
                ret = NFS_ATTR_FATTR_SIZE;
        }
        dprintk("%s: file size=%Lu\n", __func__, (unsigned long long)*size);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_link_support(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res)
@@ -3398,15 +3363,12 @@ static int decode_attr_link_support(struct xdr_stream *xdr, uint32_t *bitmap, ui
        if (likely(bitmap[0] & FATTR4_WORD0_LINK_SUPPORT)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *res = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_LINK_SUPPORT;
        }
        dprintk("%s: link support=%s\n", __func__, *res == 0 ? "false" : "true");
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_symlink_support(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res)
@@ -3419,15 +3381,12 @@ static int decode_attr_symlink_support(struct xdr_stream *xdr, uint32_t *bitmap,
        if (likely(bitmap[0] & FATTR4_WORD0_SYMLINK_SUPPORT)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *res = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_SYMLINK_SUPPORT;
        }
        dprintk("%s: symlink support=%s\n", __func__, *res == 0 ? "false" : "true");
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_fsid(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs_fsid *fsid)
@@ -3442,7 +3401,7 @@ static int decode_attr_fsid(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs
        if (likely(bitmap[0] & FATTR4_WORD0_FSID)) {
                p = xdr_inline_decode(xdr, 16);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                p = xdr_decode_hyper(p, &fsid->major);
                xdr_decode_hyper(p, &fsid->minor);
                bitmap[0] &= ~FATTR4_WORD0_FSID;
@@ -3452,9 +3411,6 @@ static int decode_attr_fsid(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs
                        (unsigned long long)fsid->major,
                        (unsigned long long)fsid->minor);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_lease_time(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res)
@@ -3467,15 +3423,12 @@ static int decode_attr_lease_time(struct xdr_stream *xdr, uint32_t *bitmap, uint
        if (likely(bitmap[0] & FATTR4_WORD0_LEASE_TIME)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *res = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_LEASE_TIME;
        }
        dprintk("%s: file size=%u\n", __func__, (unsigned int)*res);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_error(struct xdr_stream *xdr, uint32_t *bitmap, int32_t *res)
@@ -3487,14 +3440,11 @@ static int decode_attr_error(struct xdr_stream *xdr, uint32_t *bitmap, int32_t *
        if (likely(bitmap[0] & FATTR4_WORD0_RDATTR_ERROR)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                bitmap[0] &= ~FATTR4_WORD0_RDATTR_ERROR;
                *res = -be32_to_cpup(p);
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_exclcreat_supported(struct xdr_stream *xdr,
@@ -3526,13 +3476,13 @@ static int decode_attr_filehandle(struct xdr_stream *xdr, uint32_t *bitmap, stru
        if (likely(bitmap[0] & FATTR4_WORD0_FILEHANDLE)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                len = be32_to_cpup(p);
                if (len > NFS4_FHSIZE)
                        return -EIO;
                p = xdr_inline_decode(xdr, len);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                if (fh != NULL) {
                        memcpy(fh->data, p, len);
                        fh->size = len;
@@ -3540,9 +3490,6 @@ static int decode_attr_filehandle(struct xdr_stream *xdr, uint32_t *bitmap, stru
                bitmap[0] &= ~FATTR4_WORD0_FILEHANDLE;
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_aclsupport(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res)
@@ -3555,15 +3502,12 @@ static int decode_attr_aclsupport(struct xdr_stream *xdr, uint32_t *bitmap, uint
        if (likely(bitmap[0] & FATTR4_WORD0_ACLSUPPORT)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *res = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_ACLSUPPORT;
        }
        dprintk("%s: ACLs supported=%u\n", __func__, (unsigned int)*res);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_fileid(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *fileid)
@@ -3577,16 +3521,13 @@ static int decode_attr_fileid(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
        if (likely(bitmap[0] & FATTR4_WORD0_FILEID)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, fileid);
                bitmap[0] &= ~FATTR4_WORD0_FILEID;
                ret = NFS_ATTR_FATTR_FILEID;
        }
        dprintk("%s: fileid=%Lu\n", __func__, (unsigned long long)*fileid);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_mounted_on_fileid(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *fileid)
@@ -3600,16 +3541,13 @@ static int decode_attr_mounted_on_fileid(struct xdr_stream *xdr, uint32_t *bitma
        if (likely(bitmap[1] & FATTR4_WORD1_MOUNTED_ON_FILEID)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, fileid);
                bitmap[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
                ret = NFS_ATTR_FATTR_MOUNTED_ON_FILEID;
        }
        dprintk("%s: fileid=%Lu\n", __func__, (unsigned long long)*fileid);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_files_avail(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res)
@@ -3623,15 +3561,12 @@ static int decode_attr_files_avail(struct xdr_stream *xdr, uint32_t *bitmap, uin
        if (likely(bitmap[0] & FATTR4_WORD0_FILES_AVAIL)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[0] &= ~FATTR4_WORD0_FILES_AVAIL;
        }
        dprintk("%s: files avail=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_files_free(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res)
@@ -3645,15 +3580,12 @@ static int decode_attr_files_free(struct xdr_stream *xdr, uint32_t *bitmap, uint
        if (likely(bitmap[0] & FATTR4_WORD0_FILES_FREE)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[0] &= ~FATTR4_WORD0_FILES_FREE;
        }
        dprintk("%s: files free=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_files_total(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res)
@@ -3667,15 +3599,12 @@ static int decode_attr_files_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
        if (likely(bitmap[0] & FATTR4_WORD0_FILES_TOTAL)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[0] &= ~FATTR4_WORD0_FILES_TOTAL;
        }
        dprintk("%s: files total=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_pathname(struct xdr_stream *xdr, struct nfs4_pathname *path)
@@ -3686,7 +3615,7 @@ static int decode_pathname(struct xdr_stream *xdr, struct nfs4_pathname *path)
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        n = be32_to_cpup(p);
        if (n == 0)
                goto root_path;
@@ -3718,9 +3647,6 @@ out_eio:
        dprintk(" status %d", status);
        status = -EIO;
        goto out;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs4_fs_locations *res)
@@ -3745,7 +3671,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
                goto out;
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               goto out_eio;
        n = be32_to_cpup(p);
        if (n <= 0)
                goto out_eio;
@@ -3758,7 +3684,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
                loc = &res->locations[res->nlocations];
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       goto out_eio;
                m = be32_to_cpup(p);
 
                dprintk("%s: servers:\n", __func__);
@@ -3796,8 +3722,6 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
 out:
        dprintk("%s: fs_locations done, error = %d\n", __func__, status);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
 out_eio:
        status = -EIO;
        goto out;
@@ -3814,15 +3738,12 @@ static int decode_attr_maxfilesize(struct xdr_stream *xdr, uint32_t *bitmap, uin
        if (likely(bitmap[0] & FATTR4_WORD0_MAXFILESIZE)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[0] &= ~FATTR4_WORD0_MAXFILESIZE;
        }
        dprintk("%s: maxfilesize=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_maxlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *maxlink)
@@ -3836,15 +3757,12 @@ static int decode_attr_maxlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
        if (likely(bitmap[0] & FATTR4_WORD0_MAXLINK)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *maxlink = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_MAXLINK;
        }
        dprintk("%s: maxlink=%u\n", __func__, *maxlink);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_maxname(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *maxname)
@@ -3858,15 +3776,12 @@ static int decode_attr_maxname(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
        if (likely(bitmap[0] & FATTR4_WORD0_MAXNAME)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *maxname = be32_to_cpup(p);
                bitmap[0] &= ~FATTR4_WORD0_MAXNAME;
        }
        dprintk("%s: maxname=%u\n", __func__, *maxname);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_maxread(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res)
@@ -3881,7 +3796,7 @@ static int decode_attr_maxread(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
                uint64_t maxread;
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, &maxread);
                if (maxread > 0x7FFFFFFF)
                        maxread = 0x7FFFFFFF;
@@ -3890,9 +3805,6 @@ static int decode_attr_maxread(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
        }
        dprintk("%s: maxread=%lu\n", __func__, (unsigned long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_maxwrite(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res)
@@ -3907,7 +3819,7 @@ static int decode_attr_maxwrite(struct xdr_stream *xdr, uint32_t *bitmap, uint32
                uint64_t maxwrite;
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, &maxwrite);
                if (maxwrite > 0x7FFFFFFF)
                        maxwrite = 0x7FFFFFFF;
@@ -3916,9 +3828,6 @@ static int decode_attr_maxwrite(struct xdr_stream *xdr, uint32_t *bitmap, uint32
        }
        dprintk("%s: maxwrite=%lu\n", __func__, (unsigned long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_mode(struct xdr_stream *xdr, uint32_t *bitmap, umode_t *mode)
@@ -3933,7 +3842,7 @@ static int decode_attr_mode(struct xdr_stream *xdr, uint32_t *bitmap, umode_t *m
        if (likely(bitmap[1] & FATTR4_WORD1_MODE)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                tmp = be32_to_cpup(p);
                *mode = tmp & ~S_IFMT;
                bitmap[1] &= ~FATTR4_WORD1_MODE;
@@ -3941,9 +3850,6 @@ static int decode_attr_mode(struct xdr_stream *xdr, uint32_t *bitmap, umode_t *m
        }
        dprintk("%s: file mode=0%o\n", __func__, (unsigned int)*mode);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_nlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *nlink)
@@ -3957,16 +3863,13 @@ static int decode_attr_nlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t
        if (likely(bitmap[1] & FATTR4_WORD1_NUMLINKS)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                *nlink = be32_to_cpup(p);
                bitmap[1] &= ~FATTR4_WORD1_NUMLINKS;
                ret = NFS_ATTR_FATTR_NLINK;
        }
        dprintk("%s: nlink=%u\n", __func__, (unsigned int)*nlink);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static ssize_t decode_nfs4_string(struct xdr_stream *xdr,
@@ -4011,10 +3914,9 @@ static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap,
                return NFS_ATTR_FATTR_OWNER;
        }
 out:
-       if (len != -EBADMSG)
-               return 0;
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
+       if (len == -EBADMSG)
+               return -EIO;
+       return 0;
 }
 
 static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap,
@@ -4046,10 +3948,9 @@ static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap,
                return NFS_ATTR_FATTR_GROUP;
        }
 out:
-       if (len != -EBADMSG)
-               return 0;
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
+       if (len == -EBADMSG)
+               return -EIO;
+       return 0;
 }
 
 static int decode_attr_rdev(struct xdr_stream *xdr, uint32_t *bitmap, dev_t *rdev)
@@ -4066,7 +3967,7 @@ static int decode_attr_rdev(struct xdr_stream *xdr, uint32_t *bitmap, dev_t *rde
 
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                major = be32_to_cpup(p++);
                minor = be32_to_cpup(p);
                tmp = MKDEV(major, minor);
@@ -4077,9 +3978,6 @@ static int decode_attr_rdev(struct xdr_stream *xdr, uint32_t *bitmap, dev_t *rde
        }
        dprintk("%s: rdev=(0x%x:0x%x)\n", __func__, major, minor);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_space_avail(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res)
@@ -4093,15 +3991,12 @@ static int decode_attr_space_avail(struct xdr_stream *xdr, uint32_t *bitmap, uin
        if (likely(bitmap[1] & FATTR4_WORD1_SPACE_AVAIL)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[1] &= ~FATTR4_WORD1_SPACE_AVAIL;
        }
        dprintk("%s: space avail=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_space_free(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res)
@@ -4115,15 +4010,12 @@ static int decode_attr_space_free(struct xdr_stream *xdr, uint32_t *bitmap, uint
        if (likely(bitmap[1] & FATTR4_WORD1_SPACE_FREE)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[1] &= ~FATTR4_WORD1_SPACE_FREE;
        }
        dprintk("%s: space free=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_space_total(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res)
@@ -4137,15 +4029,12 @@ static int decode_attr_space_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
        if (likely(bitmap[1] & FATTR4_WORD1_SPACE_TOTAL)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
                bitmap[1] &= ~FATTR4_WORD1_SPACE_TOTAL;
        }
        dprintk("%s: space total=%Lu\n", __func__, (unsigned long long)*res);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *used)
@@ -4159,7 +4048,7 @@ static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint
        if (likely(bitmap[1] & FATTR4_WORD1_SPACE_USED)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, used);
                bitmap[1] &= ~FATTR4_WORD1_SPACE_USED;
                ret = NFS_ATTR_FATTR_SPACE_USED;
@@ -4167,9 +4056,6 @@ static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint
        dprintk("%s: space used=%Lu\n", __func__,
                        (unsigned long long)*used);
        return ret;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static __be32 *
@@ -4189,12 +4075,9 @@ static int decode_attr_time(struct xdr_stream *xdr, struct timespec *time)
 
        p = xdr_inline_decode(xdr, nfstime4_maxsz << 2);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        xdr_decode_nfstime4(p, time);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_time_access(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time)
@@ -4265,19 +4148,19 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap,
        if (likely(bitmap[2] & FATTR4_WORD2_SECURITY_LABEL)) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                lfs = be32_to_cpup(p++);
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                pi = be32_to_cpup(p++);
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                len = be32_to_cpup(p++);
                p = xdr_inline_decode(xdr, len);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                if (len < NFS4_MAXLABELLEN) {
                        if (label) {
                                memcpy(label->label, p, len);
@@ -4295,10 +4178,6 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap,
                dprintk("%s: label=%s, len=%d, PI=%d, LFS=%d\n", __func__,
                        (char *)label->label, label->len, label->pi, label->lfs);
        return status;
-
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_attr_time_modify(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time)
@@ -4342,14 +4221,11 @@ static int decode_change_info(struct xdr_stream *xdr, struct nfs4_change_info *c
 
        p = xdr_inline_decode(xdr, 20);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        cinfo->atomic = be32_to_cpup(p++);
        p = xdr_decode_hyper(p, &cinfo->before);
        xdr_decode_hyper(p, &cinfo->after);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_access(struct xdr_stream *xdr, u32 *supported, u32 *access)
@@ -4363,24 +4239,19 @@ static int decode_access(struct xdr_stream *xdr, u32 *supported, u32 *access)
                return status;
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        supp = be32_to_cpup(p++);
        acc = be32_to_cpup(p);
        *supported = supp;
        *access = acc;
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_opaque_fixed(struct xdr_stream *xdr, void *buf, size_t len)
 {
        ssize_t ret = xdr_stream_decode_opaque_fixed(xdr, buf, len);
-       if (unlikely(ret < 0)) {
-               print_overflow_msg(__func__, xdr);
+       if (unlikely(ret < 0))
                return -EIO;
-       }
        return 0;
 }
 
@@ -4460,13 +4331,11 @@ static int decode_create(struct xdr_stream *xdr, struct nfs4_change_info *cinfo)
                return status;
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        bmlen = be32_to_cpup(p);
        p = xdr_inline_decode(xdr, bmlen << 2);
        if (likely(p))
                return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
        return -EIO;
 }
 
@@ -4574,13 +4443,10 @@ static int decode_threshold_hint(struct xdr_stream *xdr,
        if (likely(bitmap[0] & hint_bit)) {
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                xdr_decode_hyper(p, res);
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_first_threshold_item4(struct xdr_stream *xdr,
@@ -4593,10 +4459,8 @@ static int decode_first_threshold_item4(struct xdr_stream *xdr,
 
        /* layout type */
        p = xdr_inline_decode(xdr, 4);
-       if (unlikely(!p)) {
-               print_overflow_msg(__func__, xdr);
+       if (unlikely(!p))
                return -EIO;
-       }
        res->l_type = be32_to_cpup(p);
 
        /* thi_hintset bitmap */
@@ -4654,7 +4518,7 @@ static int decode_attr_mdsthreshold(struct xdr_stream *xdr,
                        return -EREMOTEIO;
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                num = be32_to_cpup(p);
                if (num == 0)
                        return 0;
@@ -4667,9 +4531,6 @@ static int decode_attr_mdsthreshold(struct xdr_stream *xdr,
                bitmap[2] &= ~FATTR4_WORD2_MDSTHRESHOLD;
        }
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_getfattr_attrs(struct xdr_stream *xdr, uint32_t *bitmap,
@@ -4857,7 +4718,7 @@ static int decode_pnfs_layout_types(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        fsinfo->nlayouttypes = be32_to_cpup(p);
 
        /* pNFS is not supported by the underlying file system */
@@ -4867,7 +4728,7 @@ static int decode_pnfs_layout_types(struct xdr_stream *xdr,
        /* Decode and set first layout type, move xdr->p past unused types */
        p = xdr_inline_decode(xdr, fsinfo->nlayouttypes * 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
 
        /* If we get too many, then just cap it at the max */
        if (fsinfo->nlayouttypes > NFS_MAX_LAYOUT_TYPES) {
@@ -4879,9 +4740,6 @@ static int decode_pnfs_layout_types(struct xdr_stream *xdr,
        for(i = 0; i < fsinfo->nlayouttypes; ++i)
                fsinfo->layouttype[i] = be32_to_cpup(p++);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 /*
@@ -4915,10 +4773,8 @@ static int decode_attr_layout_blksize(struct xdr_stream *xdr, uint32_t *bitmap,
        *res = 0;
        if (bitmap[2] & FATTR4_WORD2_LAYOUT_BLKSIZE) {
                p = xdr_inline_decode(xdr, 4);
-               if (unlikely(!p)) {
-                       print_overflow_msg(__func__, xdr);
+               if (unlikely(!p))
                        return -EIO;
-               }
                *res = be32_to_cpup(p);
                bitmap[2] &= ~FATTR4_WORD2_LAYOUT_BLKSIZE;
        }
@@ -4937,10 +4793,8 @@ static int decode_attr_clone_blksize(struct xdr_stream *xdr, uint32_t *bitmap,
        *res = 0;
        if (bitmap[2] & FATTR4_WORD2_CLONE_BLKSIZE) {
                p = xdr_inline_decode(xdr, 4);
-               if (unlikely(!p)) {
-                       print_overflow_msg(__func__, xdr);
+               if (unlikely(!p))
                        return -EIO;
-               }
                *res = be32_to_cpup(p);
                bitmap[2] &= ~FATTR4_WORD2_CLONE_BLKSIZE;
        }
@@ -5016,19 +4870,16 @@ static int decode_getfh(struct xdr_stream *xdr, struct nfs_fh *fh)
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        len = be32_to_cpup(p);
        if (len > NFS4_FHSIZE)
                return -EIO;
        fh->size = len;
        p = xdr_inline_decode(xdr, len);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        memcpy(fh->data, p, len);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_link(struct xdr_stream *xdr, struct nfs4_change_info *cinfo)
@@ -5052,7 +4903,7 @@ static int decode_lock_denied (struct xdr_stream *xdr, struct file_lock *fl)
 
        p = xdr_inline_decode(xdr, 32); /* read 32 bytes */
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        p = xdr_decode_hyper(p, &offset); /* read 2 8-byte long words */
        p = xdr_decode_hyper(p, &length);
        type = be32_to_cpup(p++); /* 4 byte read */
@@ -5069,11 +4920,9 @@ static int decode_lock_denied (struct xdr_stream *xdr, struct file_lock *fl)
        p = xdr_decode_hyper(p, &clientid); /* read 8 bytes */
        namelen = be32_to_cpup(p); /* read 4 bytes */  /* have read all 32 bytes now */
        p = xdr_inline_decode(xdr, namelen); /* variable size field */
-       if (likely(p))
-               return -NFS4ERR_DENIED;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
+       if (likely(!p))
+               return -EIO;
+       return -NFS4ERR_DENIED;
 }
 
 static int decode_lock(struct xdr_stream *xdr, struct nfs_lock_res *res)
@@ -5142,7 +4991,7 @@ static int decode_space_limit(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 12);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        limit_type = be32_to_cpup(p++);
        switch (limit_type) {
        case NFS4_LIMIT_SIZE:
@@ -5156,9 +5005,6 @@ static int decode_space_limit(struct xdr_stream *xdr,
        maxsize >>= PAGE_SHIFT;
        *pagemod_limit = min_t(u64, maxsize, ULONG_MAX);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_rw_delegation(struct xdr_stream *xdr,
@@ -5173,7 +5019,7 @@ static int decode_rw_delegation(struct xdr_stream *xdr,
                return status;
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->do_recall = be32_to_cpup(p);
 
        switch (delegation_type) {
@@ -5186,9 +5032,6 @@ static int decode_rw_delegation(struct xdr_stream *xdr,
                                return -EIO;
        }
        return decode_ace(xdr, NULL);
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_no_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
@@ -5198,7 +5041,7 @@ static int decode_no_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        why_no_delegation = be32_to_cpup(p);
        switch (why_no_delegation) {
                case WND4_CONTENTION:
@@ -5207,9 +5050,6 @@ static int decode_no_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
                        /* Ignore for now */
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
@@ -5219,7 +5059,7 @@ static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        delegation_type = be32_to_cpup(p);
        res->delegation_type = 0;
        switch (delegation_type) {
@@ -5232,9 +5072,6 @@ static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
                return decode_no_delegation(xdr, res);
        }
        return -EIO;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
@@ -5256,7 +5093,7 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->rflags = be32_to_cpup(p++);
        bmlen = be32_to_cpup(p);
        if (bmlen > 10)
@@ -5264,7 +5101,7 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
 
        p = xdr_inline_decode(xdr, bmlen << 2);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        savewords = min_t(uint32_t, bmlen, NFS4_BITMAP_SIZE);
        for (i = 0; i < savewords; ++i)
                res->attrset[i] = be32_to_cpup(p++);
@@ -5275,9 +5112,6 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
 xdr_error:
        dprintk("%s: Bitmap too large! Length = %u\n", __func__, bmlen);
        return -EIO;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmres *res)
@@ -5326,7 +5160,7 @@ static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req,
                return status;
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        eof = be32_to_cpup(p++);
        count = be32_to_cpup(p);
        recvd = xdr_read_pages(xdr, count);
@@ -5339,9 +5173,6 @@ static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req,
        res->eof = eof;
        res->count = count;
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct nfs4_readdir_res *readdir)
@@ -5374,7 +5205,7 @@ static int decode_readlink(struct xdr_stream *xdr, struct rpc_rqst *req)
        /* Convert length of symlink */
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        len = be32_to_cpup(p);
        if (len >= rcvbuf->page_len || len <= 0) {
                dprintk("nfs: server returned giant symlink!\n");
@@ -5395,9 +5226,6 @@ static int decode_readlink(struct xdr_stream *xdr, struct rpc_rqst *req)
         */
        xdr_terminate_string(rcvbuf, len);
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_remove(struct xdr_stream *xdr, struct nfs4_change_info *cinfo)
@@ -5500,7 +5328,6 @@ static int decode_setattr(struct xdr_stream *xdr)
                return status;
        if (decode_bitmap4(xdr, NULL, 0) >= 0)
                return 0;
-       print_overflow_msg(__func__, xdr);
        return -EIO;
 }
 
@@ -5512,7 +5339,7 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs4_setclientid_re
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        opnum = be32_to_cpup(p++);
        if (opnum != OP_SETCLIENTID) {
                dprintk("nfs: decode_setclientid: Server returned operation"
@@ -5523,7 +5350,7 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs4_setclientid_re
        if (nfserr == NFS_OK) {
                p = xdr_inline_decode(xdr, 8 + NFS4_VERIFIER_SIZE);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                p = xdr_decode_hyper(p, &res->clientid);
                memcpy(res->confirm.data, p, NFS4_VERIFIER_SIZE);
        } else if (nfserr == NFSERR_CLID_INUSE) {
@@ -5532,28 +5359,25 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs4_setclientid_re
                /* skip netid string */
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                len = be32_to_cpup(p);
                p = xdr_inline_decode(xdr, len);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
 
                /* skip uaddr string */
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                len = be32_to_cpup(p);
                p = xdr_inline_decode(xdr, len);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                return -NFSERR_CLID_INUSE;
        } else
                return nfs4_stat_to_errno(nfserr);
 
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_setclientid_confirm(struct xdr_stream *xdr)
@@ -5572,13 +5396,10 @@ static int decode_write(struct xdr_stream *xdr, struct nfs_pgio_res *res)
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->count = be32_to_cpup(p++);
        res->verf->committed = be32_to_cpup(p++);
        return decode_write_verifier(xdr, &res->verf->verifier);
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_delegreturn(struct xdr_stream *xdr)
@@ -5594,30 +5415,24 @@ static int decode_secinfo_gss(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        oid_len = be32_to_cpup(p);
        if (oid_len > GSS_OID_MAX_LEN)
-               goto out_err;
+               return -EINVAL;
 
        p = xdr_inline_decode(xdr, oid_len);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        memcpy(flavor->flavor_info.oid.data, p, oid_len);
        flavor->flavor_info.oid.len = oid_len;
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        flavor->flavor_info.qop = be32_to_cpup(p++);
        flavor->flavor_info.service = be32_to_cpup(p);
 
        return 0;
-
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
-out_err:
-       return -EINVAL;
 }
 
 static int decode_secinfo_common(struct xdr_stream *xdr, struct nfs4_secinfo_res *res)
@@ -5629,7 +5444,7 @@ static int decode_secinfo_common(struct xdr_stream *xdr, struct nfs4_secinfo_res
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
 
        res->flavors->num_flavors = 0;
        num_flavors = be32_to_cpup(p);
@@ -5641,7 +5456,7 @@ static int decode_secinfo_common(struct xdr_stream *xdr, struct nfs4_secinfo_res
 
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                sec_flavor->flavor = be32_to_cpup(p);
 
                if (sec_flavor->flavor == RPC_AUTH_GSS) {
@@ -5655,9 +5470,6 @@ static int decode_secinfo_common(struct xdr_stream *xdr, struct nfs4_secinfo_res
        status = 0;
 out:
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_secinfo(struct xdr_stream *xdr, struct nfs4_secinfo_res *res)
@@ -5711,11 +5523,11 @@ static int decode_exchange_id(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        xdr_decode_hyper(p, &res->clientid);
        p = xdr_inline_decode(xdr, 12);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->seqid = be32_to_cpup(p++);
        res->flags = be32_to_cpup(p++);
 
@@ -5739,7 +5551,7 @@ static int decode_exchange_id(struct xdr_stream *xdr,
        /* server_owner4.so_minor_id */
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        p = xdr_decode_hyper(p, &res->server_owner->minor_id);
 
        /* server_owner4.so_major_id */
@@ -5759,7 +5571,7 @@ static int decode_exchange_id(struct xdr_stream *xdr,
        /* Implementation Id */
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        impl_id_count = be32_to_cpup(p++);
 
        if (impl_id_count) {
@@ -5778,16 +5590,13 @@ static int decode_exchange_id(struct xdr_stream *xdr,
                /* nii_date */
                p = xdr_inline_decode(xdr, 12);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
                p = xdr_decode_hyper(p, &res->impl_id->date.seconds);
                res->impl_id->date.nseconds = be32_to_cpup(p);
 
                /* if there's more than one entry, ignore the rest */
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_chan_attrs(struct xdr_stream *xdr,
@@ -5798,7 +5607,7 @@ static int decode_chan_attrs(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 28);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        val = be32_to_cpup(p++);        /* headerpadsz */
        if (val)
                return -EINVAL;         /* no support for header padding yet */
@@ -5816,12 +5625,9 @@ static int decode_chan_attrs(struct xdr_stream *xdr,
        if (nr_attrs == 1) {
                p = xdr_inline_decode(xdr, 4); /* skip rdma_attrs */
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_sessionid(struct xdr_stream *xdr, struct nfs4_sessionid *sid)
@@ -5844,7 +5650,7 @@ static int decode_bind_conn_to_session(struct xdr_stream *xdr,
        /* dir flags, rdma mode bool */
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
 
        res->dir = be32_to_cpup(p++);
        if (res->dir == 0 || res->dir > NFS4_CDFS4_BOTH)
@@ -5855,9 +5661,6 @@ static int decode_bind_conn_to_session(struct xdr_stream *xdr,
                res->use_conn_in_rdma_mode = true;
 
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_create_session(struct xdr_stream *xdr,
@@ -5875,7 +5678,7 @@ static int decode_create_session(struct xdr_stream *xdr,
        /* seqid, flags */
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->seqid = be32_to_cpup(p++);
        res->flags = be32_to_cpup(p);
 
@@ -5884,9 +5687,6 @@ static int decode_create_session(struct xdr_stream *xdr,
        if (!status)
                status = decode_chan_attrs(xdr, &res->bc_attrs);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_destroy_session(struct xdr_stream *xdr, void *dummy)
@@ -5967,7 +5767,6 @@ out_err:
        res->sr_status = status;
        return status;
 out_overflow:
-       print_overflow_msg(__func__, xdr);
        status = -EIO;
        goto out_err;
 #else  /* CONFIG_NFS_V4_1 */
@@ -5995,7 +5794,7 @@ static int decode_getdeviceinfo(struct xdr_stream *xdr,
                if (status == -ETOOSMALL) {
                        p = xdr_inline_decode(xdr, 4);
                        if (unlikely(!p))
-                               goto out_overflow;
+                               return -EIO;
                        pdev->mincount = be32_to_cpup(p);
                        dprintk("%s: Min count too small. mincnt = %u\n",
                                __func__, pdev->mincount);
@@ -6005,7 +5804,7 @@ static int decode_getdeviceinfo(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 8);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        type = be32_to_cpup(p++);
        if (type != pdev->layout_type) {
                dprintk("%s: layout mismatch req: %u pdev: %u\n",
@@ -6019,19 +5818,19 @@ static int decode_getdeviceinfo(struct xdr_stream *xdr,
         */
        pdev->mincount = be32_to_cpup(p);
        if (xdr_read_pages(xdr, pdev->mincount) != pdev->mincount)
-               goto out_overflow;
+               return -EIO;
 
        /* Parse notification bitmap, verifying that it is zero. */
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        len = be32_to_cpup(p);
        if (len) {
                uint32_t i;
 
                p = xdr_inline_decode(xdr, 4 * len);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
 
                res->notification = be32_to_cpup(p++);
                for (i = 1; i < len; i++) {
@@ -6043,9 +5842,6 @@ static int decode_getdeviceinfo(struct xdr_stream *xdr,
                }
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
@@ -6115,7 +5911,6 @@ out:
        res->status = status;
        return status;
 out_overflow:
-       print_overflow_msg(__func__, xdr);
        status = -EIO;
        goto out;
 }
@@ -6131,16 +5926,13 @@ static int decode_layoutreturn(struct xdr_stream *xdr,
                return status;
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->lrs_present = be32_to_cpup(p);
        if (res->lrs_present)
                status = decode_layout_stateid(xdr, &res->stateid);
        else
                nfs4_stateid_copy(&res->stateid, &invalid_stateid);
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_layoutcommit(struct xdr_stream *xdr,
@@ -6158,19 +5950,16 @@ static int decode_layoutcommit(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        sizechanged = be32_to_cpup(p);
 
        if (sizechanged) {
                /* throw away new size */
                p = xdr_inline_decode(xdr, 8);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EIO;
        }
        return 0;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EIO;
 }
 
 static int decode_test_stateid(struct xdr_stream *xdr,
@@ -6186,21 +5975,17 @@ static int decode_test_stateid(struct xdr_stream *xdr,
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        num_res = be32_to_cpup(p++);
        if (num_res != 1)
-               goto out;
+               return -EIO;
 
        p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EIO;
        res->status = be32_to_cpup(p++);
 
        return status;
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-out:
-       return -EIO;
 }
 
 static int decode_free_stateid(struct xdr_stream *xdr,
@@ -7570,11 +7355,11 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
        uint64_t new_cookie;
        __be32 *p = xdr_inline_decode(xdr, 4);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EAGAIN;
        if (*p == xdr_zero) {
                p = xdr_inline_decode(xdr, 4);
                if (unlikely(!p))
-                       goto out_overflow;
+                       return -EAGAIN;
                if (*p == xdr_zero)
                        return -EAGAIN;
                entry->eof = 1;
@@ -7583,13 +7368,13 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
 
        p = xdr_inline_decode(xdr, 12);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EAGAIN;
        p = xdr_decode_hyper(p, &new_cookie);
        entry->len = be32_to_cpup(p);
 
        p = xdr_inline_decode(xdr, entry->len);
        if (unlikely(!p))
-               goto out_overflow;
+               return -EAGAIN;
        entry->name = (const char *) p;
 
        /*
@@ -7601,14 +7386,14 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
        entry->fattr->valid = 0;
 
        if (decode_attr_bitmap(xdr, bitmap) < 0)
-               goto out_overflow;
+               return -EAGAIN;
 
        if (decode_attr_length(xdr, &len, &savep) < 0)
-               goto out_overflow;
+               return -EAGAIN;
 
        if (decode_getfattr_attrs(xdr, bitmap, entry->fattr, entry->fh,
                        NULL, entry->label, entry->server) < 0)
-               goto out_overflow;
+               return -EAGAIN;
        if (entry->fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
                entry->ino = entry->fattr->mounted_on_fileid;
        else if (entry->fattr->valid & NFS_ATTR_FATTR_FILEID)
@@ -7622,10 +7407,6 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
        entry->cookie = new_cookie;
 
        return 0;
-
-out_overflow:
-       print_overflow_msg(__func__, xdr);
-       return -EAGAIN;
 }
 
 /*
@@ -7791,6 +7572,7 @@ const struct rpc_procinfo nfs4_procedures[] = {
        PROC42(COPY,            enc_copy,               dec_copy),
        PROC42(OFFLOAD_CANCEL,  enc_offload_cancel,     dec_offload_cancel),
        PROC(LOOKUPP,           enc_lookupp,            dec_lookupp),
+       PROC42(LAYOUTERROR,     enc_layouterror,        dec_layouterror),
 };
 
 static unsigned int nfs_version4_counts[ARRAY_SIZE(nfs4_procedures)];