Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69961a26 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder
Browse files

xfs: cleanup ->sync_fs



Sort out ->sync_fs to not perform a superblock writeback for the wait = 0 case
as that is just an optional first pass and the superblock will be written back
properly in the next call with wait = 1.  Instead perform an opportunistic
quota writeback to have less work later.  Also remove the freeze special case
as we do a proper wait = 1 call in the freeze code anyway.

Also rename the function to xfs_fs_sync_fs to match the normal naming
convention, update comments and avoid calling into the laptop_mode logic on
an error.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAlex Elder <aelder@sgi.com>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent c90b07e8
Loading
Loading
Loading
Loading
+18 −18
Original line number Diff line number Diff line
@@ -1148,7 +1148,7 @@ xfs_fs_put_super(
}

STATIC int
xfs_fs_sync_super(
xfs_fs_sync_fs(
	struct super_block	*sb,
	int			wait)
{
@@ -1156,23 +1156,23 @@ xfs_fs_sync_super(
	int			error;

	/*
	 * Treat a sync operation like a freeze.  This is to work
	 * around a race in sync_inodes() which works in two phases
	 * - an asynchronous flush, which can write out an inode
	 * without waiting for file size updates to complete, and a
	 * synchronous flush, which wont do anything because the
	 * async flush removed the inode's dirty flag.  Also
	 * sync_inodes() will not see any files that just have
	 * outstanding transactions to be flushed because we don't
	 * dirty the Linux inode until after the transaction I/O
	 * completes.
	 * Not much we can do for the first async pass.  Writing out the
	 * superblock would be counter-productive as we are going to redirty
	 * when writing out other data and metadata (and writing out a single
	 * block is quite fast anyway).
	 *
	 * Try to asynchronously kick off quota syncing at least.
	 */
	if (wait || unlikely(sb->s_frozen == SB_FREEZE_WRITE))
	if (!wait) {
		xfs_qm_sync(mp, SYNC_TRYLOCK);
		return 0;
	}

	error = xfs_quiesce_data(mp);
	else
		error = xfs_sync_fsdata(mp, 0);
	if (error)
		return -error;

	if (unlikely(laptop_mode)) {
	if (laptop_mode) {
		int	prev_sync_seq = mp->m_sync_seq;

		/*
@@ -1191,7 +1191,7 @@ xfs_fs_sync_super(
				mp->m_sync_seq != prev_sync_seq);
	}

	return -error;
	return 0;
}

STATIC int
@@ -1565,7 +1565,7 @@ static struct super_operations xfs_super_operations = {
	.write_inode		= xfs_fs_write_inode,
	.clear_inode		= xfs_fs_clear_inode,
	.put_super		= xfs_fs_put_super,
	.sync_fs		= xfs_fs_sync_super,
	.sync_fs		= xfs_fs_sync_fs,
	.freeze_fs		= xfs_fs_freeze,
	.statfs			= xfs_fs_statfs,
	.remount_fs		= xfs_fs_remount,