aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.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/nfs4proc.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/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 2e0fbff37d1f..f01c3d1b54b7 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -788,7 +788,6 @@ struct nfs4_opendata {
788 struct nfs4_string owner_name; 788 struct nfs4_string owner_name;
789 struct nfs4_string group_name; 789 struct nfs4_string group_name;
790 struct nfs_fattr f_attr; 790 struct nfs_fattr f_attr;
791 struct nfs_fattr dir_attr;
792 struct dentry *dir; 791 struct dentry *dir;
793 struct dentry *dentry; 792 struct dentry *dentry;
794 struct nfs4_state_owner *owner; 793 struct nfs4_state_owner *owner;
@@ -804,12 +803,10 @@ struct nfs4_opendata {
804static void nfs4_init_opendata_res(struct nfs4_opendata *p) 803static void nfs4_init_opendata_res(struct nfs4_opendata *p)
805{ 804{
806 p->o_res.f_attr = &p->f_attr; 805 p->o_res.f_attr = &p->f_attr;
807 p->o_res.dir_attr = &p->dir_attr;
808 p->o_res.seqid = p->o_arg.seqid; 806 p->o_res.seqid = p->o_arg.seqid;
809 p->c_res.seqid = p->c_arg.seqid; 807 p->c_res.seqid = p->c_arg.seqid;
810 p->o_res.server = p->o_arg.server; 808 p->o_res.server = p->o_arg.server;
811 nfs_fattr_init(&p->f_attr); 809 nfs_fattr_init(&p->f_attr);
812 nfs_fattr_init(&p->dir_attr);
813 nfs_fattr_init_names(&p->f_attr, &p->owner_name, &p->group_name); 810 nfs_fattr_init_names(&p->f_attr, &p->owner_name, &p->group_name);
814} 811}
815 812
@@ -843,7 +840,6 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
843 p->o_arg.name = &dentry->d_name; 840 p->o_arg.name = &dentry->d_name;
844 p->o_arg.server = server; 841 p->o_arg.server = server;
845 p->o_arg.bitmask = server->attr_bitmask; 842 p->o_arg.bitmask = server->attr_bitmask;
846 p->o_arg.dir_bitmask = server->cache_consistency_bitmask;
847 p->o_arg.claim = NFS4_OPEN_CLAIM_NULL; 843 p->o_arg.claim = NFS4_OPEN_CLAIM_NULL;
848 if (attrs != NULL && attrs->ia_valid != 0) { 844 if (attrs != NULL && attrs->ia_valid != 0) {
849 __be32 verf[2]; 845 __be32 verf[2];
@@ -1611,8 +1607,6 @@ static int _nfs4_recover_proc_open(struct nfs4_opendata *data)
1611 1607
1612 nfs_fattr_map_and_free_names(NFS_SERVER(dir), &data->f_attr); 1608 nfs_fattr_map_and_free_names(NFS_SERVER(dir), &data->f_attr);
1613 1609
1614 nfs_refresh_inode(dir, o_res->dir_attr);
1615
1616 if (o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) { 1610 if (o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) {
1617 status = _nfs4_proc_open_confirm(data); 1611 status = _nfs4_proc_open_confirm(data);
1618 if (status != 0) 1612 if (status != 0)
@@ -1645,11 +1639,8 @@ static int _nfs4_proc_open(struct nfs4_opendata *data)
1645 1639
1646 nfs_fattr_map_and_free_names(server, &data->f_attr); 1640 nfs_fattr_map_and_free_names(server, &data->f_attr);
1647 1641
1648 if (o_arg->open_flags & O_CREAT) { 1642 if (o_arg->open_flags & O_CREAT)
1649 update_changeattr(dir, &o_res->cinfo); 1643 update_changeattr(dir, &o_res->cinfo);
1650 nfs_post_op_update_inode(dir, o_res->dir_attr);
1651 } else
1652 nfs_refresh_inode(dir, o_res->dir_attr);
1653 if ((o_res->rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) == 0) 1644 if ((o_res->rflags & NFS4_OPEN_RESULT_LOCKTYPE_POSIX) == 0)
1654 server->caps &= ~NFS_CAP_POSIX_LOCK; 1645 server->caps &= ~NFS_CAP_POSIX_LOCK;
1655 if(o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) { 1646 if(o_res->rflags & NFS4_OPEN_RESULT_CONFIRM) {