aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4xdr.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-04-27 13:48:18 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-05-01 15:42:43 -0400
commit90ff0c548d1220d31f80e498b587393895705e6c (patch)
treecb3b1f54071764034304c4c35440ca12235e4b20 /fs/nfs/nfs4xdr.c
parentfee7fe196c41847c135cde41b0ec790f53ee6fcf (diff)
NFSv4: Simplify the NFSv4 OPEN compound
Get rid of the post-op GETATTR on the directory in order to reduce the amount of processing done on the server. The cost is that if we later need to stat() the directory, then we know that the ctime and mtime are likely to be invalid. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r--fs/nfs/nfs4xdr.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index ac7a3b014d99..6e878dcc0d2d 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -431,20 +431,14 @@ static int nfs4_stat_to_errno(int);
431#define NFS4_enc_open_sz (compound_encode_hdr_maxsz + \ 431#define NFS4_enc_open_sz (compound_encode_hdr_maxsz + \
432 encode_sequence_maxsz + \ 432 encode_sequence_maxsz + \
433 encode_putfh_maxsz + \ 433 encode_putfh_maxsz + \
434 encode_savefh_maxsz + \
435 encode_open_maxsz + \ 434 encode_open_maxsz + \
436 encode_getfh_maxsz + \ 435 encode_getfh_maxsz + \
437 encode_getattr_maxsz + \
438 encode_restorefh_maxsz + \
439 encode_getattr_maxsz) 436 encode_getattr_maxsz)
440#define NFS4_dec_open_sz (compound_decode_hdr_maxsz + \ 437#define NFS4_dec_open_sz (compound_decode_hdr_maxsz + \
441 decode_sequence_maxsz + \ 438 decode_sequence_maxsz + \
442 decode_putfh_maxsz + \ 439 decode_putfh_maxsz + \
443 decode_savefh_maxsz + \
444 decode_open_maxsz + \ 440 decode_open_maxsz + \
445 decode_getfh_maxsz + \ 441 decode_getfh_maxsz + \
446 decode_getattr_maxsz + \
447 decode_restorefh_maxsz + \
448 decode_getattr_maxsz) 442 decode_getattr_maxsz)
449#define NFS4_enc_open_confirm_sz \ 443#define NFS4_enc_open_confirm_sz \
450 (compound_encode_hdr_maxsz + \ 444 (compound_encode_hdr_maxsz + \
@@ -2191,12 +2185,9 @@ static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr,
2191 encode_compound_hdr(xdr, req, &hdr); 2185 encode_compound_hdr(xdr, req, &hdr);
2192 encode_sequence(xdr, &args->seq_args, &hdr); 2186 encode_sequence(xdr, &args->seq_args, &hdr);
2193 encode_putfh(xdr, args->fh, &hdr); 2187 encode_putfh(xdr, args->fh, &hdr);
2194 encode_savefh(xdr, &hdr);
2195 encode_open(xdr, args, &hdr); 2188 encode_open(xdr, args, &hdr);
2196 encode_getfh(xdr, &hdr); 2189 encode_getfh(xdr, &hdr);
2197 encode_getfattr(xdr, args->bitmask, &hdr); 2190 encode_getfattr(xdr, args->bitmask, &hdr);
2198 encode_restorefh(xdr, &hdr);
2199 encode_getfattr(xdr, args->dir_bitmask, &hdr);
2200 encode_nops(&hdr); 2191 encode_nops(&hdr);
2201} 2192}
2202 2193
@@ -6075,19 +6066,12 @@ static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
6075 status = decode_putfh(xdr); 6066 status = decode_putfh(xdr);
6076 if (status) 6067 if (status)
6077 goto out; 6068 goto out;
6078 status = decode_savefh(xdr);
6079 if (status)
6080 goto out;
6081 status = decode_open(xdr, res); 6069 status = decode_open(xdr, res);
6082 if (status) 6070 if (status)
6083 goto out; 6071 goto out;
6084 if (decode_getfh(xdr, &res->fh) != 0) 6072 if (decode_getfh(xdr, &res->fh) != 0)
6085 goto out; 6073 goto out;
6086 if (decode_getfattr(xdr, res->f_attr, res->server) != 0) 6074 decode_getfattr(xdr, res->f_attr, res->server);
6087 goto out;
6088 if (decode_restorefh(xdr) != 0)
6089 goto out;
6090 decode_getfattr(xdr, res->dir_attr, res->server);
6091out: 6075out:
6092 return status; 6076 return status;
6093} 6077}