return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
 }
 
-static bool nfs_check_cache_invalid_delegated(struct inode *inode, unsigned long flags)
+static bool nfs_check_cache_flags_invalid(struct inode *inode,
+                                         unsigned long flags)
 {
        unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
 
-       /* Special case for the pagecache or access cache */
-       if (flags == NFS_INO_REVAL_PAGECACHE &&
-           !(cache_validity & NFS_INO_REVAL_FORCED))
-               return false;
        return (cache_validity & flags) != 0;
 }
 
-static bool nfs_check_cache_invalid_not_delegated(struct inode *inode, unsigned long flags)
-{
-       unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
-
-       if ((cache_validity & flags) != 0)
-               return true;
-       if (nfs_attribute_timeout(inode))
-               return true;
-       return false;
-}
-
 bool nfs_check_cache_invalid(struct inode *inode, unsigned long flags)
 {
-       if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
-               return nfs_check_cache_invalid_delegated(inode, flags);
-
-       return nfs_check_cache_invalid_not_delegated(inode, flags);
+       if (nfs_check_cache_flags_invalid(inode, flags))
+               return true;
+       return nfs_attribute_cache_expired(inode);
 }
 EXPORT_SYMBOL_GPL(nfs_check_cache_invalid);
 
 
        if (!(cache_validity & NFS_INO_INVALID_ATIME))
                reply_mask |= STATX_ATIME;
-       if (!(cache_validity & NFS_INO_REVAL_PAGECACHE)) {
-               if (!(cache_validity & NFS_INO_INVALID_CTIME))
-                       reply_mask |= STATX_CTIME;
-               if (!(cache_validity & NFS_INO_INVALID_MTIME))
-                       reply_mask |= STATX_MTIME;
-               if (!(cache_validity & NFS_INO_INVALID_SIZE))
-                       reply_mask |= STATX_SIZE;
-       }
+       if (!(cache_validity & NFS_INO_INVALID_CTIME))
+               reply_mask |= STATX_CTIME;
+       if (!(cache_validity & NFS_INO_INVALID_MTIME))
+               reply_mask |= STATX_MTIME;
+       if (!(cache_validity & NFS_INO_INVALID_SIZE))
+               reply_mask |= STATX_SIZE;
        if (!(cache_validity & NFS_INO_INVALID_OTHER))
                reply_mask |= STATX_UID | STATX_GID | STATX_MODE | STATX_NLINK;
        if (!(cache_validity & NFS_INO_INVALID_BLOCKS))
 
 bool nfs_mapping_need_revalidate_inode(struct inode *inode)
 {
-       return nfs_check_cache_invalid(inode, NFS_INO_REVAL_PAGECACHE) ||
+       return nfs_check_cache_invalid(inode, NFS_INO_INVALID_CHANGE) ||
                NFS_STALE(inode);
 }
 
 
 
        memcpy(bitmask, src, sizeof(*bitmask) * NFS4_BITMASK_SZ);
 
-       if (cache_validity & (NFS_INO_INVALID_CHANGE | NFS_INO_REVAL_PAGECACHE))
+       if (cache_validity & NFS_INO_INVALID_CHANGE)
                bitmask[0] |= FATTR4_WORD0_CHANGE;
        if (cache_validity & NFS_INO_INVALID_ATIME)
                bitmask[1] |= FATTR4_WORD1_TIME_ACCESS;
        if (nfs4_have_delegation(inode, FMODE_READ) &&
            !(cache_validity & NFS_INO_REVAL_FORCED))
                bitmask[0] &= ~FATTR4_WORD0_SIZE;
-       else if (cache_validity &
-                (NFS_INO_INVALID_SIZE | NFS_INO_REVAL_PAGECACHE))
+       else if (cache_validity & NFS_INO_INVALID_SIZE)
                bitmask[0] |= FATTR4_WORD0_SIZE;
 
        for (i = 0; i < NFS4_BITMASK_SZ; i++)