aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_fsops.h
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2010-08-24 11:46:31 +1000
committerDave Chinner <david@fromorbit.com>2010-08-24 11:46:31 +1000
commit1a387d3be2b30c90f20d49a3497a8fc0693a9d18 (patch)
tree4c8081f6620976dbfc3ecee0e26296c0890bceba /fs/xfs/xfs_fsops.h
parent2fe33661fcd79d4c53022509f7223d526b5fa233 (diff)
downloadkernel_samsung_smdk4412-1a387d3be2b30c90f20d49a3497a8fc0693a9d18.zip
kernel_samsung_smdk4412-1a387d3be2b30c90f20d49a3497a8fc0693a9d18.tar.gz
kernel_samsung_smdk4412-1a387d3be2b30c90f20d49a3497a8fc0693a9d18.tar.bz2
xfs: dummy transactions should not dirty VFS state
When we need to cover the log, we issue dummy transactions to ensure the current log tail is on disk. Unfortunately we currently use the root inode in the dummy transaction, and the act of committing the transaction dirties the inode at the VFS level. As a result, the VFS writeback of the dirty inode will prevent the filesystem from idling long enough for the log covering state machine to complete. The state machine gets stuck in a loop issuing new dummy transactions to cover the log and never makes progress. To avoid this problem, the dummy transactions should not cause externally visible state changes. To ensure this occurs, make sure that dummy transactions log an unchanging field in the superblock as it's state is never propagated outside the filesystem. This allows the log covering state machine to complete successfully and the filesystem now correctly enters a fully idle state about 90s after the last modification was made. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/xfs_fsops.h')
-rw-r--r--fs/xfs/xfs_fsops.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/xfs/xfs_fsops.h b/fs/xfs/xfs_fsops.h
index 88435e0..a786c52 100644
--- a/fs/xfs/xfs_fsops.h
+++ b/fs/xfs/xfs_fsops.h
@@ -25,6 +25,6 @@ extern int xfs_fs_counts(xfs_mount_t *mp, xfs_fsop_counts_t *cnt);
extern int xfs_reserve_blocks(xfs_mount_t *mp, __uint64_t *inval,
xfs_fsop_resblks_t *outval);
extern int xfs_fs_goingdown(xfs_mount_t *mp, __uint32_t inflags);
-extern int xfs_fs_log_dummy(xfs_mount_t *mp);
+extern int xfs_fs_log_dummy(xfs_mount_t *mp, int flags);
#endif /* __XFS_FSOPS_H__ */