aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r--fs/nfs/inode.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index eddd0e982d23..69036ef39866 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -1220,7 +1220,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1220 status = -ESTALE; 1220 status = -ESTALE;
1221 /* Do we trust the cached ESTALE? */ 1221 /* Do we trust the cached ESTALE? */
1222 if (NFS_ATTRTIMEO(inode) != 0) { 1222 if (NFS_ATTRTIMEO(inode) != 0) {
1223 if (nfsi->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ATIME)) { 1223 if (nfsi->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME)) {
1224 /* no */ 1224 /* no */
1225 } else 1225 } else
1226 goto out; 1226 goto out;
@@ -1251,8 +1251,6 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1251 } 1251 }
1252 spin_unlock(&inode->i_lock); 1252 spin_unlock(&inode->i_lock);
1253 1253
1254 nfs_revalidate_mapping(inode, inode->i_mapping);
1255
1256 if (nfsi->cache_validity & NFS_INO_INVALID_ACL) 1254 if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
1257 nfs_zap_acl_cache(inode); 1255 nfs_zap_acl_cache(inode);
1258 1256
@@ -1287,7 +1285,7 @@ int nfs_attribute_timeout(struct inode *inode)
1287int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 1285int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1288{ 1286{
1289 nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE); 1287 nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
1290 if (!(NFS_I(inode)->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA)) 1288 if (!(NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATTR)
1291 && !nfs_attribute_timeout(inode)) 1289 && !nfs_attribute_timeout(inode))
1292 return NFS_STALE(inode) ? -ESTALE : 0; 1290 return NFS_STALE(inode) ? -ESTALE : 0;
1293 return __nfs_revalidate_inode(server, inode); 1291 return __nfs_revalidate_inode(server, inode);
@@ -1298,9 +1296,16 @@ int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1298 * @inode - pointer to host inode 1296 * @inode - pointer to host inode
1299 * @mapping - pointer to mapping 1297 * @mapping - pointer to mapping
1300 */ 1298 */
1301void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping) 1299int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1302{ 1300{
1303 struct nfs_inode *nfsi = NFS_I(inode); 1301 struct nfs_inode *nfsi = NFS_I(inode);
1302 int ret = 0;
1303
1304 if (NFS_STALE(inode))
1305 ret = -ESTALE;
1306 if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE)
1307 || nfs_attribute_timeout(inode))
1308 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
1304 1309
1305 if (nfsi->cache_validity & NFS_INO_INVALID_DATA) { 1310 if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
1306 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE); 1311 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
@@ -1321,6 +1326,7 @@ void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1321 inode->i_sb->s_id, 1326 inode->i_sb->s_id,
1322 (long long)NFS_FILEID(inode)); 1327 (long long)NFS_FILEID(inode));
1323 } 1328 }
1329 return ret;
1324} 1330}
1325 1331
1326/** 1332/**