diff options
-rw-r--r-- | fs/ocfs2/suballoc.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index b7e74b580c0f..101d16d78162 100644 --- a/fs/ocfs2/suballoc.c +++ b/fs/ocfs2/suballoc.c | |||
@@ -1422,7 +1422,7 @@ static int ocfs2_relink_block_group(handle_t *handle, | |||
1422 | int status; | 1422 | int status; |
1423 | /* there is a really tiny chance the journal calls could fail, | 1423 | /* there is a really tiny chance the journal calls could fail, |
1424 | * but we wouldn't want inconsistent blocks in *any* case. */ | 1424 | * but we wouldn't want inconsistent blocks in *any* case. */ |
1425 | u64 fe_ptr, bg_ptr, prev_bg_ptr; | 1425 | u64 bg_ptr, prev_bg_ptr; |
1426 | struct ocfs2_dinode *fe = (struct ocfs2_dinode *) fe_bh->b_data; | 1426 | struct ocfs2_dinode *fe = (struct ocfs2_dinode *) fe_bh->b_data; |
1427 | struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data; | 1427 | struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) bg_bh->b_data; |
1428 | struct ocfs2_group_desc *prev_bg = (struct ocfs2_group_desc *) prev_bg_bh->b_data; | 1428 | struct ocfs2_group_desc *prev_bg = (struct ocfs2_group_desc *) prev_bg_bh->b_data; |
@@ -1437,7 +1437,6 @@ static int ocfs2_relink_block_group(handle_t *handle, | |||
1437 | (unsigned long long)le64_to_cpu(bg->bg_blkno), | 1437 | (unsigned long long)le64_to_cpu(bg->bg_blkno), |
1438 | (unsigned long long)le64_to_cpu(prev_bg->bg_blkno)); | 1438 | (unsigned long long)le64_to_cpu(prev_bg->bg_blkno)); |
1439 | 1439 | ||
1440 | fe_ptr = le64_to_cpu(fe->id2.i_chain.cl_recs[chain].c_blkno); | ||
1441 | bg_ptr = le64_to_cpu(bg->bg_next_group); | 1440 | bg_ptr = le64_to_cpu(bg->bg_next_group); |
1442 | prev_bg_ptr = le64_to_cpu(prev_bg->bg_next_group); | 1441 | prev_bg_ptr = le64_to_cpu(prev_bg->bg_next_group); |
1443 | 1442 | ||
@@ -1446,7 +1445,7 @@ static int ocfs2_relink_block_group(handle_t *handle, | |||
1446 | OCFS2_JOURNAL_ACCESS_WRITE); | 1445 | OCFS2_JOURNAL_ACCESS_WRITE); |
1447 | if (status < 0) { | 1446 | if (status < 0) { |
1448 | mlog_errno(status); | 1447 | mlog_errno(status); |
1449 | goto out_rollback; | 1448 | goto out; |
1450 | } | 1449 | } |
1451 | 1450 | ||
1452 | prev_bg->bg_next_group = bg->bg_next_group; | 1451 | prev_bg->bg_next_group = bg->bg_next_group; |
@@ -1456,7 +1455,7 @@ static int ocfs2_relink_block_group(handle_t *handle, | |||
1456 | bg_bh, OCFS2_JOURNAL_ACCESS_WRITE); | 1455 | bg_bh, OCFS2_JOURNAL_ACCESS_WRITE); |
1457 | if (status < 0) { | 1456 | if (status < 0) { |
1458 | mlog_errno(status); | 1457 | mlog_errno(status); |
1459 | goto out_rollback; | 1458 | goto out_rollback_prev_bg; |
1460 | } | 1459 | } |
1461 | 1460 | ||
1462 | bg->bg_next_group = fe->id2.i_chain.cl_recs[chain].c_blkno; | 1461 | bg->bg_next_group = fe->id2.i_chain.cl_recs[chain].c_blkno; |
@@ -1466,21 +1465,21 @@ static int ocfs2_relink_block_group(handle_t *handle, | |||
1466 | fe_bh, OCFS2_JOURNAL_ACCESS_WRITE); | 1465 | fe_bh, OCFS2_JOURNAL_ACCESS_WRITE); |
1467 | if (status < 0) { | 1466 | if (status < 0) { |
1468 | mlog_errno(status); | 1467 | mlog_errno(status); |
1469 | goto out_rollback; | 1468 | goto out_rollback_bg; |
1470 | } | 1469 | } |
1471 | 1470 | ||
1472 | fe->id2.i_chain.cl_recs[chain].c_blkno = bg->bg_blkno; | 1471 | fe->id2.i_chain.cl_recs[chain].c_blkno = bg->bg_blkno; |
1473 | ocfs2_journal_dirty(handle, fe_bh); | 1472 | ocfs2_journal_dirty(handle, fe_bh); |
1474 | 1473 | ||
1475 | out_rollback: | 1474 | out: |
1476 | if (status < 0) { | 1475 | return status; |
1477 | fe->id2.i_chain.cl_recs[chain].c_blkno = cpu_to_le64(fe_ptr); | ||
1478 | bg->bg_next_group = cpu_to_le64(bg_ptr); | ||
1479 | prev_bg->bg_next_group = cpu_to_le64(prev_bg_ptr); | ||
1480 | } | ||
1481 | 1476 | ||
1482 | if (status) | 1477 | out_rollback_bg: |
1483 | mlog_errno(status); | 1478 | bg->bg_next_group = cpu_to_le64(bg_ptr); |
1479 | out_rollback_prev_bg: | ||
1480 | prev_bg->bg_next_group = cpu_to_le64(prev_bg_ptr); | ||
1481 | |||
1482 | mlog_errno(status); | ||
1484 | return status; | 1483 | return status; |
1485 | } | 1484 | } |
1486 | 1485 | ||