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_trans.h"
|
||||||
#include "xfs_inode_item.h"
|
#include "xfs_inode_item.h"
|
||||||
#include "xfs_icache.h"
|
#include "xfs_icache.h"
|
||||||
#include "xfs_log.h"
|
|
||||||
#include "xfs_pnfs.h"
|
#include "xfs_pnfs.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -221,18 +220,7 @@ STATIC int
|
||||||
xfs_fs_nfs_commit_metadata(
|
xfs_fs_nfs_commit_metadata(
|
||||||
struct inode *inode)
|
struct inode *inode)
|
||||||
{
|
{
|
||||||
struct xfs_inode *ip = XFS_I(inode);
|
return xfs_log_force_inode(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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct export_operations xfs_export_operations = {
|
const struct export_operations xfs_export_operations = {
|
||||||
|
|
|
@ -80,19 +80,9 @@ xfs_dir_fsync(
|
||||||
int datasync)
|
int datasync)
|
||||||
{
|
{
|
||||||
struct xfs_inode *ip = XFS_I(file->f_mapping->host);
|
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);
|
trace_xfs_dir_fsync(ip);
|
||||||
|
return xfs_log_force_inode(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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
|
|
|
@ -3945,3 +3945,22 @@ xfs_irele(
|
||||||
trace_xfs_irele(ip, _RET_IP_);
|
trace_xfs_irele(ip, _RET_IP_);
|
||||||
iput(VFS_I(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);
|
struct xfs_inode *, int, xfs_fsize_t, int);
|
||||||
void xfs_iext_realloc(xfs_inode_t *, int, 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 *);
|
void xfs_iunpin_wait(xfs_inode_t *);
|
||||||
#define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount))
|
#define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue