diff options
Diffstat (limited to 'fs/ext4/ialloc.c')
| -rw-r--r-- | fs/ext4/ialloc.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 8ca4a23129aa..c66e8f9451a2 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c @@ -94,7 +94,8 @@ static int ext4_validate_inode_bitmap(struct super_block *sb,  		goto verified;  	blk = ext4_inode_bitmap(sb, desc);  	if (!ext4_inode_bitmap_csum_verify(sb, block_group, desc, bh, -					   EXT4_INODES_PER_GROUP(sb) / 8)) { +					   EXT4_INODES_PER_GROUP(sb) / 8) || +	    ext4_simulate_fail(sb, EXT4_SIM_IBITMAP_CRC)) {  		ext4_unlock_group(sb, block_group);  		ext4_error(sb, "Corrupt inode bitmap - block_group = %u, "  			   "inode_bitmap = %llu", block_group, blk); @@ -192,8 +193,10 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)  	get_bh(bh);  	submit_bh(REQ_OP_READ, REQ_META | REQ_PRIO, bh);  	wait_on_buffer(bh); +	ext4_simulate_fail_bh(sb, bh, EXT4_SIM_IBITMAP_EIO);  	if (!buffer_uptodate(bh)) {  		put_bh(bh); +		ext4_set_errno(sb, EIO);  		ext4_error(sb, "Cannot read inode bitmap - "  			   "block_group = %u, inode_bitmap = %llu",  			   block_group, bitmap_blk); @@ -1223,6 +1226,7 @@ struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino)  	inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL);  	if (IS_ERR(inode)) {  		err = PTR_ERR(inode); +		ext4_set_errno(sb, -err);  		ext4_error(sb, "couldn't read orphan inode %lu (err %d)",  			   ino, err);  		return inode;  |