diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-04-29 11:23:50 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-01 15:42:40 -0400 |
commit | b4b1eadf7c5f00636500ad47f68edc0666e63ea5 (patch) | |
tree | 2ae583a6b89597655ebbf63fb3d00364061b48ad /fs/nfs/inode.c | |
parent | e144cbcc251f16c1a14b9256cda73ab4aebe933a (diff) | |
download | op-kernel-dev-b4b1eadf7c5f00636500ad47f68edc0666e63ea5.zip op-kernel-dev-b4b1eadf7c5f00636500ad47f68edc0666e63ea5.tar.gz |
NFS: Don't force page cache revalidations when holding a delegation
If we're holding a delegation, then we already know that our
page cache is valid.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r-- | fs/nfs/inode.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 59a12c6a..fed27c0 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -870,6 +870,15 @@ static int nfs_invalidate_mapping(struct inode *inode, struct address_space *map return 0; } +static bool nfs_mapping_need_revalidate_inode(struct inode *inode) +{ + if (nfs_have_delegated_attributes(inode)) + return false; + return (NFS_I(inode)->cache_validity & NFS_INO_REVAL_PAGECACHE) + || nfs_attribute_timeout(inode) + || NFS_STALE(inode); +} + /** * nfs_revalidate_mapping - Revalidate the pagecache * @inode - pointer to host inode @@ -880,9 +889,7 @@ int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping) struct nfs_inode *nfsi = NFS_I(inode); int ret = 0; - if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) - || nfs_attribute_cache_expired(inode) - || NFS_STALE(inode)) { + if (nfs_mapping_need_revalidate_inode(inode)) { ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode); if (ret < 0) goto out; |