diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-04-27 13:48:18 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-01 15:42:43 -0400 |
commit | 90ff0c548d1220d31f80e498b587393895705e6c (patch) | |
tree | cb3b1f54071764034304c4c35440ca12235e4b20 /fs/nfs/nfs4proc.c | |
parent | fee7fe196c41847c135cde41b0ec790f53ee6fcf (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.c | 11 |
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 { | |||
804 | static void nfs4_init_opendata_res(struct nfs4_opendata *p) | 803 | static 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) { |