Re: [PATCH 09/11] fs: refactor file_update_time_flags

Jan Kara <[email protected]>
Newsgroups dev.linux.lists.gfs2,org.infradead.lists.linux-mtd,org.kernel.vger.io-uring,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kernel.vger.linux-unionfs,org.kernel.vger.linux-xfs
Message-ID <t3klyln4eejq7olm3bseuje2lao6jh3a26kpzkdqrnak5l2sdh@ehrk2o6mmxfw>
On Tue 06-01-26 08:50:03, Christoph Hellwig wrote:
> Split all the inode timestamp flags into a helper.  This not only
> makes the code a bit more readable, but also optimizes away the
> further checks as soon as know we need an update.
> 
> Signed-off-by: Christoph Hellwig <[email protected]>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <[email protected]>

								Honza

> ---
>  fs/inode.c | 31 +++++++++++++++----------------
>  1 file changed, 15 insertions(+), 16 deletions(-)
> 
> diff --git a/fs/inode.c b/fs/inode.c
> index 01e4f6b9b46e..d2bfe302e647 100644
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -2378,31 +2378,30 @@ struct timespec64 current_time(struct inode *inode)
>  }
>  EXPORT_SYMBOL(current_time);
>  
> +static inline bool need_cmtime_update(struct inode *inode)
> +{
> +	struct timespec64 now = current_time(inode), ts;
> +
> +	ts = inode_get_mtime(inode);
> +	if (!timespec64_equal(&ts, &now))
> +		return true;
> +	ts = inode_get_ctime(inode);
> +	if (!timespec64_equal(&ts, &now))
> +		return true;
> +	return IS_I_VERSION(inode) && inode_iversion_need_inc(inode);
> +}
> +
>  static int file_update_time_flags(struct file *file, unsigned int flags)
>  {
>  	struct inode *inode = file_inode(file);
> -	struct timespec64 now, ts;
> -	bool need_update = false;
> -	int ret = 0;
> +	int ret;
>  
>  	/* First try to exhaust all avenues to not sync */
>  	if (IS_NOCMTIME(inode))
>  		return 0;
>  	if (unlikely(file->f_mode & FMODE_NOCMTIME))
>  		return 0;
> -
> -	now = current_time(inode);
> -
> -	ts = inode_get_mtime(inode);
> -	if (!timespec64_equal(&ts, &now))
> -		need_update = true;
> -	ts = inode_get_ctime(inode);
> -	if (!timespec64_equal(&ts, &now))
> -		need_update = true;
> -	if (IS_I_VERSION(inode) && inode_iversion_need_inc(inode))
> -		need_update = true;
> -
> -	if (!need_update)
> +	if (!need_cmtime_update(inode))
>  		return 0;
>  
>  	flags &= IOCB_NOWAIT;
> -- 
> 2.47.3
> 
-- 
Jan Kara <[email protected]>
SUSE Labs, CR
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.