diff options
Diffstat (limited to 'fs/ext4/balloc.c')
| -rw-r--r-- | fs/ext4/balloc.c | 22 | 
1 files changed, 16 insertions, 6 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 92e68b33fff..d6babf94907 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -49,14 +49,24 @@ void ext4_get_group_no_and_offset(struct super_block *sb, ext4_fsblk_t blocknr,  } -static int ext4_block_in_group(struct super_block *sb, ext4_fsblk_t block, -			ext4_group_t block_group) +/* + * Check whether the 'block' lives within the 'block_group'. Returns 1 if so + * and 0 otherwise. + */ +static inline int ext4_block_in_group(struct super_block *sb, +				      ext4_fsblk_t block, +				      ext4_group_t block_group)  {  	ext4_group_t actual_group; -	ext4_get_group_no_and_offset(sb, block, &actual_group, NULL); -	if (actual_group == block_group) -		return 1; -	return 0; + +	if (test_opt2(sb, STD_GROUP_SIZE)) +		actual_group = +			(le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block) + +			block) >> +			(EXT4_BLOCK_SIZE_BITS(sb) + EXT4_CLUSTER_BITS(sb) + 3); +	else +		ext4_get_group_no_and_offset(sb, block, &actual_group, NULL); +	return (actual_group == block_group) ? 1 : 0;  }  /* Return the number of clusters used for file system metadata; this  |