diff options
| author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-25 09:52:59 +0100 | 
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-25 09:52:59 +0100 | 
| commit | d1e16c1a61d68692dba346f4a841315343b085f4 (patch) | |
| tree | 249ec07d1489769fe83b4ec507708455cc0c5138 /fs/xfs/xfs_sync.c | |
| parent | 1573ee81cb9ef24fa5acee6b7442e215e63ede2f (diff) | |
| parent | 6b16351acbd415e66ba16bf7d473ece1574cf0bc (diff) | |
| download | olio-linux-3.10-d1e16c1a61d68692dba346f4a841315343b085f4.tar.xz olio-linux-3.10-d1e16c1a61d68692dba346f4a841315343b085f4.zip  | |
Merge tag 'v3.5-rc4' into for-3.6
Linux 3.5-rc4 contains some bug fixes which overlap with new features.
Diffstat (limited to 'fs/xfs/xfs_sync.c')
| -rw-r--r-- | fs/xfs/xfs_sync.c | 30 | 
1 files changed, 15 insertions, 15 deletions
diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c index c9d3409c5ca..1e9ee064dbb 100644 --- a/fs/xfs/xfs_sync.c +++ b/fs/xfs/xfs_sync.c @@ -386,23 +386,23 @@ xfs_sync_worker(  	 * We shouldn't write/force the log if we are in the mount/unmount  	 * process or on a read only filesystem. The workqueue still needs to be  	 * active in both cases, however, because it is used for inode reclaim -	 * during these times.  Use the s_umount semaphore to provide exclusion -	 * with unmount. +	 * during these times.  Use the MS_ACTIVE flag to avoid doing anything +	 * during mount.  Doing work during unmount is avoided by calling +	 * cancel_delayed_work_sync on this work queue before tearing down +	 * the ail and the log in xfs_log_unmount.  	 */ -	if (down_read_trylock(&mp->m_super->s_umount)) { -		if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { -			/* dgc: errors ignored here */ -			if (mp->m_super->s_frozen == SB_UNFROZEN && -			    xfs_log_need_covered(mp)) -				error = xfs_fs_log_dummy(mp); -			else -				xfs_log_force(mp, 0); +	if (!(mp->m_super->s_flags & MS_ACTIVE) && +	    !(mp->m_flags & XFS_MOUNT_RDONLY)) { +		/* dgc: errors ignored here */ +		if (mp->m_super->s_frozen == SB_UNFROZEN && +		    xfs_log_need_covered(mp)) +			error = xfs_fs_log_dummy(mp); +		else +			xfs_log_force(mp, 0); -			/* start pushing all the metadata that is currently -			 * dirty */ -			xfs_ail_push_all(mp->m_ail); -		} -		up_read(&mp->m_super->s_umount); +		/* start pushing all the metadata that is currently +		 * dirty */ +		xfs_ail_push_all(mp->m_ail);  	}  	/* queue us up again */  |