xfs: allow lazy sb counter sync during filesystem freeze sequence
authorBrian Foster <bfoster@redhat.com>
Fri, 28 Nov 2014 03:02:59 +0000 (14:02 +1100)
committerDave Chinner <david@fromorbit.com>
Fri, 28 Nov 2014 03:02:59 +0000 (14:02 +1100)
commit91ee575f2b35d1307412f917787195c2f6a38dfb
tree48656a90f7f4cfb87f743b3228fd9537dea9db30
parent5d45ee1b41b02269ce04920a48cd2c6b2a458090
xfs: allow lazy sb counter sync during filesystem freeze sequence

The expectation since the introduction the lazy superblock counters is
that the counters are synced and superblock logged appropriately as part
of the filesystem freeze sequence. This does not occur, however, due to
the logic in xfs_fs_writable() that prevents progress when the fs is in
any state other than SB_UNFROZEN.

While this is a bug, it has not been exposed to date because the last
thing XFS does during freeze is dirty the log. The log recovery process
recalculates the counters from AGI/AGF metadata to ensure everything is
correct. Therefore should a crash occur while an fs is frozen, the
subsequent log recovery puts everything back in order. See the following
commit for reference:

92821e2b [XFS] Lazy Superblock Counters

We might not always want to rely on dirtying the log on a frozen fs.
Modify xfs_log_sbcount() to proceed when the filesystem is freezing but
not once the freeze process has completed. Modify xfs_fs_writable() to
accept the minimum freeze level for which modifications should be
blocked to support various codepaths.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_log.c
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.h