diff options
| author | Alex Elder <aelder@sgi.com> | 2010-09-03 09:02:32 -0500 | 
|---|---|---|
| committer | Alex Elder <aelder@sgi.com> | 2010-09-03 09:02:32 -0500 | 
| commit | cb7a93412ab52361bc255cbe2c767e0741c09f43 (patch) | |
| tree | 063b89ca160ac43b8df41cf6d12158c4ca7fe897 | |
| parent | 9af25465081480a75824fd7a16a37a5cfebeede9 (diff) | |
| parent | 72656c46f50b8dfe50e15793692982e636e3df20 (diff) | |
Merge branch '2.6.36-xfs-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/dgc/xfsdev
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 8 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.h | 1 | ||||
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 13 | 
3 files changed, 11 insertions, 11 deletions
| diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index ea79072f5210..d72cf2bb054a 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c @@ -440,12 +440,7 @@ _xfs_buf_find(  		ASSERT(btp == bp->b_target);  		if (bp->b_file_offset == range_base &&  		    bp->b_buffer_length == range_length) { -			/* -			 * If we look at something, bring it to the -			 * front of the list for next time. -			 */  			atomic_inc(&bp->b_hold); -			list_move(&bp->b_hash_list, &hash->bh_list);  			goto found;  		}  	} @@ -1443,8 +1438,7 @@ xfs_alloc_bufhash(  {  	unsigned int		i; -	btp->bt_hashshift = external ? 3 : 8;	/* 8 or 256 buckets */ -	btp->bt_hashmask = (1 << btp->bt_hashshift) - 1; +	btp->bt_hashshift = external ? 3 : 12;	/* 8 or 4096 buckets */  	btp->bt_hash = kmem_zalloc_large((1 << btp->bt_hashshift) *  					 sizeof(xfs_bufhash_t));  	for (i = 0; i < (1 << btp->bt_hashshift); i++) { diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h index d072e5ff923b..2a05614f0b92 100644 --- a/fs/xfs/linux-2.6/xfs_buf.h +++ b/fs/xfs/linux-2.6/xfs_buf.h @@ -137,7 +137,6 @@ typedef struct xfs_buftarg {  	size_t			bt_smask;  	/* per device buffer hash table */ -	uint			bt_hashmask;  	uint			bt_hashshift;  	xfs_bufhash_t		*bt_hash; diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 66d585c6917c..4c7c7bfb2b2f 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -2299,15 +2299,22 @@ xfs_alloc_file_space(  			e = allocatesize_fsb;  		} +		/* +		 * The transaction reservation is limited to a 32-bit block +		 * count, hence we need to limit the number of blocks we are +		 * trying to reserve to avoid an overflow. We can't allocate +		 * more than @nimaps extents, and an extent is limited on disk +		 * to MAXEXTLEN (21 bits), so use that to enforce the limit. +		 */ +		resblks = min_t(xfs_fileoff_t, (e - s), (MAXEXTLEN * nimaps));  		if (unlikely(rt)) { -			resrtextents = qblocks = (uint)(e - s); +			resrtextents = qblocks = resblks;  			resrtextents /= mp->m_sb.sb_rextsize;  			resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);  			quota_flag = XFS_QMOPT_RES_RTBLKS;  		} else {  			resrtextents = 0; -			resblks = qblocks = \ -				XFS_DIOSTRAT_SPACE_RES(mp, (uint)(e - s)); +			resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, resblks);  			quota_flag = XFS_QMOPT_RES_REGBLKS;  		} | 
