From patchwork Tue Sep 10 10:14:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Straub X-Patchwork-Id: 11139159 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A832F16B1 for ; Tue, 10 Sep 2019 10:19:41 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7F1E92081B for ; Tue, 10 Sep 2019 10:19:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=web.de header.i=@web.de header.b="QrqcmwTU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F1E92081B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=web.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:37432 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i7dFM-0005Vj-Hk for patchwork-qemu-devel@patchwork.kernel.org; Tue, 10 Sep 2019 06:19:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55094) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i7dB0-0001wj-Rg for qemu-devel@nongnu.org; Tue, 10 Sep 2019 06:15:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i7dAv-0005Oh-Qk for qemu-devel@nongnu.org; Tue, 10 Sep 2019 06:15:10 -0400 Received: from mout.web.de ([212.227.17.11]:51701) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i7dAv-0005Ku-ID for qemu-devel@nongnu.org; Tue, 10 Sep 2019 06:15:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1568110479; bh=1aMK3WcfXGtXkTJdGeILldP4LKkJ6RJ1Yf8zxuMXcY0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=QrqcmwTUG4rlAj8ghY2MUPr/eOPbY8JYJxzw40NQU4wUtqjmNbJfrfItXTATkSZX5 HfVk/QJpJjTd6Ul7n9GTdEox9uzPLOjrw3ryrFFZ2D1qVP5VFsYz6bYdVrDOMvTYQK VIapRYKIBFpCPRPTCyAdJcWNazHSYqJ9K+8piDUY= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from luklap ([88.130.61.217]) by smtp.web.de (mrweb103 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MS2D8-1himnN2JHG-00TAUZ; Tue, 10 Sep 2019 12:14:39 +0200 Date: Tue, 10 Sep 2019 12:14:35 +0200 From: Lukas Straub To: qemu-devel Message-ID: <5305f30b0f798adfc3883bbcebbfc5030661dbe9.1568110100.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K1:THYE//mNaPjYgZsIjrcjlhxOyQIUjAtvpI2E2zYA5I2YQhLiaKW 0PA/LaYK7vpFITiuhegf7vn3Z8+zAz8U5iPLyGJ+I0ZrcbiiZ+ZbgeJSDBRyJJDBkWkhXKI rYHFTwx92d7TLM6L9ILzp2RPmL14W3YjLGEGQvK9jeq1u08vPoDHRg6D3qYLg9lKmzVOoxI +1A+NSUZ9E5uKqVfeWo8Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:/M2mnrYdZjw=:tHfmilzwusskYKehAav9gO LeSElDBUBK+7yBLQ4zxShvflfVUO60R5Nv4rJSvQuwtAf7zmZIXjOYC/mMp6ADhVJ/RuGWANf uPVcIgT8T/bwldqBfHec2edATAkuViUvxlM5YY52cm8r6BhOtbV6LdFGT2tLV19rEmbwtNffy 548Wx0S16jl7exuh38C7X+YfhKLUlle+bGYurkb9x54x8Kx8xftn0e/dLK4V7fu4TYPEtpExB waMm4IDnVrI20d1KyFuy1e1P9OKDiDL0GhRUZxxUVIkmsZSAvuSqg3oRbQJLEJxoX+nAEiUmi vjeLO8Xhp528HZ71NEExpF8NRriU/mZi3lFCrpmOoT7WMHcH76kbYnPaABnLD8pvfBDvxpLzH nwU1w4V7FqGh5AnTKyPnJ2nANZSWUYznMWrkDfNJzSqHkk3GA4qoDzrjbNiLXCyjTqC1AAZdV oNfFeWOw8hX8ZjRykFheWbw21ksppk0br48DRRAdin+JVYx2vR/JrJhm1wqlo44IMjjPgd3PU k52nmUlqb9887G86HKUJ//4qHV7rdv+CZMU3QeSXCcAZlnu1IWS1raZ2QPW4kvHiN0MtrogYr fgf6LAHHYHqS+nG+8j6khyKF4hwRFsEu39QaFEVCQ8OSo6tcR+B2MyBCW+9zpofchGYkSTrQh jQpj8HF9s7fEZivEyTyuNGLaKb0e22iwUiLuWTv2aEJ2jZZnkNsegx3HEeBKk/08PhviAcuil gvJc+3Y1Lih6WvbhV0+TPQ9G8opFB+hwLeseD4XxgGQIZz/sv3ismd+EeuwH0l7oLLnn9+z4q wL0tsiQSoEJnfac76PuLaPjk7M3yHN58GQlOVtnhG3gLuTegOmxJta5b8joghzAv2nNWl8y1U NbBne18/XpI8bLycEXLaN84HAxkSl+SeqPiiIK+tMaAq+FViEa9zTBqvHbv4ztu5vdwFccMO7 RgqdY4XiUwuVeCuOBGc1wcthlEewKZ0UXhuc/aQzRTlknkq+3LAx+yFT9VbjOIR/n1bAwr8aC j9RgtIuGXohV+CkdUbeL3/pSJoj+aJRocSwf6vzuxpolvbhZQE4BYuN1nB6tapZbYVygO914i M0gRXyEi5hmIG7DYTFDw94Pe/5pNzHk8CCdRqkbT14Y63xxkb7bllrV7D5EHGNzwLtqBSIIh4 Jk+NGClnk5MSz61PyMJ4ixnGEK+sj7uFnXK2xRWUntnwpFtWvF0H05nP2okfv5HMCyZmy9yQk TvEYdfog3ZN9NexQy X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.17.11 Subject: [Qemu-devel] [PATCH v4 1/4] block/replication.c: Ignore requests after failover X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, Wen Congyang , Jason Wang , mreitz@redhat.com, Zhang Chen , Xie Changlong Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" After failover the Secondary side of replication shouldn't change state, because it now functions as our primary disk. In replication_start, replication_do_checkpoint, replication_stop, ignore the request if current state is BLOCK_REPLICATION_DONE (sucessful failover) or BLOCK_REPLICATION_FAILOVER (failover in progres i.e. currently merging active and hidden images into the base image). Signed-off-by: Lukas Straub --- block/replication.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) -- 2.20.1 diff --git a/block/replication.c b/block/replication.c index 3d4dedddfc..97cc65c0cf 100644 --- a/block/replication.c +++ b/block/replication.c @@ -454,6 +454,17 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode, aio_context_acquire(aio_context); s = bs->opaque; + if (s->stage == BLOCK_REPLICATION_DONE || + s->stage == BLOCK_REPLICATION_FAILOVER) { + /* + * This case happens when a secondary is promoted to primary. + * Ignore the request because the secondary side of replication + * doesn't have to do anything anymore. + */ + aio_context_release(aio_context); + return; + } + if (s->stage != BLOCK_REPLICATION_NONE) { error_setg(errp, "Block replication is running or done"); aio_context_release(aio_context); @@ -529,8 +540,7 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode, "Block device is in use by internal backup job"); top_bs = bdrv_lookup_bs(s->top_id, s->top_id, NULL); - if (!top_bs || !bdrv_is_root_node(top_bs) || - !check_top_bs(top_bs, bs)) { + if (!top_bs || !check_top_bs(top_bs, bs)) { error_setg(errp, "No top_bs or it is invalid"); reopen_backing_file(bs, false, NULL); aio_context_release(aio_context); @@ -577,6 +587,17 @@ static void replication_do_checkpoint(ReplicationState *rs, Error **errp) aio_context_acquire(aio_context); s = bs->opaque; + if (s->stage == BLOCK_REPLICATION_DONE || + s->stage == BLOCK_REPLICATION_FAILOVER) { + /* + * This case happens when a secondary was promoted to primary. + * Ignore the request because the secondary side of replication + * doesn't have to do anything anymore. + */ + aio_context_release(aio_context); + return; + } + if (s->mode == REPLICATION_MODE_SECONDARY) { secondary_do_checkpoint(s, errp); } @@ -593,7 +614,7 @@ static void replication_get_error(ReplicationState *rs, Error **errp) aio_context_acquire(aio_context); s = bs->opaque; - if (s->stage != BLOCK_REPLICATION_RUNNING) { + if (s->stage == BLOCK_REPLICATION_NONE) { error_setg(errp, "Block replication is not running"); aio_context_release(aio_context); return; @@ -635,6 +656,17 @@ static void replication_stop(ReplicationState *rs, bool failover, Error **errp) aio_context_acquire(aio_context); s = bs->opaque; + if (s->stage == BLOCK_REPLICATION_DONE || + s->stage == BLOCK_REPLICATION_FAILOVER) { + /* + * This case happens when a secondary was promoted to primary. + * Ignore the request because the secondary side of replication + * doesn't have to do anything anymore. + */ + aio_context_release(aio_context); + return; + } + if (s->stage != BLOCK_REPLICATION_RUNNING) { error_setg(errp, "Block replication is not running"); aio_context_release(aio_context);