Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d6ac02dfaa6c423874839fe289c7320624aa9288
Commit:     d6ac02dfaa6c423874839fe289c7320624aa9288
Parent:     9104a55dc382c4aae42dff3f54351085cbcb7317
Author:     Trond Myklebust <[EMAIL PROTECTED]>
AuthorDate: Thu Jul 19 10:03:37 2007 -0400
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Thu Jul 19 15:09:04 2007 -0400

    NFSv4: Fix the readdir reply buffer alignment
    
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 fs/nfs/nfs4xdr.c |   27 ++++++++++++++-------------
 1 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 5eb92f1..bec171a 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -1168,12 +1168,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);
@@ -1198,17 +1196,6 @@ 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;
 }
 
@@ -1815,6 +1802,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);
@@ -1823,6 +1812,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;
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to