diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2013-04-29 18:05:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 18:54:27 -0400 |
commit | 7f4804d4c8b78ca223cee50e22ddaea9903f0930 (patch) | |
tree | b8dfc08b04c876392a5c260fa122d18ef254a6a7 /fs/ocfs2 | |
parent | 85a258b70d4891a443583530f48ab734a31e2d8d (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>
Diffstat (limited to 'fs/ocfs2')
-rw-r--r-- | fs/ocfs2/move_extents.c | 16 |
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 < |