Index: linux/fs/fuse/dir.c =================================================================== --- linux.orig/fs/fuse/dir.c 2021-10-18 13:40:27.381801032 +0200 +++ linux/fs/fuse/dir.c 2021-10-18 13:37:26.798569496 +0200 @@ -1055,11 +1055,9 @@ static int fuse_update_get_attr(struct i return err; } -int fuse_update_attributes(struct inode *inode, struct file *file) +int fuse_update_attributes(struct inode *inode, struct file *file, u32 mask) { - /* Do *not* need to get atime for internal purposes */ - return fuse_update_get_attr(inode, file, NULL, - STATX_BASIC_STATS & ~STATX_ATIME, 0); + return fuse_update_get_attr(inode, file, NULL, mask, 0); } int fuse_reverse_inval_entry(struct fuse_conn *fc, u64 parent_nodeid, Index: linux/fs/fuse/file.c =================================================================== --- linux.orig/fs/fuse/file.c 2021-10-18 13:40:27.382801044 +0200 +++ linux/fs/fuse/file.c 2021-10-18 13:40:14.504641904 +0200 @@ -996,7 +996,7 @@ static ssize_t fuse_cache_read_iter(stru if (fc->auto_inval_data || (iocb->ki_pos + iov_iter_count(to) > i_size_read(inode))) { int err; - err = fuse_update_attributes(inode, iocb->ki_filp); + err = fuse_update_attributes(inode, iocb->ki_filp, STATX_SIZE); if (err) return err; } @@ -1282,7 +1282,8 @@ static ssize_t fuse_cache_write_iter(str if (fc->writeback_cache) { /* Update size (EOF optimization) and mode (SUID clearing) */ - err = fuse_update_attributes(mapping->host, file); + err = fuse_update_attributes(mapping->host, file, + STATX_SIZE | STATX_MODE); if (err) return err; @@ -2633,7 +2634,7 @@ static loff_t fuse_lseek(struct file *fi return vfs_setpos(file, outarg.offset, inode->i_sb->s_maxbytes); fallback: - err = fuse_update_attributes(inode, file); + err = fuse_update_attributes(inode, file, STATX_SIZE); if (!err) return generic_file_llseek(file, offset, whence); else @@ -2653,7 +2654,7 @@ static loff_t fuse_file_llseek(struct fi break; case SEEK_END: inode_lock(inode); - retval = fuse_update_attributes(inode, file); + retval = fuse_update_attributes(inode, file, STATX_SIZE); if (!retval) retval = generic_file_llseek(file, offset, whence); inode_unlock(inode); Index: linux/fs/fuse/fuse_i.h =================================================================== --- linux.orig/fs/fuse/fuse_i.h 2021-10-18 13:40:27.382801044 +0200 +++ linux/fs/fuse/fuse_i.h 2021-10-18 13:37:43.778779327 +0200 @@ -1161,7 +1161,7 @@ u64 fuse_lock_owner_id(struct fuse_conn void fuse_flush_time_update(struct inode *inode); void fuse_update_ctime(struct inode *inode); -int fuse_update_attributes(struct inode *inode, struct file *file); +int fuse_update_attributes(struct inode *inode, struct file *file, u32 mask); void fuse_flush_writepages(struct inode *inode); Index: linux/fs/fuse/readdir.c =================================================================== --- linux.orig/fs/fuse/readdir.c 2021-10-18 13:41:02.365233336 +0200 +++ linux/fs/fuse/readdir.c 2021-10-18 13:38:03.413021954 +0200 @@ -454,7 +454,7 @@ static int fuse_readdir_cached(struct fi * cache; both cases require an up-to-date mtime value. */ if (!ctx->pos && fc->auto_inval_data) { - int err = fuse_update_attributes(inode, file); + int err = fuse_update_attributes(inode, file, STATX_MTIME); if (err) return err;