|
@@ -66,44 +66,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) {
|
|
@@ -187,17 +149,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);
|