aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/ocfs2/suballoc.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
index a8e6a95a353..8a009ee1f7f 100644
--- a/fs/ocfs2/suballoc.c
+++ b/fs/ocfs2/suballoc.c
@@ -2567,7 +2567,8 @@ out:
2567 * suballoc_bit. 2567 * suballoc_bit.
2568 */ 2568 */
2569static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno, 2569static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno,
2570 u16 *suballoc_slot, u16 *suballoc_bit) 2570 u16 *suballoc_slot, u64 *group_blkno,
2571 u16 *suballoc_bit)
2571{ 2572{
2572 int status; 2573 int status;
2573 struct buffer_head *inode_bh = NULL; 2574 struct buffer_head *inode_bh = NULL;
@@ -2604,6 +2605,8 @@ static int ocfs2_get_suballoc_slot_bit(struct ocfs2_super *osb, u64 blkno,
2604 *suballoc_slot = le16_to_cpu(inode_fe->i_suballoc_slot); 2605 *suballoc_slot = le16_to_cpu(inode_fe->i_suballoc_slot);
2605 if (suballoc_bit) 2606 if (suballoc_bit)
2606 *suballoc_bit = le16_to_cpu(inode_fe->i_suballoc_bit); 2607 *suballoc_bit = le16_to_cpu(inode_fe->i_suballoc_bit);
2608 if (group_blkno)
2609 *group_blkno = le64_to_cpu(inode_fe->i_suballoc_loc);
2607 2610
2608bail: 2611bail:
2609 brelse(inode_bh); 2612 brelse(inode_bh);
@@ -2621,7 +2624,8 @@ bail:
2621 */ 2624 */
2622static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb, 2625static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb,
2623 struct inode *suballoc, 2626 struct inode *suballoc,
2624 struct buffer_head *alloc_bh, u64 blkno, 2627 struct buffer_head *alloc_bh,
2628 u64 group_blkno, u64 blkno,
2625 u16 bit, int *res) 2629 u16 bit, int *res)
2626{ 2630{
2627 struct ocfs2_dinode *alloc_di; 2631 struct ocfs2_dinode *alloc_di;
@@ -2642,10 +2646,8 @@ static int ocfs2_test_suballoc_bit(struct ocfs2_super *osb,
2642 goto bail; 2646 goto bail;
2643 } 2647 }
2644 2648
2645 if (alloc_di->i_suballoc_loc) 2649 bg_blkno = group_blkno ? group_blkno :
2646 bg_blkno = le64_to_cpu(alloc_di->i_suballoc_loc); 2650 ocfs2_which_suballoc_group(blkno, bit);
2647 else
2648 bg_blkno = ocfs2_which_suballoc_group(blkno, bit);
2649 status = ocfs2_read_group_descriptor(suballoc, alloc_di, bg_blkno, 2651 status = ocfs2_read_group_descriptor(suballoc, alloc_di, bg_blkno,
2650 &group_bh); 2652 &group_bh);
2651 if (status < 0) { 2653 if (status < 0) {
@@ -2680,6 +2682,7 @@ bail:
2680int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res) 2682int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
2681{ 2683{
2682 int status; 2684 int status;
2685 u64 group_blkno = 0;
2683 u16 suballoc_bit = 0, suballoc_slot = 0; 2686 u16 suballoc_bit = 0, suballoc_slot = 0;
2684 struct inode *inode_alloc_inode; 2687 struct inode *inode_alloc_inode;
2685 struct buffer_head *alloc_bh = NULL; 2688 struct buffer_head *alloc_bh = NULL;
@@ -2687,7 +2690,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
2687 mlog_entry("blkno: %llu", (unsigned long long)blkno); 2690 mlog_entry("blkno: %llu", (unsigned long long)blkno);
2688 2691
2689 status = ocfs2_get_suballoc_slot_bit(osb, blkno, &suballoc_slot, 2692 status = ocfs2_get_suballoc_slot_bit(osb, blkno, &suballoc_slot,
2690 &suballoc_bit); 2693 &group_blkno, &suballoc_bit);
2691 if (status < 0) { 2694 if (status < 0) {
2692 mlog(ML_ERROR, "get alloc slot and bit failed %d\n", status); 2695 mlog(ML_ERROR, "get alloc slot and bit failed %d\n", status);
2693 goto bail; 2696 goto bail;
@@ -2715,7 +2718,7 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
2715 } 2718 }
2716 2719
2717 status = ocfs2_test_suballoc_bit(osb, inode_alloc_inode, alloc_bh, 2720 status = ocfs2_test_suballoc_bit(osb, inode_alloc_inode, alloc_bh,
2718 blkno, suballoc_bit, res); 2721 group_blkno, blkno, suballoc_bit, res);
2719 if (status < 0) 2722 if (status < 0)
2720 mlog(ML_ERROR, "test suballoc bit failed %d\n", status); 2723 mlog(ML_ERROR, "test suballoc bit failed %d\n", status);
2721 2724