lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230706111821.754meunnkqb6xuyl@quack3>
Date:   Thu, 6 Jul 2023 13:18:21 +0200
From:   Jan Kara <jack@...e.cz>
To:     Jeff Layton <jlayton@...nel.org>
Cc:     Christian Brauner <brauner@...nel.org>,
        Jaegeuk Kim <jaegeuk@...nel.org>, Chao Yu <chao@...nel.org>,
        Al Viro <viro@...iv.linux.org.uk>, Jan Kara <jack@...e.cz>,
        linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
        linux-f2fs-devel@...ts.sourceforge.net
Subject: Re: [PATCH v2 43/92] f2fs: convert to ctime accessor functions

On Wed 05-07-23 15:01:08, Jeff Layton wrote:
> In later patches, we're going to change how the inode's ctime field is
> used. Switch to using accessor functions instead of raw accesses of
> inode->i_ctime.
> 
> Signed-off-by: Jeff Layton <jlayton@...nel.org>

Looks good to me. Feel free to add:

Reviewed-by: Jan Kara <jack@...e.cz>

								Honza

> ---
>  fs/f2fs/dir.c      |  8 ++++----
>  fs/f2fs/f2fs.h     |  4 +++-
>  fs/f2fs/file.c     | 20 ++++++++++----------
>  fs/f2fs/inline.c   |  2 +-
>  fs/f2fs/inode.c    | 10 +++++-----
>  fs/f2fs/namei.c    | 12 ++++++------
>  fs/f2fs/recovery.c |  4 ++--
>  fs/f2fs/super.c    |  2 +-
>  fs/f2fs/xattr.c    |  2 +-
>  9 files changed, 33 insertions(+), 31 deletions(-)
> 
> diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
> index d635c58cf5a3..8aa29fe2e87b 100644
> --- a/fs/f2fs/dir.c
> +++ b/fs/f2fs/dir.c
> @@ -455,7 +455,7 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
>  	de->file_type = fs_umode_to_ftype(inode->i_mode);
>  	set_page_dirty(page);
>  
> -	dir->i_mtime = dir->i_ctime = current_time(dir);
> +	dir->i_mtime = inode_set_ctime_current(dir);
>  	f2fs_mark_inode_dirty_sync(dir, false);
>  	f2fs_put_page(page, 1);
>  }
> @@ -609,7 +609,7 @@ void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
>  			f2fs_i_links_write(dir, true);
>  		clear_inode_flag(inode, FI_NEW_INODE);
>  	}
> -	dir->i_mtime = dir->i_ctime = current_time(dir);
> +	dir->i_mtime = inode_set_ctime_current(dir);
>  	f2fs_mark_inode_dirty_sync(dir, false);
>  
>  	if (F2FS_I(dir)->i_current_depth != current_depth)
> @@ -858,7 +858,7 @@ void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
>  
>  	if (S_ISDIR(inode->i_mode))
>  		f2fs_i_links_write(dir, false);
> -	inode->i_ctime = current_time(inode);
> +	inode_set_ctime_current(inode);
>  
>  	f2fs_i_links_write(inode, false);
>  	if (S_ISDIR(inode->i_mode)) {
> @@ -919,7 +919,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
>  	}
>  	f2fs_put_page(page, 1);
>  
> -	dir->i_ctime = dir->i_mtime = current_time(dir);
> +	dir->i_mtime = inode_set_ctime_current(dir);
>  	f2fs_mark_inode_dirty_sync(dir, false);
>  
>  	if (inode)
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index c7cb2177b252..e18272ae3119 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -3303,9 +3303,11 @@ static inline void clear_file(struct inode *inode, int type)
>  
>  static inline bool f2fs_is_time_consistent(struct inode *inode)
>  {
> +	struct timespec64 ctime = inode_get_ctime(inode);
> +
>  	if (!timespec64_equal(F2FS_I(inode)->i_disk_time, &inode->i_atime))
>  		return false;
> -	if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 1, &inode->i_ctime))
> +	if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 1, &ctime))
>  		return false;
>  	if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 2, &inode->i_mtime))
>  		return false;
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 093039dee992..b018800223c4 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -794,7 +794,7 @@ int f2fs_truncate(struct inode *inode)
>  	if (err)
>  		return err;
>  
> -	inode->i_mtime = inode->i_ctime = current_time(inode);
> +	inode->i_mtime = inode_set_ctime_current(inode);
>  	f2fs_mark_inode_dirty_sync(inode, false);
>  	return 0;
>  }
> @@ -905,7 +905,7 @@ static void __setattr_copy(struct mnt_idmap *idmap,
>  	if (ia_valid & ATTR_MTIME)
>  		inode->i_mtime = attr->ia_mtime;
>  	if (ia_valid & ATTR_CTIME)
> -		inode->i_ctime = attr->ia_ctime;
> +		inode_set_ctime_to_ts(inode, attr->ia_ctime);
>  	if (ia_valid & ATTR_MODE) {
>  		umode_t mode = attr->ia_mode;
>  		vfsgid_t vfsgid = i_gid_into_vfsgid(idmap, inode);
> @@ -1008,7 +1008,7 @@ int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
>  			return err;
>  
>  		spin_lock(&F2FS_I(inode)->i_size_lock);
> -		inode->i_mtime = inode->i_ctime = current_time(inode);
> +		inode->i_mtime = inode_set_ctime_current(inode);
>  		F2FS_I(inode)->last_disk_size = i_size_read(inode);
>  		spin_unlock(&F2FS_I(inode)->i_size_lock);
>  	}
> @@ -1835,7 +1835,7 @@ static long f2fs_fallocate(struct file *file, int mode,
>  	}
>  
>  	if (!ret) {
> -		inode->i_mtime = inode->i_ctime = current_time(inode);
> +		inode->i_mtime = inode_set_ctime_current(inode);
>  		f2fs_mark_inode_dirty_sync(inode, false);
>  		f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
>  	}
> @@ -1937,7 +1937,7 @@ static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
>  	else
>  		clear_inode_flag(inode, FI_PROJ_INHERIT);
>  
> -	inode->i_ctime = current_time(inode);
> +	inode_set_ctime_current(inode);
>  	f2fs_set_inode_flags(inode);
>  	f2fs_mark_inode_dirty_sync(inode, true);
>  	return 0;
> @@ -2874,10 +2874,10 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
>  	if (ret)
>  		goto out_unlock;
>  
> -	src->i_mtime = src->i_ctime = current_time(src);
> +	src->i_mtime = inode_set_ctime_current(src);
>  	f2fs_mark_inode_dirty_sync(src, false);
>  	if (src != dst) {
> -		dst->i_mtime = dst->i_ctime = current_time(dst);
> +		dst->i_mtime = inode_set_ctime_current(dst);
>  		f2fs_mark_inode_dirty_sync(dst, false);
>  	}
>  	f2fs_update_time(sbi, REQ_TIME);
> @@ -3073,7 +3073,7 @@ static int f2fs_ioc_setproject(struct inode *inode, __u32 projid)
>  		goto out_unlock;
>  
>  	fi->i_projid = kprojid;
> -	inode->i_ctime = current_time(inode);
> +	inode_set_ctime_current(inode);
>  	f2fs_mark_inode_dirty_sync(inode, true);
>  out_unlock:
>  	f2fs_unlock_op(sbi);
> @@ -3511,7 +3511,7 @@ static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
>  	}
>  
>  	set_inode_flag(inode, FI_COMPRESS_RELEASED);
> -	inode->i_ctime = current_time(inode);
> +	inode_set_ctime_current(inode);
>  	f2fs_mark_inode_dirty_sync(inode, true);
>  
>  	f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
> @@ -3710,7 +3710,7 @@ static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
>  
>  	if (ret >= 0) {
>  		clear_inode_flag(inode, FI_COMPRESS_RELEASED);
> -		inode->i_ctime = current_time(inode);
> +		inode_set_ctime_current(inode);
>  		f2fs_mark_inode_dirty_sync(inode, true);
>  	}
>  unlock_inode:
> diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
> index 4638fee16a91..88fc9208ffa7 100644
> --- a/fs/f2fs/inline.c
> +++ b/fs/f2fs/inline.c
> @@ -698,7 +698,7 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
>  	set_page_dirty(page);
>  	f2fs_put_page(page, 1);
>  
> -	dir->i_ctime = dir->i_mtime = current_time(dir);
> +	dir->i_mtime = inode_set_ctime_current(dir);
>  	f2fs_mark_inode_dirty_sync(dir, false);
>  
>  	if (inode)
> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
> index 09e986b050c6..c1c2ba9f28e5 100644
> --- a/fs/f2fs/inode.c
> +++ b/fs/f2fs/inode.c
> @@ -403,7 +403,7 @@ static void init_idisk_time(struct inode *inode)
>  	struct f2fs_inode_info *fi = F2FS_I(inode);
>  
>  	fi->i_disk_time[0] = inode->i_atime;
> -	fi->i_disk_time[1] = inode->i_ctime;
> +	fi->i_disk_time[1] = inode_get_ctime(inode);
>  	fi->i_disk_time[2] = inode->i_mtime;
>  }
>  
> @@ -434,10 +434,10 @@ static int do_read_inode(struct inode *inode)
>  	inode->i_blocks = SECTOR_FROM_BLOCK(le64_to_cpu(ri->i_blocks) - 1);
>  
>  	inode->i_atime.tv_sec = le64_to_cpu(ri->i_atime);
> -	inode->i_ctime.tv_sec = le64_to_cpu(ri->i_ctime);
> +	inode_set_ctime(inode, le64_to_cpu(ri->i_ctime),
> +			le32_to_cpu(ri->i_ctime_nsec));
>  	inode->i_mtime.tv_sec = le64_to_cpu(ri->i_mtime);
>  	inode->i_atime.tv_nsec = le32_to_cpu(ri->i_atime_nsec);
> -	inode->i_ctime.tv_nsec = le32_to_cpu(ri->i_ctime_nsec);
>  	inode->i_mtime.tv_nsec = le32_to_cpu(ri->i_mtime_nsec);
>  	inode->i_generation = le32_to_cpu(ri->i_generation);
>  	if (S_ISDIR(inode->i_mode))
> @@ -714,10 +714,10 @@ void f2fs_update_inode(struct inode *inode, struct page *node_page)
>  	set_raw_inline(inode, ri);
>  
>  	ri->i_atime = cpu_to_le64(inode->i_atime.tv_sec);
> -	ri->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
> +	ri->i_ctime = cpu_to_le64(inode_get_ctime(inode).tv_sec);
>  	ri->i_mtime = cpu_to_le64(inode->i_mtime.tv_sec);
>  	ri->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
> -	ri->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
> +	ri->i_ctime_nsec = cpu_to_le32(inode_get_ctime(inode).tv_nsec);
>  	ri->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
>  	if (S_ISDIR(inode->i_mode))
>  		ri->i_current_depth =
> diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
> index bee0568888da..193b22a2d6bf 100644
> --- a/fs/f2fs/namei.c
> +++ b/fs/f2fs/namei.c
> @@ -243,7 +243,7 @@ static struct inode *f2fs_new_inode(struct mnt_idmap *idmap,
>  
>  	inode->i_ino = ino;
>  	inode->i_blocks = 0;
> -	inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
> +	inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
>  	F2FS_I(inode)->i_crtime = inode->i_mtime;
>  	inode->i_generation = get_random_u32();
>  
> @@ -420,7 +420,7 @@ static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
>  
>  	f2fs_balance_fs(sbi, true);
>  
> -	inode->i_ctime = current_time(inode);
> +	inode_set_ctime_current(inode);
>  	ihold(inode);
>  
>  	set_inode_flag(inode, FI_INC_LINK);
> @@ -1052,7 +1052,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
>  		f2fs_set_link(new_dir, new_entry, new_page, old_inode);
>  		new_page = NULL;
>  
> -		new_inode->i_ctime = current_time(new_inode);
> +		inode_set_ctime_current(new_inode);
>  		f2fs_down_write(&F2FS_I(new_inode)->i_sem);
>  		if (old_dir_entry)
>  			f2fs_i_links_write(new_inode, false);
> @@ -1086,7 +1086,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir,
>  		f2fs_i_pino_write(old_inode, new_dir->i_ino);
>  	f2fs_up_write(&F2FS_I(old_inode)->i_sem);
>  
> -	old_inode->i_ctime = current_time(old_inode);
> +	inode_set_ctime_current(old_inode);
>  	f2fs_mark_inode_dirty_sync(old_inode, false);
>  
>  	f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
> @@ -1251,7 +1251,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
>  		f2fs_i_pino_write(old_inode, new_dir->i_ino);
>  	f2fs_up_write(&F2FS_I(old_inode)->i_sem);
>  
> -	old_dir->i_ctime = current_time(old_dir);
> +	inode_set_ctime_current(old_dir);
>  	if (old_nlink) {
>  		f2fs_down_write(&F2FS_I(old_dir)->i_sem);
>  		f2fs_i_links_write(old_dir, old_nlink > 0);
> @@ -1270,7 +1270,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
>  		f2fs_i_pino_write(new_inode, old_dir->i_ino);
>  	f2fs_up_write(&F2FS_I(new_inode)->i_sem);
>  
> -	new_dir->i_ctime = current_time(new_dir);
> +	inode_set_ctime_current(new_dir);
>  	if (new_nlink) {
>  		f2fs_down_write(&F2FS_I(new_dir)->i_sem);
>  		f2fs_i_links_write(new_dir, new_nlink > 0);
> diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
> index 4e7d4ceeb084..b8637e88d94f 100644
> --- a/fs/f2fs/recovery.c
> +++ b/fs/f2fs/recovery.c
> @@ -321,10 +321,10 @@ static int recover_inode(struct inode *inode, struct page *page)
>  
>  	f2fs_i_size_write(inode, le64_to_cpu(raw->i_size));
>  	inode->i_atime.tv_sec = le64_to_cpu(raw->i_atime);
> -	inode->i_ctime.tv_sec = le64_to_cpu(raw->i_ctime);
> +	inode_set_ctime(inode, le64_to_cpu(raw->i_ctime),
> +			le32_to_cpu(raw->i_ctime_nsec));
>  	inode->i_mtime.tv_sec = le64_to_cpu(raw->i_mtime);
>  	inode->i_atime.tv_nsec = le32_to_cpu(raw->i_atime_nsec);
> -	inode->i_ctime.tv_nsec = le32_to_cpu(raw->i_ctime_nsec);
>  	inode->i_mtime.tv_nsec = le32_to_cpu(raw->i_mtime_nsec);
>  
>  	F2FS_I(inode)->i_advise = raw->i_advise;
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index ca31163da00a..28aeffc0048c 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -2703,7 +2703,7 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,
>  
>  	if (len == towrite)
>  		return err;
> -	inode->i_mtime = inode->i_ctime = current_time(inode);
> +	inode->i_mtime = inode_set_ctime_current(inode);
>  	f2fs_mark_inode_dirty_sync(inode, false);
>  	return len - towrite;
>  }
> diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
> index 476b186b90a6..4ae93e1df421 100644
> --- a/fs/f2fs/xattr.c
> +++ b/fs/f2fs/xattr.c
> @@ -764,7 +764,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
>  same:
>  	if (is_inode_flag_set(inode, FI_ACL_MODE)) {
>  		inode->i_mode = F2FS_I(inode)->i_acl_mode;
> -		inode->i_ctime = current_time(inode);
> +		inode_set_ctime_current(inode);
>  		clear_inode_flag(inode, FI_ACL_MODE);
>  	}
>  
> -- 
> 2.41.0
> 
-- 
Jan Kara <jack@...e.com>
SUSE Labs, CR

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ