aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenny Halevy <bhalevy@panasas.com>2009-08-14 10:20:19 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2009-08-14 14:02:26 -0400
commitcccddf4f5580131c9b963900e1d3400655e633cc (patch)
tree656eec24843a3c3ae28ee5d227e8ade80aa31c1f
parentc0eae66ece40bdb8cd88c5106834b71a1c9f421c (diff)
nfs: nfs4xdr: optimize low level decoding
do not increment decoding ptr if not needed. Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/nfs4xdr.c118
1 files changed, 59 insertions, 59 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index b0d690c3a24c..14b6f513648f 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -2437,7 +2437,7 @@ static int decode_opaque_inline(struct xdr_stream *xdr, unsigned int *len, char
2437 p = xdr_inline_decode(xdr, 4); 2437 p = xdr_inline_decode(xdr, 4);
2438 if (unlikely(!p)) 2438 if (unlikely(!p))
2439 goto out_overflow; 2439 goto out_overflow;
2440 *len = be32_to_cpup(p++); 2440 *len = be32_to_cpup(p);
2441 p = xdr_inline_decode(xdr, *len); 2441 p = xdr_inline_decode(xdr, *len);
2442 if (unlikely(!p)) 2442 if (unlikely(!p))
2443 goto out_overflow; 2443 goto out_overflow;
@@ -2456,14 +2456,14 @@ static int decode_compound_hdr(struct xdr_stream *xdr, struct compound_hdr *hdr)
2456 if (unlikely(!p)) 2456 if (unlikely(!p))
2457 goto out_overflow; 2457 goto out_overflow;
2458 hdr->status = be32_to_cpup(p++); 2458 hdr->status = be32_to_cpup(p++);
2459 hdr->taglen = be32_to_cpup(p++); 2459 hdr->taglen = be32_to_cpup(p);
2460 2460
2461 p = xdr_inline_decode(xdr, hdr->taglen + 4); 2461 p = xdr_inline_decode(xdr, hdr->taglen + 4);
2462 if (unlikely(!p)) 2462 if (unlikely(!p))
2463 goto out_overflow; 2463 goto out_overflow;
2464 hdr->tag = (char *)p; 2464 hdr->tag = (char *)p;
2465 p += XDR_QUADLEN(hdr->taglen); 2465 p += XDR_QUADLEN(hdr->taglen);
2466 hdr->nops = be32_to_cpup(p++); 2466 hdr->nops = be32_to_cpup(p);
2467 if (unlikely(hdr->nops < 1)) 2467 if (unlikely(hdr->nops < 1))
2468 return nfs4_stat_to_errno(hdr->status); 2468 return nfs4_stat_to_errno(hdr->status);
2469 return 0; 2469 return 0;
@@ -2488,7 +2488,7 @@ static int decode_op_hdr(struct xdr_stream *xdr, enum nfs_opnum4 expected)
2488 opnum, expected); 2488 opnum, expected);
2489 return -EIO; 2489 return -EIO;
2490 } 2490 }
2491 nfserr = be32_to_cpup(p++); 2491 nfserr = be32_to_cpup(p);
2492 if (nfserr != NFS_OK) 2492 if (nfserr != NFS_OK)
2493 return nfs4_stat_to_errno(nfserr); 2493 return nfs4_stat_to_errno(nfserr);
2494 return 0; 2494 return 0;
@@ -2519,7 +2519,7 @@ static int decode_attr_bitmap(struct xdr_stream *xdr, uint32_t *bitmap)
2519 p = xdr_inline_decode(xdr, 4); 2519 p = xdr_inline_decode(xdr, 4);
2520 if (unlikely(!p)) 2520 if (unlikely(!p))
2521 goto out_overflow; 2521 goto out_overflow;
2522 bmlen = be32_to_cpup(p++); 2522 bmlen = be32_to_cpup(p);
2523 2523
2524 bitmap[0] = bitmap[1] = 0; 2524 bitmap[0] = bitmap[1] = 0;
2525 p = xdr_inline_decode(xdr, (bmlen << 2)); 2525 p = xdr_inline_decode(xdr, (bmlen << 2));
@@ -2528,7 +2528,7 @@ static int decode_attr_bitmap(struct xdr_stream *xdr, uint32_t *bitmap)
2528 if (bmlen > 0) { 2528 if (bmlen > 0) {
2529 bitmap[0] = be32_to_cpup(p++); 2529 bitmap[0] = be32_to_cpup(p++);
2530 if (bmlen > 1) 2530 if (bmlen > 1)
2531 bitmap[1] = be32_to_cpup(p++); 2531 bitmap[1] = be32_to_cpup(p);
2532 } 2532 }
2533 return 0; 2533 return 0;
2534out_overflow: 2534out_overflow:
@@ -2543,7 +2543,7 @@ static inline int decode_attr_length(struct xdr_stream *xdr, uint32_t *attrlen,
2543 p = xdr_inline_decode(xdr, 4); 2543 p = xdr_inline_decode(xdr, 4);
2544 if (unlikely(!p)) 2544 if (unlikely(!p))
2545 goto out_overflow; 2545 goto out_overflow;
2546 *attrlen = be32_to_cpup(p++); 2546 *attrlen = be32_to_cpup(p);
2547 *savep = xdr->p; 2547 *savep = xdr->p;
2548 return 0; 2548 return 0;
2549out_overflow: 2549out_overflow:
@@ -2574,7 +2574,7 @@ static int decode_attr_type(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *
2574 p = xdr_inline_decode(xdr, 4); 2574 p = xdr_inline_decode(xdr, 4);
2575 if (unlikely(!p)) 2575 if (unlikely(!p))
2576 goto out_overflow; 2576 goto out_overflow;
2577 *type = be32_to_cpup(p++); 2577 *type = be32_to_cpup(p);
2578 if (*type < NF4REG || *type > NF4NAMEDATTR) { 2578 if (*type < NF4REG || *type > NF4NAMEDATTR) {
2579 dprintk("%s: bad type %d\n", __func__, *type); 2579 dprintk("%s: bad type %d\n", __func__, *type);
2580 return -EIO; 2580 return -EIO;
@@ -2601,7 +2601,7 @@ static int decode_attr_change(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
2601 p = xdr_inline_decode(xdr, 8); 2601 p = xdr_inline_decode(xdr, 8);
2602 if (unlikely(!p)) 2602 if (unlikely(!p))
2603 goto out_overflow; 2603 goto out_overflow;
2604 p = xdr_decode_hyper(p, change); 2604 xdr_decode_hyper(p, change);
2605 bitmap[0] &= ~FATTR4_WORD0_CHANGE; 2605 bitmap[0] &= ~FATTR4_WORD0_CHANGE;
2606 ret = NFS_ATTR_FATTR_CHANGE; 2606 ret = NFS_ATTR_FATTR_CHANGE;
2607 } 2607 }
@@ -2625,7 +2625,7 @@ static int decode_attr_size(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *
2625 p = xdr_inline_decode(xdr, 8); 2625 p = xdr_inline_decode(xdr, 8);
2626 if (unlikely(!p)) 2626 if (unlikely(!p))
2627 goto out_overflow; 2627 goto out_overflow;
2628 p = xdr_decode_hyper(p, size); 2628 xdr_decode_hyper(p, size);
2629 bitmap[0] &= ~FATTR4_WORD0_SIZE; 2629 bitmap[0] &= ~FATTR4_WORD0_SIZE;
2630 ret = NFS_ATTR_FATTR_SIZE; 2630 ret = NFS_ATTR_FATTR_SIZE;
2631 } 2631 }
@@ -2647,7 +2647,7 @@ static int decode_attr_link_support(struct xdr_stream *xdr, uint32_t *bitmap, ui
2647 p = xdr_inline_decode(xdr, 4); 2647 p = xdr_inline_decode(xdr, 4);
2648 if (unlikely(!p)) 2648 if (unlikely(!p))
2649 goto out_overflow; 2649 goto out_overflow;
2650 *res = be32_to_cpup(p++); 2650 *res = be32_to_cpup(p);
2651 bitmap[0] &= ~FATTR4_WORD0_LINK_SUPPORT; 2651 bitmap[0] &= ~FATTR4_WORD0_LINK_SUPPORT;
2652 } 2652 }
2653 dprintk("%s: link support=%s\n", __func__, *res == 0 ? "false" : "true"); 2653 dprintk("%s: link support=%s\n", __func__, *res == 0 ? "false" : "true");
@@ -2668,7 +2668,7 @@ static int decode_attr_symlink_support(struct xdr_stream *xdr, uint32_t *bitmap,
2668 p = xdr_inline_decode(xdr, 4); 2668 p = xdr_inline_decode(xdr, 4);
2669 if (unlikely(!p)) 2669 if (unlikely(!p))
2670 goto out_overflow; 2670 goto out_overflow;
2671 *res = be32_to_cpup(p++); 2671 *res = be32_to_cpup(p);
2672 bitmap[0] &= ~FATTR4_WORD0_SYMLINK_SUPPORT; 2672 bitmap[0] &= ~FATTR4_WORD0_SYMLINK_SUPPORT;
2673 } 2673 }
2674 dprintk("%s: symlink support=%s\n", __func__, *res == 0 ? "false" : "true"); 2674 dprintk("%s: symlink support=%s\n", __func__, *res == 0 ? "false" : "true");
@@ -2692,7 +2692,7 @@ static int decode_attr_fsid(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs
2692 if (unlikely(!p)) 2692 if (unlikely(!p))
2693 goto out_overflow; 2693 goto out_overflow;
2694 p = xdr_decode_hyper(p, &fsid->major); 2694 p = xdr_decode_hyper(p, &fsid->major);
2695 p = xdr_decode_hyper(p, &fsid->minor); 2695 xdr_decode_hyper(p, &fsid->minor);
2696 bitmap[0] &= ~FATTR4_WORD0_FSID; 2696 bitmap[0] &= ~FATTR4_WORD0_FSID;
2697 ret = NFS_ATTR_FATTR_FSID; 2697 ret = NFS_ATTR_FATTR_FSID;
2698 } 2698 }
@@ -2716,7 +2716,7 @@ static int decode_attr_lease_time(struct xdr_stream *xdr, uint32_t *bitmap, uint
2716 p = xdr_inline_decode(xdr, 4); 2716 p = xdr_inline_decode(xdr, 4);
2717 if (unlikely(!p)) 2717 if (unlikely(!p))
2718 goto out_overflow; 2718 goto out_overflow;
2719 *res = be32_to_cpup(p++); 2719 *res = be32_to_cpup(p);
2720 bitmap[0] &= ~FATTR4_WORD0_LEASE_TIME; 2720 bitmap[0] &= ~FATTR4_WORD0_LEASE_TIME;
2721 } 2721 }
2722 dprintk("%s: file size=%u\n", __func__, (unsigned int)*res); 2722 dprintk("%s: file size=%u\n", __func__, (unsigned int)*res);
@@ -2737,7 +2737,7 @@ static int decode_attr_aclsupport(struct xdr_stream *xdr, uint32_t *bitmap, uint
2737 p = xdr_inline_decode(xdr, 4); 2737 p = xdr_inline_decode(xdr, 4);
2738 if (unlikely(!p)) 2738 if (unlikely(!p))
2739 goto out_overflow; 2739 goto out_overflow;
2740 *res = be32_to_cpup(p++); 2740 *res = be32_to_cpup(p);
2741 bitmap[0] &= ~FATTR4_WORD0_ACLSUPPORT; 2741 bitmap[0] &= ~FATTR4_WORD0_ACLSUPPORT;
2742 } 2742 }
2743 dprintk("%s: ACLs supported=%u\n", __func__, (unsigned int)*res); 2743 dprintk("%s: ACLs supported=%u\n", __func__, (unsigned int)*res);
@@ -2759,7 +2759,7 @@ static int decode_attr_fileid(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t
2759 p = xdr_inline_decode(xdr, 8); 2759 p = xdr_inline_decode(xdr, 8);
2760 if (unlikely(!p)) 2760 if (unlikely(!p))
2761 goto out_overflow; 2761 goto out_overflow;
2762 p = xdr_decode_hyper(p, fileid); 2762 xdr_decode_hyper(p, fileid);
2763 bitmap[0] &= ~FATTR4_WORD0_FILEID; 2763 bitmap[0] &= ~FATTR4_WORD0_FILEID;
2764 ret = NFS_ATTR_FATTR_FILEID; 2764 ret = NFS_ATTR_FATTR_FILEID;
2765 } 2765 }
@@ -2782,7 +2782,7 @@ static int decode_attr_mounted_on_fileid(struct xdr_stream *xdr, uint32_t *bitma
2782 p = xdr_inline_decode(xdr, 8); 2782 p = xdr_inline_decode(xdr, 8);
2783 if (unlikely(!p)) 2783 if (unlikely(!p))
2784 goto out_overflow; 2784 goto out_overflow;
2785 p = xdr_decode_hyper(p, fileid); 2785 xdr_decode_hyper(p, fileid);
2786 bitmap[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID; 2786 bitmap[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
2787 ret = NFS_ATTR_FATTR_FILEID; 2787 ret = NFS_ATTR_FATTR_FILEID;
2788 } 2788 }
@@ -2805,7 +2805,7 @@ static int decode_attr_files_avail(struct xdr_stream *xdr, uint32_t *bitmap, uin
2805 p = xdr_inline_decode(xdr, 8); 2805 p = xdr_inline_decode(xdr, 8);
2806 if (unlikely(!p)) 2806 if (unlikely(!p))
2807 goto out_overflow; 2807 goto out_overflow;
2808 p = xdr_decode_hyper(p, res); 2808 xdr_decode_hyper(p, res);
2809 bitmap[0] &= ~FATTR4_WORD0_FILES_AVAIL; 2809 bitmap[0] &= ~FATTR4_WORD0_FILES_AVAIL;
2810 } 2810 }
2811 dprintk("%s: files avail=%Lu\n", __func__, (unsigned long long)*res); 2811 dprintk("%s: files avail=%Lu\n", __func__, (unsigned long long)*res);
@@ -2827,7 +2827,7 @@ static int decode_attr_files_free(struct xdr_stream *xdr, uint32_t *bitmap, uint
2827 p = xdr_inline_decode(xdr, 8); 2827 p = xdr_inline_decode(xdr, 8);
2828 if (unlikely(!p)) 2828 if (unlikely(!p))
2829 goto out_overflow; 2829 goto out_overflow;
2830 p = xdr_decode_hyper(p, res); 2830 xdr_decode_hyper(p, res);
2831 bitmap[0] &= ~FATTR4_WORD0_FILES_FREE; 2831 bitmap[0] &= ~FATTR4_WORD0_FILES_FREE;
2832 } 2832 }
2833 dprintk("%s: files free=%Lu\n", __func__, (unsigned long long)*res); 2833 dprintk("%s: files free=%Lu\n", __func__, (unsigned long long)*res);
@@ -2849,7 +2849,7 @@ static int decode_attr_files_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
2849 p = xdr_inline_decode(xdr, 8); 2849 p = xdr_inline_decode(xdr, 8);
2850 if (unlikely(!p)) 2850 if (unlikely(!p))
2851 goto out_overflow; 2851 goto out_overflow;
2852 p = xdr_decode_hyper(p, res); 2852 xdr_decode_hyper(p, res);
2853 bitmap[0] &= ~FATTR4_WORD0_FILES_TOTAL; 2853 bitmap[0] &= ~FATTR4_WORD0_FILES_TOTAL;
2854 } 2854 }
2855 dprintk("%s: files total=%Lu\n", __func__, (unsigned long long)*res); 2855 dprintk("%s: files total=%Lu\n", __func__, (unsigned long long)*res);
@@ -2868,7 +2868,7 @@ static int decode_pathname(struct xdr_stream *xdr, struct nfs4_pathname *path)
2868 p = xdr_inline_decode(xdr, 4); 2868 p = xdr_inline_decode(xdr, 4);
2869 if (unlikely(!p)) 2869 if (unlikely(!p))
2870 goto out_overflow; 2870 goto out_overflow;
2871 n = be32_to_cpup(p++); 2871 n = be32_to_cpup(p);
2872 if (n == 0) 2872 if (n == 0)
2873 goto root_path; 2873 goto root_path;
2874 dprintk("path "); 2874 dprintk("path ");
@@ -2925,7 +2925,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
2925 p = xdr_inline_decode(xdr, 4); 2925 p = xdr_inline_decode(xdr, 4);
2926 if (unlikely(!p)) 2926 if (unlikely(!p))
2927 goto out_overflow; 2927 goto out_overflow;
2928 n = be32_to_cpup(p++); 2928 n = be32_to_cpup(p);
2929 if (n <= 0) 2929 if (n <= 0)
2930 goto out_eio; 2930 goto out_eio;
2931 res->nlocations = 0; 2931 res->nlocations = 0;
@@ -2936,7 +2936,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
2936 p = xdr_inline_decode(xdr, 4); 2936 p = xdr_inline_decode(xdr, 4);
2937 if (unlikely(!p)) 2937 if (unlikely(!p))
2938 goto out_overflow; 2938 goto out_overflow;
2939 m = be32_to_cpup(p++); 2939 m = be32_to_cpup(p);
2940 2940
2941 loc->nservers = 0; 2941 loc->nservers = 0;
2942 dprintk("%s: servers ", __func__); 2942 dprintk("%s: servers ", __func__);
@@ -2994,7 +2994,7 @@ static int decode_attr_maxfilesize(struct xdr_stream *xdr, uint32_t *bitmap, uin
2994 p = xdr_inline_decode(xdr, 8); 2994 p = xdr_inline_decode(xdr, 8);
2995 if (unlikely(!p)) 2995 if (unlikely(!p))
2996 goto out_overflow; 2996 goto out_overflow;
2997 p = xdr_decode_hyper(p, res); 2997 xdr_decode_hyper(p, res);
2998 bitmap[0] &= ~FATTR4_WORD0_MAXFILESIZE; 2998 bitmap[0] &= ~FATTR4_WORD0_MAXFILESIZE;
2999 } 2999 }
3000 dprintk("%s: maxfilesize=%Lu\n", __func__, (unsigned long long)*res); 3000 dprintk("%s: maxfilesize=%Lu\n", __func__, (unsigned long long)*res);
@@ -3016,7 +3016,7 @@ static int decode_attr_maxlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
3016 p = xdr_inline_decode(xdr, 4); 3016 p = xdr_inline_decode(xdr, 4);
3017 if (unlikely(!p)) 3017 if (unlikely(!p))
3018 goto out_overflow; 3018 goto out_overflow;
3019 *maxlink = be32_to_cpup(p++); 3019 *maxlink = be32_to_cpup(p);
3020 bitmap[0] &= ~FATTR4_WORD0_MAXLINK; 3020 bitmap[0] &= ~FATTR4_WORD0_MAXLINK;
3021 } 3021 }
3022 dprintk("%s: maxlink=%u\n", __func__, *maxlink); 3022 dprintk("%s: maxlink=%u\n", __func__, *maxlink);
@@ -3038,7 +3038,7 @@ static int decode_attr_maxname(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
3038 p = xdr_inline_decode(xdr, 4); 3038 p = xdr_inline_decode(xdr, 4);
3039 if (unlikely(!p)) 3039 if (unlikely(!p))
3040 goto out_overflow; 3040 goto out_overflow;
3041 *maxname = be32_to_cpup(p++); 3041 *maxname = be32_to_cpup(p);
3042 bitmap[0] &= ~FATTR4_WORD0_MAXNAME; 3042 bitmap[0] &= ~FATTR4_WORD0_MAXNAME;
3043 } 3043 }
3044 dprintk("%s: maxname=%u\n", __func__, *maxname); 3044 dprintk("%s: maxname=%u\n", __func__, *maxname);
@@ -3061,7 +3061,7 @@ static int decode_attr_maxread(struct xdr_stream *xdr, uint32_t *bitmap, uint32_
3061 p = xdr_inline_decode(xdr, 8); 3061 p = xdr_inline_decode(xdr, 8);
3062 if (unlikely(!p)) 3062 if (unlikely(!p))
3063 goto out_overflow; 3063 goto out_overflow;
3064 p = xdr_decode_hyper(p, &maxread); 3064 xdr_decode_hyper(p, &maxread);
3065 if (maxread > 0x7FFFFFFF) 3065 if (maxread > 0x7FFFFFFF)
3066 maxread = 0x7FFFFFFF; 3066 maxread = 0x7FFFFFFF;
3067 *res = (uint32_t)maxread; 3067 *res = (uint32_t)maxread;
@@ -3087,7 +3087,7 @@ static int decode_attr_maxwrite(struct xdr_stream *xdr, uint32_t *bitmap, uint32
3087 p = xdr_inline_decode(xdr, 8); 3087 p = xdr_inline_decode(xdr, 8);
3088 if (unlikely(!p)) 3088 if (unlikely(!p))
3089 goto out_overflow; 3089 goto out_overflow;
3090 p = xdr_decode_hyper(p, &maxwrite); 3090 xdr_decode_hyper(p, &maxwrite);
3091 if (maxwrite > 0x7FFFFFFF) 3091 if (maxwrite > 0x7FFFFFFF)
3092 maxwrite = 0x7FFFFFFF; 3092 maxwrite = 0x7FFFFFFF;
3093 *res = (uint32_t)maxwrite; 3093 *res = (uint32_t)maxwrite;
@@ -3113,7 +3113,7 @@ static int decode_attr_mode(struct xdr_stream *xdr, uint32_t *bitmap, umode_t *m
3113 p = xdr_inline_decode(xdr, 4); 3113 p = xdr_inline_decode(xdr, 4);
3114 if (unlikely(!p)) 3114 if (unlikely(!p))
3115 goto out_overflow; 3115 goto out_overflow;
3116 tmp = be32_to_cpup(p++); 3116 tmp = be32_to_cpup(p);
3117 *mode = tmp & ~S_IFMT; 3117 *mode = tmp & ~S_IFMT;
3118 bitmap[1] &= ~FATTR4_WORD1_MODE; 3118 bitmap[1] &= ~FATTR4_WORD1_MODE;
3119 ret = NFS_ATTR_FATTR_MODE; 3119 ret = NFS_ATTR_FATTR_MODE;
@@ -3137,7 +3137,7 @@ static int decode_attr_nlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t
3137 p = xdr_inline_decode(xdr, 4); 3137 p = xdr_inline_decode(xdr, 4);
3138 if (unlikely(!p)) 3138 if (unlikely(!p))
3139 goto out_overflow; 3139 goto out_overflow;
3140 *nlink = be32_to_cpup(p++); 3140 *nlink = be32_to_cpup(p);
3141 bitmap[1] &= ~FATTR4_WORD1_NUMLINKS; 3141 bitmap[1] &= ~FATTR4_WORD1_NUMLINKS;
3142 ret = NFS_ATTR_FATTR_NLINK; 3142 ret = NFS_ATTR_FATTR_NLINK;
3143 } 3143 }
@@ -3161,7 +3161,7 @@ static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap, struct nf
3161 p = xdr_inline_decode(xdr, 4); 3161 p = xdr_inline_decode(xdr, 4);
3162 if (unlikely(!p)) 3162 if (unlikely(!p))
3163 goto out_overflow; 3163 goto out_overflow;
3164 len = be32_to_cpup(p++); 3164 len = be32_to_cpup(p);
3165 p = xdr_inline_decode(xdr, len); 3165 p = xdr_inline_decode(xdr, len);
3166 if (unlikely(!p)) 3166 if (unlikely(!p))
3167 goto out_overflow; 3167 goto out_overflow;
@@ -3196,7 +3196,7 @@ static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap, struct nf
3196 p = xdr_inline_decode(xdr, 4); 3196 p = xdr_inline_decode(xdr, 4);
3197 if (unlikely(!p)) 3197 if (unlikely(!p))
3198 goto out_overflow; 3198 goto out_overflow;
3199 len = be32_to_cpup(p++); 3199 len = be32_to_cpup(p);
3200 p = xdr_inline_decode(xdr, len); 3200 p = xdr_inline_decode(xdr, len);
3201 if (unlikely(!p)) 3201 if (unlikely(!p))
3202 goto out_overflow; 3202 goto out_overflow;
@@ -3234,7 +3234,7 @@ static int decode_attr_rdev(struct xdr_stream *xdr, uint32_t *bitmap, dev_t *rde
3234 if (unlikely(!p)) 3234 if (unlikely(!p))
3235 goto out_overflow; 3235 goto out_overflow;
3236 major = be32_to_cpup(p++); 3236 major = be32_to_cpup(p++);
3237 minor = be32_to_cpup(p++); 3237 minor = be32_to_cpup(p);
3238 tmp = MKDEV(major, minor); 3238 tmp = MKDEV(major, minor);
3239 if (MAJOR(tmp) == major && MINOR(tmp) == minor) 3239 if (MAJOR(tmp) == major && MINOR(tmp) == minor)
3240 *rdev = tmp; 3240 *rdev = tmp;
@@ -3260,7 +3260,7 @@ static int decode_attr_space_avail(struct xdr_stream *xdr, uint32_t *bitmap, uin
3260 p = xdr_inline_decode(xdr, 8); 3260 p = xdr_inline_decode(xdr, 8);
3261 if (unlikely(!p)) 3261 if (unlikely(!p))
3262 goto out_overflow; 3262 goto out_overflow;
3263 p = xdr_decode_hyper(p, res); 3263 xdr_decode_hyper(p, res);
3264 bitmap[1] &= ~FATTR4_WORD1_SPACE_AVAIL; 3264 bitmap[1] &= ~FATTR4_WORD1_SPACE_AVAIL;
3265 } 3265 }
3266 dprintk("%s: space avail=%Lu\n", __func__, (unsigned long long)*res); 3266 dprintk("%s: space avail=%Lu\n", __func__, (unsigned long long)*res);
@@ -3282,7 +3282,7 @@ static int decode_attr_space_free(struct xdr_stream *xdr, uint32_t *bitmap, uint
3282 p = xdr_inline_decode(xdr, 8); 3282 p = xdr_inline_decode(xdr, 8);
3283 if (unlikely(!p)) 3283 if (unlikely(!p))
3284 goto out_overflow; 3284 goto out_overflow;
3285 p = xdr_decode_hyper(p, res); 3285 xdr_decode_hyper(p, res);
3286 bitmap[1] &= ~FATTR4_WORD1_SPACE_FREE; 3286 bitmap[1] &= ~FATTR4_WORD1_SPACE_FREE;
3287 } 3287 }
3288 dprintk("%s: space free=%Lu\n", __func__, (unsigned long long)*res); 3288 dprintk("%s: space free=%Lu\n", __func__, (unsigned long long)*res);
@@ -3304,7 +3304,7 @@ static int decode_attr_space_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
3304 p = xdr_inline_decode(xdr, 8); 3304 p = xdr_inline_decode(xdr, 8);
3305 if (unlikely(!p)) 3305 if (unlikely(!p))
3306 goto out_overflow; 3306 goto out_overflow;
3307 p = xdr_decode_hyper(p, res); 3307 xdr_decode_hyper(p, res);
3308 bitmap[1] &= ~FATTR4_WORD1_SPACE_TOTAL; 3308 bitmap[1] &= ~FATTR4_WORD1_SPACE_TOTAL;
3309 } 3309 }
3310 dprintk("%s: space total=%Lu\n", __func__, (unsigned long long)*res); 3310 dprintk("%s: space total=%Lu\n", __func__, (unsigned long long)*res);
@@ -3326,7 +3326,7 @@ static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint
3326 p = xdr_inline_decode(xdr, 8); 3326 p = xdr_inline_decode(xdr, 8);
3327 if (unlikely(!p)) 3327 if (unlikely(!p))
3328 goto out_overflow; 3328 goto out_overflow;
3329 p = xdr_decode_hyper(p, used); 3329 xdr_decode_hyper(p, used);
3330 bitmap[1] &= ~FATTR4_WORD1_SPACE_USED; 3330 bitmap[1] &= ~FATTR4_WORD1_SPACE_USED;
3331 ret = NFS_ATTR_FATTR_SPACE_USED; 3331 ret = NFS_ATTR_FATTR_SPACE_USED;
3332 } 3332 }
@@ -3348,7 +3348,7 @@ static int decode_attr_time(struct xdr_stream *xdr, struct timespec *time)
3348 if (unlikely(!p)) 3348 if (unlikely(!p))
3349 goto out_overflow; 3349 goto out_overflow;
3350 p = xdr_decode_hyper(p, &sec); 3350 p = xdr_decode_hyper(p, &sec);
3351 nsec = be32_to_cpup(p++); 3351 nsec = be32_to_cpup(p);
3352 time->tv_sec = (time_t)sec; 3352 time->tv_sec = (time_t)sec;
3353 time->tv_nsec = (long)nsec; 3353 time->tv_nsec = (long)nsec;
3354 return 0; 3354 return 0;
@@ -3437,7 +3437,7 @@ static int decode_change_info(struct xdr_stream *xdr, struct nfs4_change_info *c
3437 goto out_overflow; 3437 goto out_overflow;
3438 cinfo->atomic = be32_to_cpup(p++); 3438 cinfo->atomic = be32_to_cpup(p++);
3439 p = xdr_decode_hyper(p, &cinfo->before); 3439 p = xdr_decode_hyper(p, &cinfo->before);
3440 p = xdr_decode_hyper(p, &cinfo->after); 3440 xdr_decode_hyper(p, &cinfo->after);
3441 return 0; 3441 return 0;
3442out_overflow: 3442out_overflow:
3443 print_overflow_msg(__func__, xdr); 3443 print_overflow_msg(__func__, xdr);
@@ -3457,7 +3457,7 @@ static int decode_access(struct xdr_stream *xdr, struct nfs4_accessres *access)
3457 if (unlikely(!p)) 3457 if (unlikely(!p))
3458 goto out_overflow; 3458 goto out_overflow;
3459 supp = be32_to_cpup(p++); 3459 supp = be32_to_cpup(p++);
3460 acc = be32_to_cpup(p++); 3460 acc = be32_to_cpup(p);
3461 access->supported = supp; 3461 access->supported = supp;
3462 access->access = acc; 3462 access->access = acc;
3463 return 0; 3463 return 0;
@@ -3525,7 +3525,7 @@ static int decode_create(struct xdr_stream *xdr, struct nfs4_change_info *cinfo)
3525 p = xdr_inline_decode(xdr, 4); 3525 p = xdr_inline_decode(xdr, 4);
3526 if (unlikely(!p)) 3526 if (unlikely(!p))
3527 goto out_overflow; 3527 goto out_overflow;
3528 bmlen = be32_to_cpup(p++); 3528 bmlen = be32_to_cpup(p);
3529 p = xdr_inline_decode(xdr, bmlen << 2); 3529 p = xdr_inline_decode(xdr, bmlen << 2);
3530 if (likely(p)) 3530 if (likely(p))
3531 return 0; 3531 return 0;
@@ -3786,7 +3786,7 @@ static int decode_getfh(struct xdr_stream *xdr, struct nfs_fh *fh)
3786 p = xdr_inline_decode(xdr, 4); 3786 p = xdr_inline_decode(xdr, 4);
3787 if (unlikely(!p)) 3787 if (unlikely(!p))
3788 goto out_overflow; 3788 goto out_overflow;
3789 len = be32_to_cpup(p++); 3789 len = be32_to_cpup(p);
3790 if (len > NFS4_FHSIZE) 3790 if (len > NFS4_FHSIZE)
3791 return -EIO; 3791 return -EIO;
3792 fh->size = len; 3792 fh->size = len;
@@ -3836,7 +3836,7 @@ static int decode_lock_denied (struct xdr_stream *xdr, struct file_lock *fl)
3836 fl->fl_pid = 0; 3836 fl->fl_pid = 0;
3837 } 3837 }
3838 p = xdr_decode_hyper(p, &clientid); 3838 p = xdr_decode_hyper(p, &clientid);
3839 namelen = be32_to_cpup(p++); 3839 namelen = be32_to_cpup(p);
3840 p = xdr_inline_decode(xdr, namelen); 3840 p = xdr_inline_decode(xdr, namelen);
3841 if (likely(p)) 3841 if (likely(p))
3842 return -NFS4ERR_DENIED; 3842 return -NFS4ERR_DENIED;
@@ -3903,11 +3903,11 @@ static int decode_space_limit(struct xdr_stream *xdr, u64 *maxsize)
3903 limit_type = be32_to_cpup(p++); 3903 limit_type = be32_to_cpup(p++);
3904 switch (limit_type) { 3904 switch (limit_type) {
3905 case 1: 3905 case 1:
3906 p = xdr_decode_hyper(p, maxsize); 3906 xdr_decode_hyper(p, maxsize);
3907 break; 3907 break;
3908 case 2: 3908 case 2:
3909 nblocks = be32_to_cpup(p++); 3909 nblocks = be32_to_cpup(p++);
3910 blocksize = be32_to_cpup(p++); 3910 blocksize = be32_to_cpup(p);
3911 *maxsize = (uint64_t)nblocks * (uint64_t)blocksize; 3911 *maxsize = (uint64_t)nblocks * (uint64_t)blocksize;
3912 } 3912 }
3913 return 0; 3913 return 0;
@@ -3925,7 +3925,7 @@ static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
3925 p = xdr_inline_decode(xdr, 4); 3925 p = xdr_inline_decode(xdr, 4);
3926 if (unlikely(!p)) 3926 if (unlikely(!p))
3927 goto out_overflow; 3927 goto out_overflow;
3928 delegation_type = be32_to_cpup(p++); 3928 delegation_type = be32_to_cpup(p);
3929 if (delegation_type == NFS4_OPEN_DELEGATE_NONE) { 3929 if (delegation_type == NFS4_OPEN_DELEGATE_NONE) {
3930 res->delegation_type = 0; 3930 res->delegation_type = 0;
3931 return 0; 3931 return 0;
@@ -3936,7 +3936,7 @@ static int decode_delegation(struct xdr_stream *xdr, struct nfs_openres *res)
3936 p = xdr_inline_decode(xdr, 4); 3936 p = xdr_inline_decode(xdr, 4);
3937 if (unlikely(!p)) 3937 if (unlikely(!p))
3938 goto out_overflow; 3938 goto out_overflow;
3939 res->do_recall = be32_to_cpup(p++); 3939 res->do_recall = be32_to_cpup(p);
3940 3940
3941 switch (delegation_type) { 3941 switch (delegation_type) {
3942 case NFS4_OPEN_DELEGATE_READ: 3942 case NFS4_OPEN_DELEGATE_READ:
@@ -3973,7 +3973,7 @@ static int decode_open(struct xdr_stream *xdr, struct nfs_openres *res)
3973 if (unlikely(!p)) 3973 if (unlikely(!p))
3974 goto out_overflow; 3974 goto out_overflow;
3975 res->rflags = be32_to_cpup(p++); 3975 res->rflags = be32_to_cpup(p++);
3976 bmlen = be32_to_cpup(p++); 3976 bmlen = be32_to_cpup(p);
3977 if (bmlen > 10) 3977 if (bmlen > 10)
3978 goto xdr_error; 3978 goto xdr_error;
3979 3979
@@ -4043,7 +4043,7 @@ static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req, struct nfs_
4043 if (unlikely(!p)) 4043 if (unlikely(!p))
4044 goto out_overflow; 4044 goto out_overflow;
4045 eof = be32_to_cpup(p++); 4045 eof = be32_to_cpup(p++);
4046 count = be32_to_cpup(p++); 4046 count = be32_to_cpup(p);
4047 hdrlen = (u8 *) p - (u8 *) iov->iov_base; 4047 hdrlen = (u8 *) p - (u8 *) iov->iov_base;
4048 recvd = req->rq_rcv_buf.len - hdrlen; 4048 recvd = req->rq_rcv_buf.len - hdrlen;
4049 if (count > recvd) { 4049 if (count > recvd) {
@@ -4174,7 +4174,7 @@ static int decode_readlink(struct xdr_stream *xdr, struct rpc_rqst *req)
4174 p = xdr_inline_decode(xdr, 4); 4174 p = xdr_inline_decode(xdr, 4);
4175 if (unlikely(!p)) 4175 if (unlikely(!p))
4176 goto out_overflow; 4176 goto out_overflow;
4177 len = be32_to_cpup(p++); 4177 len = be32_to_cpup(p);
4178 if (len >= rcvbuf->page_len || len <= 0) { 4178 if (len >= rcvbuf->page_len || len <= 0) {
4179 dprintk("nfs: server returned giant symlink!\n"); 4179 dprintk("nfs: server returned giant symlink!\n");
4180 return -ENAMETOOLONG; 4180 return -ENAMETOOLONG;
@@ -4301,7 +4301,7 @@ static int decode_setattr(struct xdr_stream *xdr)
4301 p = xdr_inline_decode(xdr, 4); 4301 p = xdr_inline_decode(xdr, 4);
4302 if (unlikely(!p)) 4302 if (unlikely(!p))
4303 goto out_overflow; 4303 goto out_overflow;
4304 bmlen = be32_to_cpup(p++); 4304 bmlen = be32_to_cpup(p);
4305 p = xdr_inline_decode(xdr, bmlen << 2); 4305 p = xdr_inline_decode(xdr, bmlen << 2);
4306 if (likely(p)) 4306 if (likely(p))
4307 return 0; 4307 return 0;
@@ -4325,7 +4325,7 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs_client *clp)
4325 " %d\n", opnum); 4325 " %d\n", opnum);
4326 return -EIO; 4326 return -EIO;
4327 } 4327 }
4328 nfserr = be32_to_cpup(p++); 4328 nfserr = be32_to_cpup(p);
4329 if (nfserr == NFS_OK) { 4329 if (nfserr == NFS_OK) {
4330 p = xdr_inline_decode(xdr, 8 + NFS4_VERIFIER_SIZE); 4330 p = xdr_inline_decode(xdr, 8 + NFS4_VERIFIER_SIZE);
4331 if (unlikely(!p)) 4331 if (unlikely(!p))
@@ -4339,7 +4339,7 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs_client *clp)
4339 p = xdr_inline_decode(xdr, 4); 4339 p = xdr_inline_decode(xdr, 4);
4340 if (unlikely(!p)) 4340 if (unlikely(!p))
4341 goto out_overflow; 4341 goto out_overflow;
4342 len = be32_to_cpup(p++); 4342 len = be32_to_cpup(p);
4343 p = xdr_inline_decode(xdr, len); 4343 p = xdr_inline_decode(xdr, len);
4344 if (unlikely(!p)) 4344 if (unlikely(!p))
4345 goto out_overflow; 4345 goto out_overflow;
@@ -4348,7 +4348,7 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs_client *clp)
4348 p = xdr_inline_decode(xdr, 4); 4348 p = xdr_inline_decode(xdr, 4);
4349 if (unlikely(!p)) 4349 if (unlikely(!p))
4350 goto out_overflow; 4350 goto out_overflow;
4351 len = be32_to_cpup(p++); 4351 len = be32_to_cpup(p);
4352 p = xdr_inline_decode(xdr, len); 4352 p = xdr_inline_decode(xdr, len);
4353 if (unlikely(!p)) 4353 if (unlikely(!p))
4354 goto out_overflow; 4354 goto out_overflow;
@@ -4410,7 +4410,7 @@ static int decode_exchange_id(struct xdr_stream *xdr,
4410 p = xdr_inline_decode(xdr, 8); 4410 p = xdr_inline_decode(xdr, 8);
4411 if (unlikely(!p)) 4411 if (unlikely(!p))
4412 goto out_overflow; 4412 goto out_overflow;
4413 p = xdr_decode_hyper(p, &clp->cl_ex_clid); 4413 xdr_decode_hyper(p, &clp->cl_ex_clid);
4414 p = xdr_inline_decode(xdr, 12); 4414 p = xdr_inline_decode(xdr, 12);
4415 if (unlikely(!p)) 4415 if (unlikely(!p))
4416 goto out_overflow; 4416 goto out_overflow;
@@ -4418,7 +4418,7 @@ static int decode_exchange_id(struct xdr_stream *xdr,
4418 clp->cl_exchange_flags = be32_to_cpup(p++); 4418 clp->cl_exchange_flags = be32_to_cpup(p++);
4419 4419
4420 /* We ask for SP4_NONE */ 4420 /* We ask for SP4_NONE */
4421 dummy = be32_to_cpup(p++); 4421 dummy = be32_to_cpup(p);
4422 if (dummy != SP4_NONE) 4422 if (dummy != SP4_NONE)
4423 return -EIO; 4423 return -EIO;
4424 4424
@@ -4463,7 +4463,7 @@ static int decode_chan_attrs(struct xdr_stream *xdr,
4463 attrs->max_resp_sz_cached = be32_to_cpup(p++); 4463 attrs->max_resp_sz_cached = be32_to_cpup(p++);
4464 attrs->max_ops = be32_to_cpup(p++); 4464 attrs->max_ops = be32_to_cpup(p++);
4465 attrs->max_reqs = be32_to_cpup(p++); 4465 attrs->max_reqs = be32_to_cpup(p++);
4466 nr_attrs = be32_to_cpup(p++); 4466 nr_attrs = be32_to_cpup(p);
4467 if (unlikely(nr_attrs > 1)) { 4467 if (unlikely(nr_attrs > 1)) {
4468 printk(KERN_WARNING "%s: Invalid rdma channel attrs count %u\n", 4468 printk(KERN_WARNING "%s: Invalid rdma channel attrs count %u\n",
4469 __func__, nr_attrs); 4469 __func__, nr_attrs);
@@ -4504,7 +4504,7 @@ static int decode_create_session(struct xdr_stream *xdr,
4504 if (unlikely(!p)) 4504 if (unlikely(!p))
4505 goto out_overflow; 4505 goto out_overflow;
4506 clp->cl_seqid = be32_to_cpup(p++); 4506 clp->cl_seqid = be32_to_cpup(p++);
4507 session->flags = be32_to_cpup(p++); 4507 session->flags = be32_to_cpup(p);
4508 4508
4509 /* Channel attributes */ 4509 /* Channel attributes */
4510 status = decode_chan_attrs(xdr, &session->fc_attrs); 4510 status = decode_chan_attrs(xdr, &session->fc_attrs);
@@ -4576,7 +4576,7 @@ static int decode_sequence(struct xdr_stream *xdr,
4576 /* target highest slot id - currently not processed */ 4576 /* target highest slot id - currently not processed */
4577 dummy = be32_to_cpup(p++); 4577 dummy = be32_to_cpup(p++);
4578 /* result flags - currently not processed */ 4578 /* result flags - currently not processed */
4579 dummy = be32_to_cpup(p++); 4579 dummy = be32_to_cpup(p);
4580 status = 0; 4580 status = 0;
4581out_err: 4581out_err:
4582 res->sr_status = status; 4582 res->sr_status = status;