aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2013-04-29 18:05:59 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-29 18:54:27 -0400
commit7f4804d4c8b78ca223cee50e22ddaea9903f0930 (patch)
treeb8dfc08b04c876392a5c260fa122d18ef254a6a7
parent85a258b70d4891a443583530f48ab734a31e2d8d (diff)
ocfs2: fix NULL dereference for moving extents
We can't dereference "bg" before it has been assigned. GCC should have warned about this but "bg" was initialized to NULL. I've fixed that as well. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Jie Liu <jeff.liu@oracle.com> Reviewed-by: Jie Liu <jeff.liu@oracle.com> Cc: Mark Fasheh <mfasheh@suse.com> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/ocfs2/move_extents.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/fs/ocfs2/move_extents.c b/fs/ocfs2/move_extents.c
index 8f3d3cb7fa97..f1fc172175b6 100644
--- a/fs/ocfs2/move_extents.c
+++ b/fs/ocfs2/move_extents.c
@@ -471,7 +471,7 @@ static int ocfs2_validate_and_adjust_move_goal(struct inode *inode,
471 int ret, goal_bit = 0; 471 int ret, goal_bit = 0;
472 472
473 struct buffer_head *gd_bh = NULL; 473 struct buffer_head *gd_bh = NULL;
474 struct ocfs2_group_desc *bg = NULL; 474 struct ocfs2_group_desc *bg;
475 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); 475 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
476 int c_to_b = 1 << (osb->s_clustersize_bits - 476 int c_to_b = 1 << (osb->s_clustersize_bits -
477 inode->i_sb->s_blocksize_bits); 477 inode->i_sb->s_blocksize_bits);
@@ -482,13 +482,6 @@ static int ocfs2_validate_and_adjust_move_goal(struct inode *inode,
482 range->me_goal = ocfs2_block_to_cluster_start(inode->i_sb, 482 range->me_goal = ocfs2_block_to_cluster_start(inode->i_sb,
483 range->me_goal); 483 range->me_goal);
484 /* 484 /*
485 * moving goal is not allowd to start with a group desc blok(#0 blk)
486 * let's compromise to the latter cluster.
487 */
488 if (range->me_goal == le64_to_cpu(bg->bg_blkno))
489 range->me_goal += c_to_b;
490
491 /*
492 * validate goal sits within global_bitmap, and return the victim 485 * validate goal sits within global_bitmap, and return the victim
493 * group desc 486 * group desc
494 */ 487 */
@@ -502,6 +495,13 @@ static int ocfs2_validate_and_adjust_move_goal(struct inode *inode,
502 bg = (struct ocfs2_group_desc *)gd_bh->b_data; 495 bg = (struct ocfs2_group_desc *)gd_bh->b_data;
503 496
504 /* 497 /*
498 * moving goal is not allowd to start with a group desc blok(#0 blk)
499 * let's compromise to the latter cluster.
500 */
501 if (range->me_goal == le64_to_cpu(bg->bg_blkno))
502 range->me_goal += c_to_b;
503
504 /*
505 * movement is not gonna cross two groups. 505 * movement is not gonna cross two groups.
506 */ 506 */
507 if ((le16_to_cpu(bg->bg_bits) - goal_bit) * osb->s_clustersize < 507 if ((le16_to_cpu(bg->bg_bits) - goal_bit) * osb->s_clustersize <