diff options
Diffstat (limited to 'fs/ext4/ialloc.c')
| -rw-r--r-- | fs/ext4/ialloc.c | 47 | 
1 files changed, 3 insertions, 44 deletions
| diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 5388207d2832..e10c12f59c58 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c @@ -63,44 +63,6 @@ void ext4_mark_bitmap_end(int start_bit, int end_bit, char *bitmap)  		memset(bitmap + (i >> 3), 0xff, (end_bit - i) >> 3);  } -/* Initializes an uninitialized inode bitmap */ -static int ext4_init_inode_bitmap(struct super_block *sb, -				       struct buffer_head *bh, -				       ext4_group_t block_group, -				       struct ext4_group_desc *gdp) -{ -	struct ext4_group_info *grp; -	struct ext4_sb_info *sbi = EXT4_SB(sb); -	J_ASSERT_BH(bh, buffer_locked(bh)); - -	/* If checksum is bad mark all blocks and inodes use to prevent -	 * allocation, essentially implementing a per-group read-only flag. */ -	if (!ext4_group_desc_csum_verify(sb, block_group, gdp)) { -		grp = ext4_get_group_info(sb, block_group); -		if (!EXT4_MB_GRP_BBITMAP_CORRUPT(grp)) -			percpu_counter_sub(&sbi->s_freeclusters_counter, -					   grp->bb_free); -		set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT, &grp->bb_state); -		if (!EXT4_MB_GRP_IBITMAP_CORRUPT(grp)) { -			int count; -			count = ext4_free_inodes_count(sb, gdp); -			percpu_counter_sub(&sbi->s_freeinodes_counter, -					   count); -		} -		set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT, &grp->bb_state); -		return -EFSBADCRC; -	} - -	memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8); -	ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb), sb->s_blocksize * 8, -			bh->b_data); -	ext4_inode_bitmap_csum_set(sb, block_group, gdp, bh, -				   EXT4_INODES_PER_GROUP(sb) / 8); -	ext4_group_desc_csum_set(sb, block_group, gdp); - -	return 0; -} -  void ext4_end_bitmap_read(struct buffer_head *bh, int uptodate)  {  	if (uptodate) { @@ -184,17 +146,14 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)  	ext4_lock_group(sb, block_group);  	if (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)) { -		err = ext4_init_inode_bitmap(sb, bh, block_group, desc); +		memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8); +		ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb), +				     sb->s_blocksize * 8, bh->b_data);  		set_bitmap_uptodate(bh);  		set_buffer_uptodate(bh);  		set_buffer_verified(bh);  		ext4_unlock_group(sb, block_group);  		unlock_buffer(bh); -		if (err) { -			ext4_error(sb, "Failed to init inode bitmap for group " -				   "%u: %d", block_group, err); -			goto out; -		}  		return bh;  	}  	ext4_unlock_group(sb, block_group); | 
