diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2013-07-12 06:34:42 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2013-07-12 06:34:42 -0400 |
| commit | f2006e27396f55276f24434f56e208d86e7f9908 (patch) | |
| tree | 71896db916d33888b4286f80117d3cac0da40e6d /fs/ocfs2/suballoc.c | |
| parent | e399eb56a6110e13f97e644658648602e2b08de7 (diff) | |
| parent | 9903883f1dd6e86f286b7bfa6e4b423f98c1cd9e (diff) | |
Merge branch 'linus' into timers/urgent
Get upstream changes so we can apply fixes against them
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/ocfs2/suballoc.c')
| -rw-r--r-- | fs/ocfs2/suballoc.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index b7e74b580c0f..5397c07ce608 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,51 +1437,44 @@ 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 | ||
| 1444 | status = ocfs2_journal_access_gd(handle, INODE_CACHE(alloc_inode), | 1443 | status = ocfs2_journal_access_gd(handle, INODE_CACHE(alloc_inode), |
| 1445 | prev_bg_bh, | 1444 | prev_bg_bh, |
| 1446 | OCFS2_JOURNAL_ACCESS_WRITE); | 1445 | OCFS2_JOURNAL_ACCESS_WRITE); |
| 1447 | if (status < 0) { | 1446 | if (status < 0) |
| 1448 | mlog_errno(status); | 1447 | goto out; |
| 1449 | goto out_rollback; | ||
| 1450 | } | ||
| 1451 | 1448 | ||
| 1452 | prev_bg->bg_next_group = bg->bg_next_group; | 1449 | prev_bg->bg_next_group = bg->bg_next_group; |
| 1453 | ocfs2_journal_dirty(handle, prev_bg_bh); | 1450 | ocfs2_journal_dirty(handle, prev_bg_bh); |
| 1454 | 1451 | ||
| 1455 | status = ocfs2_journal_access_gd(handle, INODE_CACHE(alloc_inode), | 1452 | status = ocfs2_journal_access_gd(handle, INODE_CACHE(alloc_inode), |
| 1456 | bg_bh, OCFS2_JOURNAL_ACCESS_WRITE); | 1453 | bg_bh, OCFS2_JOURNAL_ACCESS_WRITE); |
| 1457 | if (status < 0) { | 1454 | if (status < 0) |
| 1458 | mlog_errno(status); | 1455 | goto out_rollback_prev_bg; |
| 1459 | goto out_rollback; | ||
| 1460 | } | ||
| 1461 | 1456 | ||
| 1462 | bg->bg_next_group = fe->id2.i_chain.cl_recs[chain].c_blkno; | 1457 | bg->bg_next_group = fe->id2.i_chain.cl_recs[chain].c_blkno; |
| 1463 | ocfs2_journal_dirty(handle, bg_bh); | 1458 | ocfs2_journal_dirty(handle, bg_bh); |
| 1464 | 1459 | ||
| 1465 | status = ocfs2_journal_access_di(handle, INODE_CACHE(alloc_inode), | 1460 | status = ocfs2_journal_access_di(handle, INODE_CACHE(alloc_inode), |
| 1466 | fe_bh, OCFS2_JOURNAL_ACCESS_WRITE); | 1461 | fe_bh, OCFS2_JOURNAL_ACCESS_WRITE); |
| 1467 | if (status < 0) { | 1462 | if (status < 0) |
| 1468 | mlog_errno(status); | 1463 | goto out_rollback_bg; |
| 1469 | goto out_rollback; | ||
| 1470 | } | ||
| 1471 | 1464 | ||
| 1472 | fe->id2.i_chain.cl_recs[chain].c_blkno = bg->bg_blkno; | 1465 | fe->id2.i_chain.cl_recs[chain].c_blkno = bg->bg_blkno; |
| 1473 | ocfs2_journal_dirty(handle, fe_bh); | 1466 | ocfs2_journal_dirty(handle, fe_bh); |
| 1474 | 1467 | ||
| 1475 | out_rollback: | 1468 | out: |
| 1476 | if (status < 0) { | 1469 | if (status < 0) |
| 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 | |||
| 1482 | if (status) | ||
| 1483 | mlog_errno(status); | 1470 | mlog_errno(status); |
| 1484 | return status; | 1471 | return status; |
| 1472 | |||
| 1473 | out_rollback_bg: | ||
| 1474 | bg->bg_next_group = cpu_to_le64(bg_ptr); | ||
| 1475 | out_rollback_prev_bg: | ||
| 1476 | prev_bg->bg_next_group = cpu_to_le64(prev_bg_ptr); | ||
| 1477 | goto out; | ||
| 1485 | } | 1478 | } |
| 1486 | 1479 | ||
| 1487 | static inline int ocfs2_block_group_reasonably_empty(struct ocfs2_group_desc *bg, | 1480 | static inline int ocfs2_block_group_reasonably_empty(struct ocfs2_group_desc *bg, |
