diff options
author | Dave Chinner <dchinner@redhat.com> | 2012-10-08 06:56:06 -0400 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2012-10-17 13:28:47 -0400 |
commit | 34061f5c420561dd42addd252811a1fa4b0ac69b (patch) | |
tree | e0be8f994c6abd2407a1cb8c805291cea1d95712 /fs/xfs/xfs_super.c | |
parent | 5889608df35783590251cfd440fa5d48f1855179 (diff) |
xfs: xfs_sync_fsdata is redundant
Why do we need to write the superblock to disk once we've written
all the data? We don't actually - the reasons for doing this are
lost in the mists of time, and go back to the way Irix used to drive
VFS flushing.
On linux, this code is only called from two contexts: remount and
.sync_fs. In the remount case, the call is followed by a metadata
sync, which unpins and writes the superblock. In the sync_fs case,
we only need to force the log to disk to ensure that the superblock
is correctly on disk, so we don't actually need to write it. Hence
the functionality is either redundant or superfluous and thus can be
removed.
Seeing as xfs_quiesce_data is essentially now just a log force,
remove it as well and fold the code back into the two callers.
Neither of them need the log covering check, either, as that is
redundant for the remount case, and unnecessary for the .sync_fs
case.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_super.c')
-rw-r--r-- | fs/xfs/xfs_super.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 27d5a92e1210..b5e445a13f7b 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c | |||
@@ -1057,7 +1057,6 @@ xfs_fs_sync_fs( | |||
1057 | int wait) | 1057 | int wait) |
1058 | { | 1058 | { |
1059 | struct xfs_mount *mp = XFS_M(sb); | 1059 | struct xfs_mount *mp = XFS_M(sb); |
1060 | int error; | ||
1061 | 1060 | ||
1062 | /* | 1061 | /* |
1063 | * Doing anything during the async pass would be counterproductive. | 1062 | * Doing anything during the async pass would be counterproductive. |
@@ -1065,10 +1064,7 @@ xfs_fs_sync_fs( | |||
1065 | if (!wait) | 1064 | if (!wait) |
1066 | return 0; | 1065 | return 0; |
1067 | 1066 | ||
1068 | error = xfs_quiesce_data(mp); | 1067 | xfs_log_force(mp, XFS_LOG_SYNC); |
1069 | if (error) | ||
1070 | return -error; | ||
1071 | |||
1072 | if (laptop_mode) { | 1068 | if (laptop_mode) { |
1073 | /* | 1069 | /* |
1074 | * The disk must be active because we're syncing. | 1070 | * The disk must be active because we're syncing. |
@@ -1238,15 +1234,12 @@ xfs_fs_remount( | |||
1238 | /* rw -> ro */ | 1234 | /* rw -> ro */ |
1239 | if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & MS_RDONLY)) { | 1235 | if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & MS_RDONLY)) { |
1240 | /* | 1236 | /* |
1241 | * After we have synced the data but before we sync the | 1237 | * Before we sync the metadata, we need to free up the reserve |
1242 | * metadata, we need to free up the reserve block pool so that | 1238 | * block pool so that the used block count in the superblock on |
1243 | * the used block count in the superblock on disk is correct at | 1239 | * disk is correct at the end of the remount. Stash the current |
1244 | * the end of the remount. Stash the current reserve pool size | 1240 | * reserve pool size so that if we get remounted rw, we can |
1245 | * so that if we get remounted rw, we can return it to the same | 1241 | * return it to the same size. |
1246 | * size. | ||
1247 | */ | 1242 | */ |
1248 | |||
1249 | xfs_quiesce_data(mp); | ||
1250 | xfs_save_resvblks(mp); | 1243 | xfs_save_resvblks(mp); |
1251 | xfs_quiesce_attr(mp); | 1244 | xfs_quiesce_attr(mp); |
1252 | mp->m_flags |= XFS_MOUNT_RDONLY; | 1245 | mp->m_flags |= XFS_MOUNT_RDONLY; |