]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/nfs/nfs4xdr.c
suspend: fix ia64 allmodconfig build
[linux-2.6-omap-h63xx.git] / fs / nfs / nfs4xdr.c
index c08738441f732216f7b785fa3805860475a40917..db1ed9c46ede9f4d9c899e45c63289ccb5296546 100644 (file)
@@ -72,10 +72,15 @@ static int nfs4_stat_to_errno(int);
  */
 #define open_owner_id_maxsz    (1 + 4)
 #define lock_owner_id_maxsz    (1 + 4)
+#define decode_lockowner_maxsz (1 + XDR_QUADLEN(IDMAP_NAMESZ))
 #define compound_encode_hdr_maxsz      (3 + (NFS4_MAXTAGLEN >> 2))
 #define compound_decode_hdr_maxsz      (3 + (NFS4_MAXTAGLEN >> 2))
 #define op_encode_hdr_maxsz    (1)
 #define op_decode_hdr_maxsz    (2)
+#define encode_stateid_maxsz   (XDR_QUADLEN(NFS4_STATEID_SIZE))
+#define decode_stateid_maxsz   (XDR_QUADLEN(NFS4_STATEID_SIZE))
+#define encode_verifier_maxsz  (XDR_QUADLEN(NFS4_VERIFIER_SIZE))
+#define decode_verifier_maxsz  (XDR_QUADLEN(NFS4_VERIFIER_SIZE))
 #define encode_putfh_maxsz     (op_encode_hdr_maxsz + 1 + \
                                (NFS4_FHSIZE >> 2))
 #define decode_putfh_maxsz     (op_decode_hdr_maxsz)
@@ -96,6 +101,11 @@ static int nfs4_stat_to_errno(int);
 #define nfs4_fattr_maxsz       (nfs4_fattr_bitmap_maxsz + \
                                nfs4_fattr_value_maxsz)
 #define decode_getattr_maxsz    (op_decode_hdr_maxsz + nfs4_fattr_maxsz)
+#define encode_attrs_maxsz     (nfs4_fattr_bitmap_maxsz + \
+                                1 + 2 + 1 + \
+                               nfs4_owner_maxsz + \
+                               nfs4_group_maxsz + \
+                               4 + 4)
 #define encode_savefh_maxsz     (op_encode_hdr_maxsz)
 #define decode_savefh_maxsz     (op_decode_hdr_maxsz)
 #define encode_restorefh_maxsz  (op_encode_hdr_maxsz)
@@ -106,10 +116,12 @@ static int nfs4_stat_to_errno(int);
 #define decode_renew_maxsz     (op_decode_hdr_maxsz)
 #define encode_setclientid_maxsz \
                                (op_encode_hdr_maxsz + \
-                               4 /*server->ip_addr*/ + \
-                               1 /*Netid*/ + \
-                               6 /*uaddr*/ + \
-                               6 + (NFS4_VERIFIER_SIZE >> 2))
+                               XDR_QUADLEN(NFS4_VERIFIER_SIZE) + \
+                               XDR_QUADLEN(NFS4_SETCLIENTID_NAMELEN) + \
+                               1 /* sc_prog */ + \
+                               XDR_QUADLEN(RPCBIND_MAXNETIDLEN) + \
+                               XDR_QUADLEN(RPCBIND_MAXUADDRLEN) + \
+                               1) /* sc_cb_ident */
 #define decode_setclientid_maxsz \
                                (op_decode_hdr_maxsz + \
                                2 + \
@@ -123,7 +135,7 @@ static int nfs4_stat_to_errno(int);
 #define decode_lookup_maxsz    (op_decode_hdr_maxsz)
 #define encode_share_access_maxsz \
                                (2)
-#define encode_createmode_maxsz        (1 + nfs4_fattr_maxsz)
+#define encode_createmode_maxsz        (1 + encode_attrs_maxsz)
 #define encode_opentype_maxsz  (1 + encode_createmode_maxsz)
 #define encode_claim_null_maxsz        (1 + nfs4_name_maxsz)
 #define encode_open_maxsz      (op_encode_hdr_maxsz + \
@@ -132,14 +144,52 @@ static int nfs4_stat_to_errno(int);
                                encode_opentype_maxsz + \
                                encode_claim_null_maxsz)
 #define decode_ace_maxsz       (3 + nfs4_owner_maxsz)
-#define decode_delegation_maxsz        (1 + XDR_QUADLEN(NFS4_STATEID_SIZE) + 1 + \
+#define decode_delegation_maxsz        (1 + decode_stateid_maxsz + 1 + \
                                decode_ace_maxsz)
 #define decode_change_info_maxsz       (5)
 #define decode_open_maxsz      (op_decode_hdr_maxsz + \
-                               XDR_QUADLEN(NFS4_STATEID_SIZE) + \
+                               decode_stateid_maxsz + \
                                decode_change_info_maxsz + 1 + \
                                nfs4_fattr_bitmap_maxsz + \
                                decode_delegation_maxsz)
+#define encode_open_confirm_maxsz \
+                               (op_encode_hdr_maxsz + \
+                                encode_stateid_maxsz + 1)
+#define decode_open_confirm_maxsz \
+                               (op_decode_hdr_maxsz + \
+                                decode_stateid_maxsz)
+#define encode_open_downgrade_maxsz \
+                               (op_encode_hdr_maxsz + \
+                                encode_stateid_maxsz + 1 + \
+                                encode_share_access_maxsz)
+#define decode_open_downgrade_maxsz \
+                               (op_decode_hdr_maxsz + \
+                                decode_stateid_maxsz)
+#define encode_close_maxsz     (op_encode_hdr_maxsz + \
+                                1 + encode_stateid_maxsz)
+#define decode_close_maxsz     (op_decode_hdr_maxsz + \
+                                decode_stateid_maxsz)
+#define encode_setattr_maxsz   (op_encode_hdr_maxsz + \
+                                encode_stateid_maxsz + \
+                                encode_attrs_maxsz)
+#define decode_setattr_maxsz   (op_decode_hdr_maxsz + \
+                                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 encode_readdir_maxsz   (op_encode_hdr_maxsz + \
+                                2 + encode_verifier_maxsz + 5)
+#define decode_readdir_maxsz   (op_decode_hdr_maxsz + \
+                                decode_verifier_maxsz)
+#define encode_readlink_maxsz  (op_encode_hdr_maxsz)
+#define decode_readlink_maxsz  (op_decode_hdr_maxsz + 1)
+#define encode_write_maxsz     (op_encode_hdr_maxsz + \
+                                encode_stateid_maxsz + 4)
+#define decode_write_maxsz     (op_decode_hdr_maxsz + \
+                                2 + decode_verifier_maxsz)
+#define encode_commit_maxsz    (op_encode_hdr_maxsz + 3)
+#define decode_commit_maxsz    (op_decode_hdr_maxsz + \
+                                decode_verifier_maxsz)
 #define encode_remove_maxsz    (op_encode_hdr_maxsz + \
                                nfs4_name_maxsz)
 #define encode_rename_maxsz    (op_encode_hdr_maxsz + \
@@ -148,19 +198,44 @@ static int nfs4_stat_to_errno(int);
 #define encode_link_maxsz      (op_encode_hdr_maxsz + \
                                nfs4_name_maxsz)
 #define decode_link_maxsz      (op_decode_hdr_maxsz + 5)
+#define encode_lock_maxsz      (op_encode_hdr_maxsz + \
+                                7 + \
+                                1 + encode_stateid_maxsz + 8)
+#define decode_lock_denied_maxsz \
+                               (8 + decode_lockowner_maxsz)
+#define decode_lock_maxsz      (op_decode_hdr_maxsz + \
+                                decode_lock_denied_maxsz)
+#define encode_lockt_maxsz     (op_encode_hdr_maxsz + 12)
+#define decode_lockt_maxsz     (op_decode_hdr_maxsz + \
+                                decode_lock_denied_maxsz)
+#define encode_locku_maxsz     (op_encode_hdr_maxsz + 3 + \
+                                encode_stateid_maxsz + \
+                                4)
+#define decode_locku_maxsz     (op_decode_hdr_maxsz + \
+                                decode_stateid_maxsz)
+#define encode_access_maxsz    (op_encode_hdr_maxsz + 1)
+#define decode_access_maxsz    (op_decode_hdr_maxsz + 2)
 #define encode_symlink_maxsz   (op_encode_hdr_maxsz + \
                                1 + nfs4_name_maxsz + \
                                1 + \
                                nfs4_fattr_maxsz)
 #define decode_symlink_maxsz   (op_decode_hdr_maxsz + 8)
 #define encode_create_maxsz    (op_encode_hdr_maxsz + \
-                               2 + nfs4_name_maxsz + \
-                               nfs4_fattr_maxsz)
+                               1 + 2 + nfs4_name_maxsz + \
+                               encode_attrs_maxsz)
 #define decode_create_maxsz    (op_decode_hdr_maxsz + \
                                decode_change_info_maxsz + \
                                nfs4_fattr_bitmap_maxsz)
+#define encode_statfs_maxsz    (encode_getattr_maxsz)
+#define decode_statfs_maxsz    (decode_getattr_maxsz)
 #define encode_delegreturn_maxsz (op_encode_hdr_maxsz + 4)
 #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)
+#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 \
@@ -169,37 +244,37 @@ static int nfs4_stat_to_errno(int);
 #define NFS4_dec_compound_sz   (1024)  /* XXX: large enough? */
 #define NFS4_enc_read_sz       (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz + 7)
+                               encode_read_maxsz)
 #define NFS4_dec_read_sz       (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + 2)
+                               decode_read_maxsz)
 #define NFS4_enc_readlink_sz   (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz)
+                               encode_readlink_maxsz)
 #define NFS4_dec_readlink_sz   (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz)
+                               decode_readlink_maxsz)
 #define NFS4_enc_readdir_sz    (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz + 9)
+                               encode_readdir_maxsz)
 #define NFS4_dec_readdir_sz    (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + 2)
+                               decode_readdir_maxsz)
 #define NFS4_enc_write_sz      (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz + 8 + \
+                               encode_write_maxsz + \
                                encode_getattr_maxsz)
 #define NFS4_dec_write_sz      (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + 4 + \
+                               decode_write_maxsz + \
                                decode_getattr_maxsz)
 #define NFS4_enc_commit_sz     (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz + 3 + \
+                               encode_commit_maxsz + \
                                encode_getattr_maxsz)
 #define NFS4_dec_commit_sz     (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + 2 + \
+                               decode_commit_maxsz + \
                                decode_getattr_maxsz)
 #define NFS4_enc_open_sz        (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
@@ -217,13 +292,14 @@ static int nfs4_stat_to_errno(int);
                                decode_getattr_maxsz + \
                                decode_restorefh_maxsz + \
                                decode_getattr_maxsz)
-#define NFS4_enc_open_confirm_sz      \
-                                (compound_encode_hdr_maxsz + \
-                                encode_putfh_maxsz + \
-                                op_encode_hdr_maxsz + 5)
-#define NFS4_dec_open_confirm_sz        (compound_decode_hdr_maxsz + \
-                                        decode_putfh_maxsz + \
-                                        op_decode_hdr_maxsz + 4)
+#define NFS4_enc_open_confirm_sz \
+                               (compound_encode_hdr_maxsz + \
+                                encode_putfh_maxsz + \
+                                encode_open_confirm_maxsz)
+#define NFS4_dec_open_confirm_sz \
+                               (compound_decode_hdr_maxsz + \
+                                decode_putfh_maxsz + \
+                                decode_open_confirm_maxsz)
 #define NFS4_enc_open_noattr_sz        (compound_encode_hdr_maxsz + \
                                        encode_putfh_maxsz + \
                                        encode_open_maxsz + \
@@ -234,31 +310,30 @@ static int nfs4_stat_to_errno(int);
                                        decode_getattr_maxsz)
 #define NFS4_enc_open_downgrade_sz \
                                (compound_encode_hdr_maxsz + \
-                                encode_putfh_maxsz + \
-                                op_encode_hdr_maxsz + 7 + \
-                               encode_getattr_maxsz)
+                                encode_putfh_maxsz + \
+                                encode_open_downgrade_maxsz + \
+                                encode_getattr_maxsz)
 #define NFS4_dec_open_downgrade_sz \
                                (compound_decode_hdr_maxsz + \
-                                decode_putfh_maxsz + \
-                                op_decode_hdr_maxsz + 4 + \
-                               decode_getattr_maxsz)
-#define NFS4_enc_close_sz       (compound_encode_hdr_maxsz + \
-                                encode_putfh_maxsz + \
-                                op_encode_hdr_maxsz + 5 + \
-                               encode_getattr_maxsz)
-#define NFS4_dec_close_sz       (compound_decode_hdr_maxsz + \
-                                decode_putfh_maxsz + \
-                                op_decode_hdr_maxsz + 4 + \
-                               decode_getattr_maxsz)
-#define NFS4_enc_setattr_sz     (compound_encode_hdr_maxsz + \
-                                encode_putfh_maxsz + \
-                                op_encode_hdr_maxsz + 4 + \
-                                nfs4_fattr_maxsz + \
-                                encode_getattr_maxsz)
-#define NFS4_dec_setattr_sz     (compound_decode_hdr_maxsz + \
-                                decode_putfh_maxsz + \
-                                op_decode_hdr_maxsz + 3 + \
-                                nfs4_fattr_maxsz)
+                                decode_putfh_maxsz + \
+                                decode_open_downgrade_maxsz + \
+                                decode_getattr_maxsz)
+#define NFS4_enc_close_sz      (compound_encode_hdr_maxsz + \
+                                encode_putfh_maxsz + \
+                                encode_close_maxsz + \
+                                encode_getattr_maxsz)
+#define NFS4_dec_close_sz      (compound_decode_hdr_maxsz + \
+                                decode_putfh_maxsz + \
+                                decode_close_maxsz + \
+                                decode_getattr_maxsz)
+#define NFS4_enc_setattr_sz    (compound_encode_hdr_maxsz + \
+                                encode_putfh_maxsz + \
+                                encode_setattr_maxsz + \
+                                encode_getattr_maxsz)
+#define NFS4_dec_setattr_sz    (compound_decode_hdr_maxsz + \
+                                decode_putfh_maxsz + \
+                                decode_setattr_maxsz + \
+                                decode_getattr_maxsz)
 #define NFS4_enc_fsinfo_sz     (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
                                encode_fsinfo_maxsz)
@@ -285,39 +360,30 @@ static int nfs4_stat_to_errno(int);
                                decode_fsinfo_maxsz)
 #define NFS4_enc_lock_sz        (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               encode_getattr_maxsz + \
-                               op_encode_hdr_maxsz + \
-                               1 + 1 + 2 + 2 + \
-                               1 + 4 + 1 + 2 + \
-                               lock_owner_id_maxsz)
+                               encode_lock_maxsz)
 #define NFS4_dec_lock_sz        (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               decode_getattr_maxsz + \
-                               op_decode_hdr_maxsz + \
-                               2 + 2 + 1 + 2 + \
-                               lock_owner_id_maxsz)
+                               decode_lock_maxsz)
 #define NFS4_enc_lockt_sz       (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               encode_getattr_maxsz + \
-                               op_encode_hdr_maxsz + \
-                               1 + 2 + 2 + 2 + \
-                               lock_owner_id_maxsz)
-#define NFS4_dec_lockt_sz       (NFS4_dec_lock_sz)
+                               encode_lockt_maxsz)
+#define NFS4_dec_lockt_sz       (compound_decode_hdr_maxsz + \
+                                decode_putfh_maxsz + \
+                                decode_lockt_maxsz)
 #define NFS4_enc_locku_sz       (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               encode_getattr_maxsz + \
-                               op_encode_hdr_maxsz + \
-                               1 + 1 + 4 + 2 + 2)
+                               encode_locku_maxsz)
 #define NFS4_dec_locku_sz       (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               decode_getattr_maxsz + \
-                               op_decode_hdr_maxsz + 4)
+                               decode_locku_maxsz)
 #define NFS4_enc_access_sz     (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz + 1)
+                               encode_access_maxsz + \
+                               encode_getattr_maxsz)
 #define NFS4_dec_access_sz     (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + 2)
+                               decode_access_maxsz + \
+                               decode_getattr_maxsz)
 #define NFS4_enc_getattr_sz    (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
                                encode_getattr_maxsz)
@@ -416,10 +482,10 @@ static int nfs4_stat_to_errno(int);
                                decode_getattr_maxsz)
 #define NFS4_enc_statfs_sz     (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               encode_getattr_maxsz)
+                               encode_statfs_maxsz)
 #define NFS4_dec_statfs_sz     (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + 12)
+                               decode_statfs_maxsz)
 #define NFS4_enc_server_caps_sz (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
                                encode_getattr_maxsz)
@@ -435,18 +501,16 @@ static int nfs4_stat_to_errno(int);
                                decode_getattr_maxsz)
 #define NFS4_enc_getacl_sz     (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               encode_getattr_maxsz)
+                               encode_getacl_maxsz)
 #define NFS4_dec_getacl_sz     (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + \
-                               nfs4_fattr_bitmap_maxsz + 1)
+                               decode_getacl_maxsz)
 #define NFS4_enc_setacl_sz     (compound_encode_hdr_maxsz + \
                                encode_putfh_maxsz + \
-                               op_encode_hdr_maxsz + 4 + \
-                               nfs4_fattr_bitmap_maxsz + 1)
+                               encode_setacl_maxsz)
 #define NFS4_dec_setacl_sz     (compound_decode_hdr_maxsz + \
                                decode_putfh_maxsz + \
-                               op_decode_hdr_maxsz + nfs4_fattr_bitmap_maxsz)
+                               decode_setacl_maxsz)
 #define NFS4_enc_fs_locations_sz \
                                (compound_encode_hdr_maxsz + \
                                 encode_putfh_maxsz + \
@@ -502,7 +566,6 @@ struct compound_hdr {
 
 #define RESERVE_SPACE(nbytes)  do {                            \
        p = xdr_reserve_space(xdr, nbytes);                     \
-       if (!p) printk("RESERVE_SPACE(%d) failed in function %s\n", (int) (nbytes), __FUNCTION__); \
        BUG_ON(!p);                                             \
 } while (0)
 
@@ -568,8 +631,8 @@ static int encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const s
        if (iap->ia_valid & ATTR_UID) {
                owner_namelen = nfs_map_uid_to_name(server->nfs_client, iap->ia_uid, owner_name);
                if (owner_namelen < 0) {
-                       printk(KERN_WARNING "nfs: couldn't resolve uid %d to string\n",
-                              iap->ia_uid);
+                       dprintk("nfs: couldn't resolve uid %d to string\n",
+                                       iap->ia_uid);
                        /* XXX */
                        strcpy(owner_name, "nobody");
                        owner_namelen = sizeof("nobody") - 1;
@@ -580,8 +643,8 @@ static int encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const s
        if (iap->ia_valid & ATTR_GID) {
                owner_grouplen = nfs_map_gid_to_group(server->nfs_client, iap->ia_gid, owner_group);
                if (owner_grouplen < 0) {
-                       printk(KERN_WARNING "nfs4: couldn't resolve gid %d to string\n",
-                              iap->ia_gid);
+                       dprintk("nfs: couldn't resolve gid %d to string\n",
+                                       iap->ia_gid);
                        strcpy(owner_group, "nobody");
                        owner_grouplen = sizeof("nobody") - 1;
                        /* goto out; */
@@ -651,7 +714,7 @@ static int encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const s
         * Now we backfill the bitmap and the attribute buffer length.
         */
        if (len != ((char *)p - (char *)q) + 4) {
-               printk ("encode_attr: Attr length calculation error! %u != %Zu\n",
+               printk(KERN_ERR "nfs: Attr length error, %u != %Zu\n",
                                len, ((char *)p - (char *)q) + 4);
                BUG();
        }
@@ -1108,12 +1171,10 @@ static int encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args)
 
 static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg *readdir, struct rpc_rqst *req)
 {
-       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
        uint32_t attrs[2] = {
                FATTR4_WORD0_RDATTR_ERROR|FATTR4_WORD0_FILEID,
                FATTR4_WORD1_MOUNTED_ON_FILEID,
        };
-       int replen;
        __be32 *p;
 
        RESERVE_SPACE(12+NFS4_VERIFIER_SIZE+20);
@@ -1138,37 +1199,16 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
                        attrs[0] & readdir->bitmask[0],
                        attrs[1] & readdir->bitmask[1]);
 
-       /* set up reply kvec
-        *    toplevel_status + taglen + rescount + OP_PUTFH + status
-        *      + OP_READDIR + status + verifer(2)  = 9
-        */
-       replen = (RPC_REPHDRSIZE + auth->au_rslack + 9) << 2;
-       xdr_inline_pages(&req->rq_rcv_buf, replen, readdir->pages,
-                        readdir->pgbase, readdir->count);
-       dprintk("%s: inlined page args = (%u, %p, %u, %u)\n",
-                       __FUNCTION__, replen, readdir->pages,
-                       readdir->pgbase, readdir->count);
-
        return 0;
 }
 
 static int encode_readlink(struct xdr_stream *xdr, const struct nfs4_readlink *readlink, struct rpc_rqst *req)
 {
-       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
-       unsigned int replen;
        __be32 *p;
 
        RESERVE_SPACE(4);
        WRITE32(OP_READLINK);
 
-       /* set up reply kvec
-        *    toplevel_status + taglen + rescount + OP_PUTFH + status
-        *      + OP_READLINK + status + string length = 8
-        */
-       replen = (RPC_REPHDRSIZE + auth->au_rslack + 8) << 2;
-       xdr_inline_pages(&req->rq_rcv_buf, replen, readlink->pages,
-                       readlink->pgbase, readlink->pglen);
-       
        return 0;
 }
 
@@ -1339,14 +1379,20 @@ static int nfs4_xdr_enc_access(struct rpc_rqst *req, __be32 *p, const struct nfs
 {
        struct xdr_stream xdr;
        struct compound_hdr hdr = {
-               .nops = 2,
+               .nops = 3,
        };
        int status;
 
        xdr_init_encode(&xdr, &req->rq_snd_buf, p);
        encode_compound_hdr(&xdr, &hdr);
-       if ((status = encode_putfh(&xdr, args->fh)) == 0)
-               status = encode_access(&xdr, args->access);
+       status = encode_putfh(&xdr, args->fh);
+       if (status != 0)
+               goto out;
+       status = encode_access(&xdr, args->access);
+       if (status != 0)
+               goto out;
+       status = encode_getfattr(&xdr, args->bitmask);
+out:
        return status;
 }
 
@@ -1398,7 +1444,7 @@ out:
 /*
  * Encode REMOVE request
  */
-static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs4_remove_arg *args)
+static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs_removeargs *args)
 {
        struct xdr_stream xdr;
        struct compound_hdr hdr = {
@@ -1410,7 +1456,7 @@ static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs
        encode_compound_hdr(&xdr, &hdr);
        if ((status = encode_putfh(&xdr, args->fh)) != 0)
                goto out;
-       if ((status = encode_remove(&xdr, args->name)) != 0)
+       if ((status = encode_remove(&xdr, &args->name)) != 0)
                goto out;
        status = encode_getfattr(&xdr, args->bitmask);
 out:
@@ -1734,6 +1780,8 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
        struct compound_hdr hdr = {
                .nops = 2,
        };
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
+       unsigned int replen;
        int status;
 
        xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -1742,6 +1790,15 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
        if(status)
                goto out;
        status = encode_readlink(&xdr, args, req);
+
+       /* set up reply kvec
+        *    toplevel_status + taglen + rescount + OP_PUTFH + status
+        *      + OP_READLINK + status + string length = 8
+        */
+       replen = (RPC_REPHDRSIZE + auth->au_rslack + NFS4_dec_readlink_sz) << 2;
+       xdr_inline_pages(&req->rq_rcv_buf, replen, args->pages,
+                       args->pgbase, args->pglen);
+
 out:
        return status;
 }
@@ -1755,6 +1812,8 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
        struct compound_hdr hdr = {
                .nops = 2,
        };
+       struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
+       int replen;
        int status;
 
        xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -1763,6 +1822,18 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
        if(status)
                goto out;
        status = encode_readdir(&xdr, args, req);
+
+       /* set up reply kvec
+        *    toplevel_status + taglen + rescount + OP_PUTFH + status
+        *      + OP_READDIR + status + verifer(2)  = 9
+        */
+       replen = (RPC_REPHDRSIZE + auth->au_rslack + NFS4_dec_readdir_sz) << 2;
+       xdr_inline_pages(&req->rq_rcv_buf, replen, args->pages,
+                        args->pgbase, args->count);
+       dprintk("%s: inlined page args = (%u, %p, %u, %u)\n",
+                       __FUNCTION__, replen, args->pages,
+                       args->pgbase, args->count);
+
 out:
        return status;
 }
@@ -1795,6 +1866,7 @@ static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readarg
        replen = (RPC_REPHDRSIZE + auth->au_rslack + NFS4_dec_read_sz) << 2;
        xdr_inline_pages(&req->rq_rcv_buf, replen,
                         args->pages, args->pgbase, args->count);
+       req->rq_rcv_buf.flags |= XDRBUF_READ;
 out:
        return status;
 }
@@ -1871,6 +1943,7 @@ static int nfs4_xdr_enc_write(struct rpc_rqst *req, __be32 *p, struct nfs_writea
        status = encode_write(&xdr, args);
        if (status)
                goto out;
+       req->rq_snd_buf.flags |= XDRBUF_WRITE;
        status = encode_getfattr(&xdr, args->bitmask);
 out:
        return status;
@@ -2118,9 +2191,9 @@ out:
 #define READ_BUF(nbytes)  do { \
        p = xdr_inline_decode(xdr, nbytes); \
        if (unlikely(!p)) { \
-               printk(KERN_INFO "%s: prematurely hit end of receive" \
+               dprintk("nfs: %s: prematurely hit end of receive" \
                                " buffer\n", __FUNCTION__); \
-               printk(KERN_INFO "%s: xdr->p=%p, bytes=%u, xdr->end=%p\n", \
+               dprintk("nfs: %s: xdr->p=%p, bytes=%u, xdr->end=%p\n", \
                                __FUNCTION__, xdr->p, nbytes, xdr->end); \
                return -EIO; \
        } \
@@ -2161,9 +2234,8 @@ static int decode_op_hdr(struct xdr_stream *xdr, enum nfs_opnum4 expected)
        READ_BUF(8);
        READ32(opnum);
        if (opnum != expected) {
-               printk(KERN_NOTICE
-                               "nfs4_decode_op_hdr: Server returned operation"
-                               " %d but we issued a request for %d\n",
+               dprintk("nfs: Server returned operation"
+                       " %d but we issued a request for %d\n",
                                opnum, expected);
                return -EIO;
        }
@@ -2445,14 +2517,12 @@ static int decode_attr_files_total(struct xdr_stream *xdr, uint32_t *bitmap, uin
 
 static int decode_pathname(struct xdr_stream *xdr, struct nfs4_pathname *path)
 {
-       int n;
+       u32 n;
        __be32 *p;
        int status = 0;
 
        READ_BUF(4);
        READ32(n);
-       if (n < 0)
-               goto out_eio;
        if (n == 0)
                goto root_path;
        dprintk("path ");
@@ -2509,13 +2579,11 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
                goto out_eio;
        res->nlocations = 0;
        while (res->nlocations < n) {
-               int m;
+               u32 m;
                struct nfs4_fs_location *loc = &res->locations[res->nlocations];
 
                READ_BUF(4);
                READ32(m);
-               if (m <= 0)
-                       goto out_eio;
 
                loc->nservers = 0;
                dprintk("%s: servers ", __FUNCTION__);
@@ -2528,8 +2596,12 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
                        if (loc->nservers < NFS4_FS_LOCATION_MAXSERVERS)
                                loc->nservers++;
                        else {
-                               int i;
-                               dprintk("%s: using first %d of %d servers returned for location %d\n", __FUNCTION__, NFS4_FS_LOCATION_MAXSERVERS, m, res->nlocations);
+                               unsigned int i;
+                               dprintk("%s: using first %u of %u servers "
+                                       "returned for location %u\n",
+                                               __FUNCTION__,
+                                               NFS4_FS_LOCATION_MAXSERVERS,
+                                               m, res->nlocations);
                                for (i = loc->nservers; i < m; i++) {
                                        unsigned int len;
                                        char *data;
@@ -2696,7 +2768,7 @@ static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap, struct nf
                                dprintk("%s: nfs_map_name_to_uid failed!\n",
                                                __FUNCTION__);
                } else
-                       printk(KERN_WARNING "%s: name too long (%u)!\n",
+                       dprintk("%s: name too long (%u)!\n",
                                        __FUNCTION__, len);
                bitmap[1] &= ~FATTR4_WORD1_OWNER;
        }
@@ -2721,7 +2793,7 @@ static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap, struct nf
                                dprintk("%s: nfs_map_group_to_gid failed!\n",
                                                __FUNCTION__);
                } else
-                       printk(KERN_WARNING "%s: name too long (%u)!\n",
+                       dprintk("%s: name too long (%u)!\n",
                                        __FUNCTION__, len);
                bitmap[1] &= ~FATTR4_WORD1_OWNER_GROUP;
        }
@@ -2888,7 +2960,8 @@ static int verify_attr_len(struct xdr_stream *xdr, __be32 *savep, uint32_t attrl
        unsigned int nwords = xdr->p - savep;
 
        if (unlikely(attrwords != nwords)) {
-               printk(KERN_WARNING "%s: server returned incorrect attribute length: %u %c %u\n",
+               dprintk("%s: server returned incorrect attribute length: "
+                       "%u %c %u\n",
                                __FUNCTION__,
                                attrwords << 2,
                                (attrwords < nwords) ? '<' : '>',
@@ -3161,11 +3234,12 @@ static int decode_getfh(struct xdr_stream *xdr, struct nfs_fh *fh)
        uint32_t len;
        int status;
 
+       /* Zero handle first to allow comparisons */
+       memset(fh, 0, sizeof(*fh));
+
        status = decode_op_hdr(xdr, OP_GETFH);
        if (status)
                return status;
-       /* Zero handle first to allow comparisons */
-       memset(fh, 0, sizeof(*fh));
 
        READ_BUF(4);
        READ32(len);
@@ -3388,7 +3462,7 @@ static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req, struct nfs_
        hdrlen = (u8 *) p - (u8 *) iov->iov_base;
        recvd = req->rq_rcv_buf.len - hdrlen;
        if (count > recvd) {
-               printk(KERN_WARNING "NFS: server cheating in read reply: "
+               dprintk("NFS: server cheating in read reply: "
                                "count %u > recvd %u\n", count, recvd);
                count = recvd;
                eof = 0;
@@ -3404,10 +3478,11 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
        struct xdr_buf  *rcvbuf = &req->rq_rcv_buf;
        struct page     *page = *rcvbuf->pages;
        struct kvec     *iov = rcvbuf->head;
-       unsigned int    nr, pglen = rcvbuf->page_len;
+       size_t          hdrlen;
+       u32             recvd, pglen = rcvbuf->page_len;
        __be32          *end, *entry, *p, *kaddr;
-       uint32_t        len, attrlen, xlen;
-       int             hdrlen, recvd, status;
+       unsigned int    nr;
+       int             status;
 
        status = decode_op_hdr(xdr, OP_READDIR);
        if (status)
@@ -3431,13 +3506,15 @@ static int decode_readdir(struct xdr_stream *xdr, struct rpc_rqst *req, struct n
        end = p + ((pglen + readdir->pgbase) >> 2);
        entry = p;
        for (nr = 0; *p++; nr++) {
+               u32 len, attrlen, xlen;
                if (end - p < 3)
                        goto short_pkt;
                dprintk("cookie = %Lu, ", *((unsigned long long *)p));
                p += 2;                 /* cookie */
                len = ntohl(*p++);      /* filename length */
                if (len > NFS4_MAXNAMLEN) {
-                       printk(KERN_WARNING "NFS: giant filename in readdir (len 0x%x)\n", len);
+                       dprintk("NFS: giant filename in readdir (len 0x%x)\n",
+                                       len);
                        goto err_unmap;
                }
                xlen = XDR_QUADLEN(len);
@@ -3465,7 +3542,7 @@ short_pkt:
        entry[0] = entry[1] = 0;
        /* truncate listing ? */
        if (!nr) {
-               printk(KERN_NOTICE "NFS: readdir reply truncated!\n");
+               dprintk("NFS: readdir reply truncated!\n");
                entry[1] = 1;
        }
        goto out;
@@ -3478,7 +3555,8 @@ static int decode_readlink(struct xdr_stream *xdr, struct rpc_rqst *req)
 {
        struct xdr_buf *rcvbuf = &req->rq_rcv_buf;
        struct kvec *iov = rcvbuf->head;
-       int hdrlen, len, recvd;
+       size_t hdrlen;
+       u32 len, recvd;
        __be32 *p;
        char *kaddr;
        int status;
@@ -3491,13 +3569,13 @@ static int decode_readlink(struct xdr_stream *xdr, struct rpc_rqst *req)
        READ_BUF(4);
        READ32(len);
        if (len >= rcvbuf->page_len || len <= 0) {
-               dprintk(KERN_WARNING "nfs: server returned giant symlink!\n");
+               dprintk("nfs: server returned giant symlink!\n");
                return -ENAMETOOLONG;
        }
        hdrlen = (char *) xdr->p - (char *) iov->iov_base;
        recvd = req->rq_rcv_buf.len - hdrlen;
        if (recvd < len) {
-               printk(KERN_WARNING "NFS: server cheating in readlink reply: "
+               dprintk("NFS: server cheating in readlink reply: "
                                "count %u > recvd %u\n", len, recvd);
                return -EIO;
        }
@@ -3573,14 +3651,15 @@ static int decode_getacl(struct xdr_stream *xdr, struct rpc_rqst *req,
        if (unlikely(bitmap[0] & (FATTR4_WORD0_ACL - 1U)))
                return -EIO;
        if (likely(bitmap[0] & FATTR4_WORD0_ACL)) {
-               int hdrlen, recvd;
+               size_t hdrlen;
+               u32 recvd;
 
                /* We ignore &savep and don't do consistency checks on
                 * the attr length.  Let userspace figure it out.... */
                hdrlen = (u8 *)xdr->p - (u8 *)iov->iov_base;
                recvd = req->rq_rcv_buf.len - hdrlen;
                if (attrlen > recvd) {
-                       printk(KERN_WARNING "NFS: server cheating in getattr"
+                       dprintk("NFS: server cheating in getattr"
                                        " acl reply: attrlen %u > recvd %u\n",
                                        attrlen, recvd);
                        return -EINVAL;
@@ -3625,8 +3704,7 @@ static int decode_setclientid(struct xdr_stream *xdr, struct nfs_client *clp)
        READ_BUF(8);
        READ32(opnum);
        if (opnum != OP_SETCLIENTID) {
-               printk(KERN_NOTICE
-                               "nfs4_decode_setclientid: Server returned operation"
+               dprintk("nfs: decode_setclientid: Server returned operation"
                                " %d\n", opnum);
                return -EIO;
        }
@@ -3720,8 +3798,13 @@ static int nfs4_xdr_dec_access(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_ac
        xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
        if ((status = decode_compound_hdr(&xdr, &hdr)) != 0)
                goto out;
-       if ((status = decode_putfh(&xdr)) == 0)
-               status = decode_access(&xdr, res);
+       status = decode_putfh(&xdr);
+       if (status != 0)
+               goto out;
+       status = decode_access(&xdr, res);
+       if (status != 0)
+               goto out;
+       decode_getfattr(&xdr, res->fattr, res->server);
 out:
        return status;
 }
@@ -3772,7 +3855,7 @@ out:
 /*
  * Decode REMOVE response
  */
-static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_remove_res *res)
+static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, __be32 *p, struct nfs_removeres *res)
 {
        struct xdr_stream xdr;
        struct compound_hdr hdr;
@@ -3785,7 +3868,7 @@ static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_re
                goto out;
        if ((status = decode_remove(&xdr, &res->cinfo)) != 0)
                goto out;
-       decode_getfattr(&xdr, res->dir_attr, res->server);
+       decode_getfattr(&xdr, &res->dir_attr, res->server);
 out:
        return status;
 }
@@ -4030,12 +4113,11 @@ static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, __be32 *p, struct nfs_openr
         status = decode_open(&xdr, res);
         if (status)
                 goto out;
-       status = decode_getfh(&xdr, &res->fh);
-        if (status)
+       if (decode_getfh(&xdr, &res->fh) != 0)
                goto out;
        if (decode_getfattr(&xdr, res->f_attr, res->server) != 0)
                goto out;
-       if ((status = decode_restorefh(&xdr)) != 0)
+       if (decode_restorefh(&xdr) != 0)
                goto out;
        decode_getfattr(&xdr, res->dir_attr, res->server);
 out: