[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