ocfs2: Make transaction extend more efficient.
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>
This commit is contained in:
parent
7540c1a77b
commit
c18b812d12
|
@ -2326,10 +2326,18 @@ static int ocfs2_extend_rotate_transaction(handle_t *handle, int subtree_depth,
|
||||||
int op_credits,
|
int op_credits,
|
||||||
struct ocfs2_path *path)
|
struct ocfs2_path *path)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
int credits = (path->p_tree_depth - subtree_depth) * 2 + 1 + op_credits;
|
int credits = (path->p_tree_depth - subtree_depth) * 2 + 1 + op_credits;
|
||||||
|
|
||||||
if (handle->h_buffer_credits < credits)
|
if (handle->h_buffer_credits < credits) {
|
||||||
return ocfs2_extend_trans(handle, 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue