[CRIU] [PATCH] kcmp: Fix ret code comparison
Andrew Vagin
avagin at parallels.com
Mon Apr 21 21:43:03 PDT 2014
On Tue, Apr 22, 2014 at 12:33:53AM +0400, Cyrill Gorcunov wrote:
> 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: Deyan Doychev <deyan at 1h.com>
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
> kcmp-ids.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/kcmp-ids.c b/kcmp-ids.c
> index 3f75cff33f46..f42685e9fff0 100644
> --- a/kcmp-ids.c
> +++ b/kcmp-ids.c
> @@ -149,12 +149,14 @@ static u32 kid_generate_sub(struct kid_tree *tree, struct kid_entry *e,
> this->elem.idx, elem->idx);
>
> parent = *new;
> - if (ret < 0)
Can we print an error here?
pr_perror("Unable to compare (%d, %x) %x (%d, %x)", ....)
> + 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
> + BUG();
> }
>
> sub = alloc_kid_entry(tree, elem);
> --
> 1.8.3.1
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list