xfs: dummy transactions should not dirty VFS state
authorDave Chinner <dchinner@redhat.com>
Tue, 24 Aug 2010 01:46:31 +0000 (11:46 +1000)
committerDave Chinner <david@fromorbit.com>
Tue, 24 Aug 2010 01:46:31 +0000 (11:46 +1000)
commit1a387d3be2b30c90f20d49a3497a8fc0693a9d18
tree4c8081f6620976dbfc3ecee0e26296c0890bceba
parent2fe33661fcd79d4c53022509f7223d526b5fa233
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>
fs/xfs/linux-2.6/xfs_super.c
fs/xfs/linux-2.6/xfs_sync.c
fs/xfs/xfs_fsops.c
fs/xfs/xfs_fsops.h