Re: [PATCH 1/2] xfs: factor out a new xfs_log_force_inode helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 03, 2020 at 02:55:21PM +0200, Christoph Hellwig wrote:
> Create a new helper to force the log up to the last LSN touching an
> inode.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Looks reasonable,
Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>

--D

> ---
>  fs/xfs/xfs_export.c | 14 +-------------
>  fs/xfs/xfs_file.c   | 12 +-----------
>  fs/xfs/xfs_inode.c  | 19 +++++++++++++++++++
>  fs/xfs/xfs_inode.h  |  1 +
>  4 files changed, 22 insertions(+), 24 deletions(-)
> 
> diff --git a/fs/xfs/xfs_export.c b/fs/xfs/xfs_export.c
> index f1372f9046e3..5a4b0119143a 100644
> --- a/fs/xfs/xfs_export.c
> +++ b/fs/xfs/xfs_export.c
> @@ -15,7 +15,6 @@
>  #include "xfs_trans.h"
>  #include "xfs_inode_item.h"
>  #include "xfs_icache.h"
> -#include "xfs_log.h"
>  #include "xfs_pnfs.h"
>  
>  /*
> @@ -221,18 +220,7 @@ STATIC int
>  xfs_fs_nfs_commit_metadata(
>  	struct inode		*inode)
>  {
> -	struct xfs_inode	*ip = XFS_I(inode);
> -	struct xfs_mount	*mp = ip->i_mount;
> -	xfs_lsn_t		lsn = 0;
> -
> -	xfs_ilock(ip, XFS_ILOCK_SHARED);
> -	if (xfs_ipincount(ip))
> -		lsn = ip->i_itemp->ili_last_lsn;
> -	xfs_iunlock(ip, XFS_ILOCK_SHARED);
> -
> -	if (!lsn)
> -		return 0;
> -	return xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
> +	return xfs_log_force_inode(XFS_I(inode));
>  }
>  
>  const struct export_operations xfs_export_operations = {
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index b8a4a3f29b36..68e1cbb3cfcc 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -80,19 +80,9 @@ xfs_dir_fsync(
>  	int			datasync)
>  {
>  	struct xfs_inode	*ip = XFS_I(file->f_mapping->host);
> -	struct xfs_mount	*mp = ip->i_mount;
> -	xfs_lsn_t		lsn = 0;
>  
>  	trace_xfs_dir_fsync(ip);
> -
> -	xfs_ilock(ip, XFS_ILOCK_SHARED);
> -	if (xfs_ipincount(ip))
> -		lsn = ip->i_itemp->ili_last_lsn;
> -	xfs_iunlock(ip, XFS_ILOCK_SHARED);
> -
> -	if (!lsn)
> -		return 0;
> -	return xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
> +	return xfs_log_force_inode(ip);
>  }
>  
>  STATIC int
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index c5077e6326c7..e48fc835cb85 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -3951,3 +3951,22 @@ xfs_irele(
>  	trace_xfs_irele(ip, _RET_IP_);
>  	iput(VFS_I(ip));
>  }
> +
> +/*
> + * Ensure all commited transactions touching the inode are written to the log.
> + */
> +int
> +xfs_log_force_inode(
> +	struct xfs_inode	*ip)
> +{
> +	xfs_lsn_t		lsn = 0;
> +
> +	xfs_ilock(ip, XFS_ILOCK_SHARED);
> +	if (xfs_ipincount(ip))
> +		lsn = ip->i_itemp->ili_last_lsn;
> +	xfs_iunlock(ip, XFS_ILOCK_SHARED);
> +
> +	if (!lsn)
> +		return 0;
> +	return xfs_log_force_lsn(ip->i_mount, lsn, XFS_LOG_SYNC, NULL);
> +}
> diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
> index 492e53992fa9..c6a63f6764a6 100644
> --- a/fs/xfs/xfs_inode.h
> +++ b/fs/xfs/xfs_inode.h
> @@ -426,6 +426,7 @@ int		xfs_itruncate_extents_flags(struct xfs_trans **,
>  				struct xfs_inode *, int, xfs_fsize_t, int);
>  void		xfs_iext_realloc(xfs_inode_t *, int, int);
>  
> +int		xfs_log_force_inode(struct xfs_inode *ip);
>  void		xfs_iunpin_wait(xfs_inode_t *);
>  #define xfs_ipincount(ip)	((unsigned int) atomic_read(&ip->i_pincount))
>  
> -- 
> 2.25.1
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux