diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-10-01 09:59:15 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-10-09 17:19:37 -0400 |
commit | 7668fdbe9aaeab705d1169ac86d0d18a12906d06 (patch) | |
tree | ebd55a76f4bafa1ff2accaa8ad4c6605b7eb0fa9 | |
parent | 12b373ebf05485d4937dd63a00c16f8efeaa79ba (diff) |
NFS: nfs_post_op_update_inode don't update cache_change_attribute
If nfs_post_op_update_inode fails because the server didn't return any
attributes, then we let the subsequent inode revalidation update
cache_change_attribute.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | fs/nfs/inode.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 7fdaaf5869ce..d722a0e84361 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -912,18 +912,14 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) | |||
912 | int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) | 912 | int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) |
913 | { | 913 | { |
914 | struct nfs_inode *nfsi = NFS_I(inode); | 914 | struct nfs_inode *nfsi = NFS_I(inode); |
915 | int status = 0; | ||
916 | 915 | ||
917 | if (unlikely((fattr->valid & NFS_ATTR_FATTR) == 0)) { | 916 | if (fattr->valid & NFS_ATTR_FATTR) |
918 | spin_lock(&inode->i_lock); | 917 | return nfs_refresh_inode(inode, fattr); |
919 | nfsi->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; | 918 | |
920 | nfsi->cache_change_attribute = jiffies; | 919 | spin_lock(&inode->i_lock); |
921 | spin_unlock(&inode->i_lock); | 920 | nfsi->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; |
922 | goto out; | 921 | spin_unlock(&inode->i_lock); |
923 | } | 922 | return 0; |
924 | status = nfs_refresh_inode(inode, fattr); | ||
925 | out: | ||
926 | return status; | ||
927 | } | 923 | } |
928 | 924 | ||
929 | /** | 925 | /** |