diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_sync.c')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_sync.c | 42 | 
1 files changed, 6 insertions, 36 deletions
| diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c index dfcbd98d159..d59c4a65d49 100644 --- a/fs/xfs/linux-2.6/xfs_sync.c +++ b/fs/xfs/linux-2.6/xfs_sync.c @@ -34,6 +34,7 @@  #include "xfs_inode_item.h"  #include "xfs_quota.h"  #include "xfs_trace.h" +#include "xfs_fsops.h"  #include <linux/kthread.h>  #include <linux/freezer.h> @@ -341,38 +342,6 @@ xfs_sync_attr(  }  STATIC int -xfs_commit_dummy_trans( -	struct xfs_mount	*mp, -	uint			flags) -{ -	struct xfs_inode	*ip = mp->m_rootip; -	struct xfs_trans	*tp; -	int			error; - -	/* -	 * Put a dummy transaction in the log to tell recovery -	 * that all others are OK. -	 */ -	tp = xfs_trans_alloc(mp, XFS_TRANS_DUMMY1); -	error = xfs_trans_reserve(tp, 0, XFS_ICHANGE_LOG_RES(mp), 0, 0, 0); -	if (error) { -		xfs_trans_cancel(tp, 0); -		return error; -	} - -	xfs_ilock(ip, XFS_ILOCK_EXCL); - -	xfs_trans_ijoin(tp, ip); -	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); -	error = xfs_trans_commit(tp, 0); -	xfs_iunlock(ip, XFS_ILOCK_EXCL); - -	/* the log force ensures this transaction is pushed to disk */ -	xfs_log_force(mp, (flags & SYNC_WAIT) ? XFS_LOG_SYNC : 0); -	return error; -} - -STATIC int  xfs_sync_fsdata(  	struct xfs_mount	*mp)  { @@ -432,7 +401,7 @@ xfs_quiesce_data(  	/* mark the log as covered if needed */  	if (xfs_log_need_covered(mp)) -		error2 = xfs_commit_dummy_trans(mp, SYNC_WAIT); +		error2 = xfs_fs_log_dummy(mp, SYNC_WAIT);  	/* flush data-only devices */  	if (mp->m_rtdev_targp) @@ -563,7 +532,7 @@ xfs_flush_inodes(  /*   * Every sync period we need to unpin all items, reclaim inodes and sync   * disk quotas.  We might need to cover the log to indicate that the - * filesystem is idle. + * filesystem is idle and not frozen.   */  STATIC void  xfs_sync_worker( @@ -577,8 +546,9 @@ xfs_sync_worker(  		xfs_reclaim_inodes(mp, 0);  		/* dgc: errors ignored here */  		error = xfs_qm_sync(mp, SYNC_TRYLOCK); -		if (xfs_log_need_covered(mp)) -			error = xfs_commit_dummy_trans(mp, 0); +		if (mp->m_super->s_frozen == SB_UNFROZEN && +		    xfs_log_need_covered(mp)) +			error = xfs_fs_log_dummy(mp, 0);  	}  	mp->m_sync_seq++;  	wake_up(&mp->m_wait_single_sync_task); | 
