aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dir.c
diff options
context:
space:
mode:
authorMark Fasheh <mfasheh@suse.com>2009-02-19 16:17:05 -0500
committerMark Fasheh <mfasheh@suse.com>2009-04-03 14:39:17 -0400
commit1d46dc08d33138c29c63d717807c08ab704fc773 (patch)
tree8e4d2e1b5c49cb379c0f800e00e1cd01d33d4d0c /fs/ocfs2/dir.c
parentb80b549c3520b31d3bbc4b36e37e0a5102da0b94 (diff)
ocfs2: fix leaf start calculation in ocfs2_dx_dir_rebalance()
ocfs2_dx_dir_rebalance() is passed the block offset of a dx leaf which needs rebalancing. Since we rebalance an entire cluster at a time however, this function needs to calculate the beginning of that cluster, in blocks. The calculation was wrong, which would result in a read of non-leaf blocks. Fix the calculation by adding ocfs2_block_to_cluster_start() which is a more straight-forward way of determining this. Reported-by: Tristan Ye <tristan.ye@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/dir.c')
-rw-r--r--fs/ocfs2/dir.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 5e6aeb00cb43..e71160cda110 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -3941,8 +3941,7 @@ static int ocfs2_dx_dir_rebalance(struct ocfs2_super *osb, struct inode *dir,
3941 goto out_commit; 3941 goto out_commit;
3942 } 3942 }
3943 3943
3944 orig_leaves_start = leaf_blkno & ~(osb->s_clustersize_bits - 3944 orig_leaves_start = ocfs2_block_to_cluster_start(dir->i_sb, leaf_blkno);
3945 osb->sb->s_blocksize_bits);
3946 ret = ocfs2_read_dx_leaves(dir, orig_leaves_start, num_dx_leaves, 3945 ret = ocfs2_read_dx_leaves(dir, orig_leaves_start, num_dx_leaves,
3947 orig_dx_leaves); 3946 orig_dx_leaves);
3948 if (ret) { 3947 if (ret) {