Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c18b812d authored by Tao Ma's avatar Tao Ma Committed by Joel Becker
Browse files

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: default avatarTao Ma <tao.ma@oracle.com>
parent 7540c1a7
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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)
	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;
}