xfs: factor out a new xfs_log_force_inode helper
Create a new helper to force the log up to the last LSN touching an inode. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
d9fdd0adf9
commit
54fbdd1035
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -3945,3 +3945,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);
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
Loading…
Reference in New Issue