mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-31 16:38:12 +00:00
fs: drop the timespec64 argument from update_time
Now that all of the update_time operations are prepared for it, we can drop the timespec64 argument from the update_time operation. Do that and remove it from some associated functions like inode_update_time and inode_needs_update_time. Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Jan Kara <jack@suse.cz> Message-Id: <20230807-mgctime-v7-8-d1dec143a704@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
51b0f3ebdb
commit
913e99287b
15 changed files with 27 additions and 39 deletions
|
@ -133,8 +133,7 @@ static int bad_inode_fiemap(struct inode *inode,
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bad_inode_update_time(struct inode *inode, struct timespec64 *time,
|
static int bad_inode_update_time(struct inode *inode, int flags)
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6059,8 +6059,7 @@ static int btrfs_dirty_inode(struct btrfs_inode *inode)
|
||||||
* This is a copy of file_update_time. We need this so we can return error on
|
* This is a copy of file_update_time. We need this so we can return error on
|
||||||
* ENOSPC for updating the inode in the case of file write and mmap writes.
|
* ENOSPC for updating the inode in the case of file write and mmap writes.
|
||||||
*/
|
*/
|
||||||
static int btrfs_update_time(struct inode *inode, struct timespec64 *now,
|
static int btrfs_update_time(struct inode *inode, int flags)
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
struct btrfs_root *root = BTRFS_I(inode)->root;
|
||||||
bool dirty = flags & ~S_VERSION;
|
bool dirty = flags & ~S_VERSION;
|
||||||
|
|
|
@ -1917,15 +1917,13 @@ static int btrfs_add_dev_item(struct btrfs_trans_handle *trans,
|
||||||
static void update_dev_time(const char *device_path)
|
static void update_dev_time(const char *device_path)
|
||||||
{
|
{
|
||||||
struct path path;
|
struct path path;
|
||||||
struct timespec64 now;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = kern_path(device_path, LOOKUP_FOLLOW, &path);
|
ret = kern_path(device_path, LOOKUP_FOLLOW, &path);
|
||||||
if (ret)
|
if (ret)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
now = current_time(d_inode(path.dentry));
|
inode_update_time(d_inode(path.dentry), S_MTIME | S_CTIME | S_VERSION);
|
||||||
inode_update_time(d_inode(path.dentry), &now, S_MTIME | S_CTIME | S_VERSION);
|
|
||||||
path_put(&path);
|
path_put(&path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -460,8 +460,7 @@ extern struct timespec64 fat_truncate_mtime(const struct msdos_sb_info *sbi,
|
||||||
const struct timespec64 *ts);
|
const struct timespec64 *ts);
|
||||||
extern int fat_truncate_time(struct inode *inode, struct timespec64 *now,
|
extern int fat_truncate_time(struct inode *inode, struct timespec64 *now,
|
||||||
int flags);
|
int flags);
|
||||||
extern int fat_update_time(struct inode *inode, struct timespec64 *now,
|
extern int fat_update_time(struct inode *inode, int flags);
|
||||||
int flags);
|
|
||||||
extern int fat_sync_bhs(struct buffer_head **bhs, int nr_bhs);
|
extern int fat_sync_bhs(struct buffer_head **bhs, int nr_bhs);
|
||||||
|
|
||||||
int fat_cache_init(void);
|
int fat_cache_init(void);
|
||||||
|
|
|
@ -339,7 +339,7 @@ int fat_truncate_time(struct inode *inode, struct timespec64 *now, int flags)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(fat_truncate_time);
|
EXPORT_SYMBOL_GPL(fat_truncate_time);
|
||||||
|
|
||||||
int fat_update_time(struct inode *inode, struct timespec64 *now, int flags)
|
int fat_update_time(struct inode *inode, int flags)
|
||||||
{
|
{
|
||||||
int dirty_flags = 0;
|
int dirty_flags = 0;
|
||||||
|
|
||||||
|
|
|
@ -2139,8 +2139,7 @@ loff_t gfs2_seek_hole(struct file *file, loff_t offset)
|
||||||
return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
|
return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gfs2_update_time(struct inode *inode, struct timespec64 *time,
|
static int gfs2_update_time(struct inode *inode, int flags)
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
struct gfs2_inode *ip = GFS2_I(inode);
|
struct gfs2_inode *ip = GFS2_I(inode);
|
||||||
struct gfs2_glock *gl = ip->i_gl;
|
struct gfs2_glock *gl = ip->i_gl;
|
||||||
|
|
30
fs/inode.c
30
fs/inode.c
|
@ -1958,10 +1958,10 @@ EXPORT_SYMBOL(generic_update_time);
|
||||||
* This does the actual work of updating an inodes time or version. Must have
|
* This does the actual work of updating an inodes time or version. Must have
|
||||||
* had called mnt_want_write() before calling this.
|
* had called mnt_want_write() before calling this.
|
||||||
*/
|
*/
|
||||||
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags)
|
int inode_update_time(struct inode *inode, int flags)
|
||||||
{
|
{
|
||||||
if (inode->i_op->update_time)
|
if (inode->i_op->update_time)
|
||||||
return inode->i_op->update_time(inode, time, flags);
|
return inode->i_op->update_time(inode, flags);
|
||||||
generic_update_time(inode, flags);
|
generic_update_time(inode, flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2015,7 +2015,6 @@ void touch_atime(const struct path *path)
|
||||||
{
|
{
|
||||||
struct vfsmount *mnt = path->mnt;
|
struct vfsmount *mnt = path->mnt;
|
||||||
struct inode *inode = d_inode(path->dentry);
|
struct inode *inode = d_inode(path->dentry);
|
||||||
struct timespec64 now;
|
|
||||||
|
|
||||||
if (!atime_needs_update(path, inode))
|
if (!atime_needs_update(path, inode))
|
||||||
return;
|
return;
|
||||||
|
@ -2034,8 +2033,7 @@ void touch_atime(const struct path *path)
|
||||||
* We may also fail on filesystems that have the ability to make parts
|
* We may also fail on filesystems that have the ability to make parts
|
||||||
* of the fs read only, e.g. subvolumes in Btrfs.
|
* of the fs read only, e.g. subvolumes in Btrfs.
|
||||||
*/
|
*/
|
||||||
now = current_time(inode);
|
inode_update_time(inode, S_ATIME);
|
||||||
inode_update_time(inode, &now, S_ATIME);
|
|
||||||
__mnt_drop_write(mnt);
|
__mnt_drop_write(mnt);
|
||||||
skip_update:
|
skip_update:
|
||||||
sb_end_write(inode->i_sb);
|
sb_end_write(inode->i_sb);
|
||||||
|
@ -2120,20 +2118,21 @@ int file_remove_privs(struct file *file)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(file_remove_privs);
|
EXPORT_SYMBOL(file_remove_privs);
|
||||||
|
|
||||||
static int inode_needs_update_time(struct inode *inode, struct timespec64 *now)
|
static int inode_needs_update_time(struct inode *inode)
|
||||||
{
|
{
|
||||||
int sync_it = 0;
|
int sync_it = 0;
|
||||||
|
struct timespec64 now = current_time(inode);
|
||||||
struct timespec64 ctime;
|
struct timespec64 ctime;
|
||||||
|
|
||||||
/* First try to exhaust all avenues to not sync */
|
/* First try to exhaust all avenues to not sync */
|
||||||
if (IS_NOCMTIME(inode))
|
if (IS_NOCMTIME(inode))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!timespec64_equal(&inode->i_mtime, now))
|
if (!timespec64_equal(&inode->i_mtime, &now))
|
||||||
sync_it = S_MTIME;
|
sync_it = S_MTIME;
|
||||||
|
|
||||||
ctime = inode_get_ctime(inode);
|
ctime = inode_get_ctime(inode);
|
||||||
if (!timespec64_equal(&ctime, now))
|
if (!timespec64_equal(&ctime, &now))
|
||||||
sync_it |= S_CTIME;
|
sync_it |= S_CTIME;
|
||||||
|
|
||||||
if (IS_I_VERSION(inode) && inode_iversion_need_inc(inode))
|
if (IS_I_VERSION(inode) && inode_iversion_need_inc(inode))
|
||||||
|
@ -2142,15 +2141,14 @@ static int inode_needs_update_time(struct inode *inode, struct timespec64 *now)
|
||||||
return sync_it;
|
return sync_it;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __file_update_time(struct file *file, struct timespec64 *now,
|
static int __file_update_time(struct file *file, int sync_mode)
|
||||||
int sync_mode)
|
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct inode *inode = file_inode(file);
|
struct inode *inode = file_inode(file);
|
||||||
|
|
||||||
/* try to update time settings */
|
/* try to update time settings */
|
||||||
if (!__mnt_want_write_file(file)) {
|
if (!__mnt_want_write_file(file)) {
|
||||||
ret = inode_update_time(inode, now, sync_mode);
|
ret = inode_update_time(inode, sync_mode);
|
||||||
__mnt_drop_write_file(file);
|
__mnt_drop_write_file(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2175,13 +2173,12 @@ int file_update_time(struct file *file)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct inode *inode = file_inode(file);
|
struct inode *inode = file_inode(file);
|
||||||
struct timespec64 now = current_time(inode);
|
|
||||||
|
|
||||||
ret = inode_needs_update_time(inode, &now);
|
ret = inode_needs_update_time(inode);
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return __file_update_time(file, &now, ret);
|
return __file_update_time(file, ret);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(file_update_time);
|
EXPORT_SYMBOL(file_update_time);
|
||||||
|
|
||||||
|
@ -2204,7 +2201,6 @@ static int file_modified_flags(struct file *file, int flags)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct inode *inode = file_inode(file);
|
struct inode *inode = file_inode(file);
|
||||||
struct timespec64 now = current_time(inode);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear the security bits if the process is not being run by root.
|
* Clear the security bits if the process is not being run by root.
|
||||||
|
@ -2217,13 +2213,13 @@ static int file_modified_flags(struct file *file, int flags)
|
||||||
if (unlikely(file->f_mode & FMODE_NOCMTIME))
|
if (unlikely(file->f_mode & FMODE_NOCMTIME))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = inode_needs_update_time(inode, &now);
|
ret = inode_needs_update_time(inode);
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (flags & IOCB_NOWAIT)
|
if (flags & IOCB_NOWAIT)
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
return __file_update_time(file, &now, ret);
|
return __file_update_time(file, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -900,7 +900,7 @@ int orangefs_permission(struct mnt_idmap *idmap,
|
||||||
return generic_permission(&nop_mnt_idmap, inode, mask);
|
return generic_permission(&nop_mnt_idmap, inode, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
int orangefs_update_time(struct inode *inode, struct timespec64 *time, int flags)
|
int orangefs_update_time(struct inode *inode, int flags)
|
||||||
{
|
{
|
||||||
struct iattr iattr;
|
struct iattr iattr;
|
||||||
|
|
||||||
|
|
|
@ -370,7 +370,7 @@ int orangefs_getattr(struct mnt_idmap *idmap, const struct path *path,
|
||||||
int orangefs_permission(struct mnt_idmap *idmap,
|
int orangefs_permission(struct mnt_idmap *idmap,
|
||||||
struct inode *inode, int mask);
|
struct inode *inode, int mask);
|
||||||
|
|
||||||
int orangefs_update_time(struct inode *, struct timespec64 *, int);
|
int orangefs_update_time(struct inode *, int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* defined in xattr.c
|
* defined in xattr.c
|
||||||
|
|
|
@ -693,7 +693,7 @@ int ovl_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags)
|
int ovl_update_time(struct inode *inode, int flags)
|
||||||
{
|
{
|
||||||
if (flags & S_ATIME) {
|
if (flags & S_ATIME) {
|
||||||
struct ovl_fs *ofs = inode->i_sb->s_fs_info;
|
struct ovl_fs *ofs = inode->i_sb->s_fs_info;
|
||||||
|
|
|
@ -665,7 +665,7 @@ static inline struct posix_acl *ovl_get_acl_path(const struct path *path,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
|
int ovl_update_time(struct inode *inode, int flags);
|
||||||
bool ovl_is_private_xattr(struct super_block *sb, const char *name);
|
bool ovl_is_private_xattr(struct super_block *sb, const char *name);
|
||||||
|
|
||||||
struct ovl_inode_params {
|
struct ovl_inode_params {
|
||||||
|
|
|
@ -1378,8 +1378,7 @@ static inline int mctime_update_needed(const struct inode *inode,
|
||||||
*
|
*
|
||||||
* This function updates time of the inode.
|
* This function updates time of the inode.
|
||||||
*/
|
*/
|
||||||
int ubifs_update_time(struct inode *inode, struct timespec64 *time,
|
int ubifs_update_time(struct inode *inode, int flags)
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
struct ubifs_inode *ui = ubifs_inode(inode);
|
struct ubifs_inode *ui = ubifs_inode(inode);
|
||||||
struct ubifs_info *c = inode->i_sb->s_fs_info;
|
struct ubifs_info *c = inode->i_sb->s_fs_info;
|
||||||
|
|
|
@ -2027,7 +2027,7 @@ int ubifs_calc_dark(const struct ubifs_info *c, int spc);
|
||||||
int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync);
|
int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync);
|
||||||
int ubifs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
|
int ubifs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
|
||||||
struct iattr *attr);
|
struct iattr *attr);
|
||||||
int ubifs_update_time(struct inode *inode, struct timespec64 *time, int flags);
|
int ubifs_update_time(struct inode *inode, int flags);
|
||||||
|
|
||||||
/* dir.c */
|
/* dir.c */
|
||||||
struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
|
struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
|
||||||
|
|
|
@ -1029,7 +1029,6 @@ xfs_vn_setattr(
|
||||||
STATIC int
|
STATIC int
|
||||||
xfs_vn_update_time(
|
xfs_vn_update_time(
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
struct timespec64 *time,
|
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
struct xfs_inode *ip = XFS_I(inode);
|
struct xfs_inode *ip = XFS_I(inode);
|
||||||
|
|
|
@ -1887,7 +1887,7 @@ struct inode_operations {
|
||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
|
||||||
u64 len);
|
u64 len);
|
||||||
int (*update_time)(struct inode *, struct timespec64 *, int);
|
int (*update_time)(struct inode *, int);
|
||||||
int (*atomic_open)(struct inode *, struct dentry *,
|
int (*atomic_open)(struct inode *, struct dentry *,
|
||||||
struct file *, unsigned open_flag,
|
struct file *, unsigned open_flag,
|
||||||
umode_t create_mode);
|
umode_t create_mode);
|
||||||
|
@ -2237,7 +2237,7 @@ enum file_time_flags {
|
||||||
|
|
||||||
extern bool atime_needs_update(const struct path *, struct inode *);
|
extern bool atime_needs_update(const struct path *, struct inode *);
|
||||||
extern void touch_atime(const struct path *);
|
extern void touch_atime(const struct path *);
|
||||||
int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
|
int inode_update_time(struct inode *inode, int flags);
|
||||||
|
|
||||||
static inline void file_accessed(struct file *file)
|
static inline void file_accessed(struct file *file)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue