Skip to content

Commit

Permalink
ocfs2: Make transaction extend more efficient.
Browse files Browse the repository at this point in the history
In ocfs2_extend_rotate_transaction, op_credits is the orignal
credits in the handle and we only want to extend the credits
for the rotation, but the old solution always double it. It
is harmless for some minor operations, but for actions like
reflink we may rotate tree many times and cause the credits
increase dramatically. So this patch try to only increase
the desired credits.

Signed-off-by: Tao Ma <tao.ma@oracle.com>
  • Loading branch information
Tao Ma authored and Joel Becker committed Sep 23, 2009
1 parent 7540c1a commit c18b812
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions fs/ocfs2/alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2326,10 +2326,18 @@ static int ocfs2_extend_rotate_transaction(handle_t *handle, int subtree_depth,
int op_credits,
struct ocfs2_path *path)
{
int ret;
int credits = (path->p_tree_depth - subtree_depth) * 2 + 1 + op_credits;

if (handle->h_buffer_credits < credits)
return ocfs2_extend_trans(handle, credits);
if (handle->h_buffer_credits < credits) {
ret = ocfs2_extend_trans(handle,
credits - handle->h_buffer_credits);
if (ret)
return ret;

if (unlikely(handle->h_buffer_credits < credits))
return ocfs2_extend_trans(handle, credits);
}

return 0;
}
Expand Down

0 comments on commit c18b812

Please sign in to comment.