Commit 443adb5a authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

kcmp: Fix ret code comparison

In the early draft of kcmp syscall it has been returning
[-1|0|1] values but finally [0|1|2] were merged into the
kernel, but I forgot to update the criu code. The good
thing is that because we're using rbtree the kcmp results
are still sorted and tree is balanced but sometime we may
take a wrong branch generating new ID even if the object
is present in the tree which eventually may lead to dump
faulure.
Reported-by: 's avatarDeyan Doychev <deyan@1h.com>
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Acked-by: 's avatarAndrew Vagin <avagin@parallels.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 85569e8d
......@@ -149,12 +149,18 @@ static u32 kid_generate_sub(struct kid_tree *tree, struct kid_entry *e,
this->elem.idx, elem->idx);
parent = *new;
if (ret < 0)
if (ret == 1)
node = node->rb_left, new = &((*new)->rb_left);
else if (ret > 0)
else if (ret == 2)
node = node->rb_right, new = &((*new)->rb_right);
else
else if (ret == 0)
return this->subid;
else {
pr_err("kcmp failed: pid (%d %d) type %u idx (%u %u) ret %d\n",
this->elem.pid, elem->pid, tree->kcmp_type,
this->elem.idx, elem->idx, ret);
return 0;
}
}
sub = alloc_kid_entry(tree, elem);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment