diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index ef883f0bee8f..56231b31f806 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -928,9 +928,16 @@ static int fuse_update_get_attr(struct inode *inode, struct file *file, { struct fuse_inode *fi = get_fuse_inode(inode); int err = 0; + bool sync; - if (!(flags & AT_STATX_DONT_SYNC) && - time_before64(fi->i_time, get_jiffies_64())) { + if (flags & AT_STATX_FORCE_SYNC) + sync = true; + else if (flags & AT_STATX_DONT_SYNC) + sync = false; + else + sync = time_before64(fi->i_time, get_jiffies_64()); + + if (sync) { forget_all_cached_acls(inode); err = fuse_do_getattr(inode, stat, file); } else if (stat) {