summaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dir.c
diff options
context:
space:
mode:
authorTao Ma <tao.ma@oracle.com>2010-03-22 07:20:18 +0100
committerTao Ma <tao.ma@oracle.com>2010-03-22 07:20:18 +0100
commit74380c479ad83addeff8a172ab95f59557b5b0c3 (patch)
tree49b94f3ff48cd2ca6b53977a5e3070380ccecd6b /fs/ocfs2/dir.c
parentocfs2: Add ocfs2_gd_is_discontig. (diff)
downloadlinux-74380c479ad83addeff8a172ab95f59557b5b0c3.tar.xz
linux-74380c479ad83addeff8a172ab95f59557b5b0c3.zip
ocfs2: Free block to the right block group.
In case the block we are going to free is allocated from a discontiguous block group, we have to use suballoc_loc to be the right group. Signed-off-by: Tao Ma <tao.ma@oracle.com>
Diffstat (limited to 'fs/ocfs2/dir.c')
-rw-r--r--fs/ocfs2/dir.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 341bb8f811e9..3fea52d0efd3 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -4466,7 +4466,10 @@ static int ocfs2_dx_dir_remove_index(struct inode *dir,
blk = le64_to_cpu(dx_root->dr_blkno);
bit = le16_to_cpu(dx_root->dr_suballoc_bit);
- bg_blkno = ocfs2_which_suballoc_group(blk, bit);
+ if (dx_root->dr_suballoc_loc)
+ bg_blkno = le64_to_cpu(dx_root->dr_suballoc_loc);
+ else
+ bg_blkno = ocfs2_which_suballoc_group(blk, bit);
ret = ocfs2_free_suballoc_bits(handle, dx_alloc_inode, dx_alloc_bh,
bit, bg_blkno, 1);
if (ret)