diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c index dd4237e5e9ecc6b80a05b7ea5bdda134fc97d346..731fbc0f1291f84bb88ffdcdc5dcfaeab890dbd0 100644 --- a/fs/ext3/balloc.c +++ b/fs/ext3/balloc.c @@ -164,10 +164,11 @@ read_block_bitmap(struct super_block *sb, unsigned int block_group) block_group, le32_to_cpu(desc->bg_block_bitmap)); return NULL; } - if (!ext3_valid_block_bitmap(sb, desc, block_group, bh)) { - brelse(bh); - return NULL; - } + ext3_valid_block_bitmap(sb, desc, block_group, bh); + /* + * file system mounted not to panic on error, continue with corrupt + * bitmap + */ return bh; } /* @@ -1641,7 +1642,11 @@ ext3_fsblk_t ext3_new_blocks(handle_t *handle, struct inode *inode, "Allocating block in system zone - " "blocks from "E3FSBLK", length %lu", ret_block, num); - goto out; + /* + * claim_block() marked the blocks we allocated as in use. So we + * may want to selectively mark some of the blocks as free. + */ + goto retry_alloc; } performed_allocation = 1;