|
@@ -1009,6 +1009,28 @@ xfs_fs_destroy_inode(
|
|
|
xfs_inode_set_reclaim_tag(ip);
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+xfs_fs_dirty_inode(
|
|
|
+ struct inode *inode,
|
|
|
+ int flag)
|
|
|
+{
|
|
|
+ struct xfs_inode *ip = XFS_I(inode);
|
|
|
+ struct xfs_mount *mp = ip->i_mount;
|
|
|
+ struct xfs_trans *tp;
|
|
|
+
|
|
|
+ if (!(inode->i_sb->s_flags & SB_LAZYTIME))
|
|
|
+ return;
|
|
|
+ if (flag != I_DIRTY_SYNC || !(inode->i_state & I_DIRTY_TIME))
|
|
|
+ return;
|
|
|
+
|
|
|
+ if (xfs_trans_alloc(mp, &M_RES(mp)->tr_fsyncts, 0, 0, 0, &tp))
|
|
|
+ return;
|
|
|
+ xfs_ilock(ip, XFS_ILOCK_EXCL);
|
|
|
+ xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
|
|
|
+ xfs_trans_log_inode(tp, ip, XFS_ILOG_TIMESTAMP);
|
|
|
+ xfs_trans_commit(tp);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Slab object creation initialisation for the XFS inode.
|
|
|
* This covers only the idempotent fields in the XFS inode;
|
|
@@ -1789,6 +1811,7 @@ xfs_fs_free_cached_objects(
|
|
|
static const struct super_operations xfs_super_operations = {
|
|
|
.alloc_inode = xfs_fs_alloc_inode,
|
|
|
.destroy_inode = xfs_fs_destroy_inode,
|
|
|
+ .dirty_inode = xfs_fs_dirty_inode,
|
|
|
.drop_inode = xfs_fs_drop_inode,
|
|
|
.put_super = xfs_fs_put_super,
|
|
|
.sync_fs = xfs_fs_sync_fs,
|