aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_super.c
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2012-10-08 06:56:06 -0400
committerBen Myers <bpm@sgi.com>2012-10-17 13:28:47 -0400
commit34061f5c420561dd42addd252811a1fa4b0ac69b (patch)
treee0be8f994c6abd2407a1cb8c805291cea1d95712 /fs/xfs/xfs_super.c
parent5889608df35783590251cfd440fa5d48f1855179 (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.c19
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;