浏览代码

ext2: return after ext2_error in case of failures

This fixes some instances where we were continuing after calling
ext2_error.  ext2_error call panic only if errors=panic mount option is
set.  So we need to make sure we return correctly after ext2_error call.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Aneesh Kumar K.V 17 年之前
父节点
当前提交
7f0adaeced
共有 1 个文件被更改,包括 6 次插入2 次删除
  1. 6 2
      fs/ext2/balloc.c

+ 6 - 2
fs/ext2/balloc.c

@@ -474,11 +474,13 @@ do_more:
 	    in_range (block, le32_to_cpu(desc->bg_inode_table),
 	    in_range (block, le32_to_cpu(desc->bg_inode_table),
 		      sbi->s_itb_per_group) ||
 		      sbi->s_itb_per_group) ||
 	    in_range (block + count - 1, le32_to_cpu(desc->bg_inode_table),
 	    in_range (block + count - 1, le32_to_cpu(desc->bg_inode_table),
-		      sbi->s_itb_per_group))
+		      sbi->s_itb_per_group)) {
 		ext2_error (sb, "ext2_free_blocks",
 		ext2_error (sb, "ext2_free_blocks",
 			    "Freeing blocks in system zones - "
 			    "Freeing blocks in system zones - "
 			    "Block = %lu, count = %lu",
 			    "Block = %lu, count = %lu",
 			    block, count);
 			    block, count);
+		goto error_return;
+	}
 
 
 	for (i = 0, group_freed = 0; i < count; i++) {
 	for (i = 0, group_freed = 0; i < count; i++) {
 		if (!ext2_clear_bit_atomic(sb_bgl_lock(sbi, block_group),
 		if (!ext2_clear_bit_atomic(sb_bgl_lock(sbi, block_group),
@@ -1311,11 +1313,13 @@ allocated:
 	    in_range(ret_block, le32_to_cpu(gdp->bg_inode_table),
 	    in_range(ret_block, le32_to_cpu(gdp->bg_inode_table),
 		      EXT2_SB(sb)->s_itb_per_group) ||
 		      EXT2_SB(sb)->s_itb_per_group) ||
 	    in_range(ret_block + num - 1, le32_to_cpu(gdp->bg_inode_table),
 	    in_range(ret_block + num - 1, le32_to_cpu(gdp->bg_inode_table),
-		      EXT2_SB(sb)->s_itb_per_group))
+		      EXT2_SB(sb)->s_itb_per_group)) {
 		ext2_error(sb, "ext2_new_blocks",
 		ext2_error(sb, "ext2_new_blocks",
 			    "Allocating block in system zone - "
 			    "Allocating block in system zone - "
 			    "blocks from "E2FSBLK", length %lu",
 			    "blocks from "E2FSBLK", length %lu",
 			    ret_block, num);
 			    ret_block, num);
+		goto out;
+	}
 
 
 	performed_allocation = 1;
 	performed_allocation = 1;