diff options
| author | Nathan Scott <nathans@sgi.com> | 2006-02-28 12:29:51 +1100 | 
|---|---|---|
| committer | Nathan Scott <nathans@sgi.com> | 2006-02-28 12:29:51 +1100 | 
| commit | 07ff2fa8fcb3d9207f1c16e5acf9086d5731ed8b (patch) | |
| tree | 819bc2fb3e66bbaa91d6164116b96f7c1756d1f8 /fs/xfs/xfs_rtalloc.c | |
| parent | 051d3cbd96909b2fe6b5038e7bbe77f41356db05 (diff) | |
| download | olio-linux-3.10-07ff2fa8fcb3d9207f1c16e5acf9086d5731ed8b.tar.xz olio-linux-3.10-07ff2fa8fcb3d9207f1c16e5acf9086d5731ed8b.zip  | |
[XFS] Fix a realtime allocator regression introduced by an old iget race
fix.  Noticed by Roger Willcocks.
SGI-PV: 949821
SGI-Modid: xfs-linux-melb:xfs-kern:25257a
Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_rtalloc.c')
| -rw-r--r-- | fs/xfs/xfs_rtalloc.c | 29 | 
1 files changed, 14 insertions, 15 deletions
diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c index 06fc061c50f..5b413946b1c 100644 --- a/fs/xfs/xfs_rtalloc.c +++ b/fs/xfs/xfs_rtalloc.c @@ -130,7 +130,8 @@ xfs_growfs_rt_alloc(  		/*  		 * Lock the inode.  		 */ -		if ((error = xfs_trans_iget(mp, tp, ino, 0, XFS_ILOCK_EXCL, &ip))) +		if ((error = xfs_trans_iget(mp, tp, ino, 0, +						XFS_ILOCK_EXCL, &ip)))  			goto error_exit;  		XFS_BMAP_INIT(&flist, &firstblock);  		/* @@ -170,8 +171,8 @@ xfs_growfs_rt_alloc(  			/*  			 * Lock the bitmap inode.  			 */ -			if ((error = xfs_trans_iget(mp, tp, ino, 0, XFS_ILOCK_EXCL, -					&ip))) +			if ((error = xfs_trans_iget(mp, tp, ino, 0, +							XFS_ILOCK_EXCL, &ip)))  				goto error_exit;  			/*  			 * Get a buffer for the block. @@ -2023,8 +2024,8 @@ xfs_growfs_rt(  		/*  		 * Lock out other callers by grabbing the bitmap inode lock.  		 */ -		if ((error = xfs_trans_iget(mp, tp, 0, mp->m_sb.sb_rbmino, -				XFS_ILOCK_EXCL, &ip))) +		if ((error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, +						XFS_ILOCK_EXCL, &ip)))  			goto error_exit;  		ASSERT(ip == mp->m_rbmip);  		/* @@ -2037,8 +2038,8 @@ xfs_growfs_rt(  		/*  		 * Get the summary inode into the transaction.  		 */ -		if ((error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rsumino, -				0, XFS_ILOCK_EXCL, &ip))) +		if ((error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rsumino, 0, +						XFS_ILOCK_EXCL, &ip)))  			goto error_exit;  		ASSERT(ip == mp->m_rsumip);  		/* @@ -2158,10 +2159,9 @@ xfs_rtallocate_extent(  	/*  	 * Lock out other callers by grabbing the bitmap inode lock.  	 */ -	error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, XFS_ILOCK_EXCL, &ip); -	if (error) { +	if ((error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, +					XFS_ILOCK_EXCL, &ip)))  		return error; -	}  	sumbp = NULL;  	/*  	 * Allocate by size, or near another block, or exactly at some block. @@ -2221,10 +2221,9 @@ xfs_rtfree_extent(  	/*  	 * Synchronize by locking the bitmap inode.  	 */ -	error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, XFS_ILOCK_EXCL, &ip); -	if (error) { +	if ((error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, +					XFS_ILOCK_EXCL, &ip)))  		return error; -	}  #if defined(__KERNEL__) && defined(DEBUG)  	/*  	 * Check to see that this whole range is currently allocated. @@ -2365,8 +2364,8 @@ xfs_rtpick_extent(  	__uint64_t	seq;		/* sequence number of file creation */  	__uint64_t	*seqp;		/* pointer to seqno in inode */ -	error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, XFS_ILOCK_EXCL, &ip); -	if (error) +	if ((error = xfs_trans_iget(mp, tp, mp->m_sb.sb_rbmino, 0, +					XFS_ILOCK_EXCL, &ip)))  		return error;  	ASSERT(ip == mp->m_rbmip);  	seqp = (__uint64_t *)&ip->i_d.di_atime;  |