From: Wen Congyang Date: Tue, 19 Jan 2016 07:17:37 +0000 (+0800) Subject: remus: don't do failover if we don't have a consistent state X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~1915 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=794347f5e3b5ce5b94a886f107cb04647aaac281;p=xen.git remus: don't do failover if we don't have a consistent state We will have a consistent state when a CHECKPOINT_END record is received. After the first CHECKPOINT_END record is received, we will buffer all records until the next CHECKPOINT_END record is received. So if the checkpoint() callback returns XGR_CHECKPOINT_FAILOVER, we only can do failover if ctx->restore.buffer_all_records is true. Signed-off-by: Wen Congyang Acked-by: Ian Campbell Reviewed-by: Andrew Cooper --- diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c index 05159bb965..6ccdab9b33 100644 --- a/tools/libxc/xc_sr_restore.c +++ b/tools/libxc/xc_sr_restore.c @@ -493,7 +493,11 @@ static int handle_checkpoint(struct xc_sr_context *ctx) break; case XGR_CHECKPOINT_FAILOVER: - rc = BROKEN_CHANNEL; + if ( ctx->restore.buffer_all_records ) + rc = BROKEN_CHANNEL; + else + /* We don't have a consistent state */ + rc = -1; goto err; default: /* Other fatal error */