From nobody Tue Feb 10 05:41:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1492006192536873.3192465683567; Wed, 12 Apr 2017 07:09:52 -0700 (PDT) Received: from localhost ([::1]:44554 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cyIxz-0005a9-2b for importer@patchew.org; Wed, 12 Apr 2017 10:09:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36594) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cyIua-0002vI-EW for qemu-devel@nongnu.org; Wed, 12 Apr 2017 10:06:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cyIuZ-00019W-9b for qemu-devel@nongnu.org; Wed, 12 Apr 2017 10:06:20 -0400 Received: from szxga03-in.huawei.com ([45.249.212.189]:3368 helo=dggrg03-dlp.huawei.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1cyIuV-000178-UP; Wed, 12 Apr 2017 10:06:16 -0400 Received: from 172.30.72.55 (EHLO DGGEML403-HUB.china.huawei.com) ([172.30.72.55]) by dggrg03-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id ALP11471; Wed, 12 Apr 2017 22:05:50 +0800 (CST) Received: from localhost (10.177.24.212) by DGGEML403-HUB.china.huawei.com (10.3.17.33) with Microsoft SMTP Server id 14.3.301.0; Wed, 12 Apr 2017 22:05:41 +0800 From: zhanghailiang To: , Date: Wed, 12 Apr 2017 22:05:19 +0800 Message-ID: <1492005921-15664-5-git-send-email-zhang.zhanghailiang@huawei.com> X-Mailer: git-send-email 2.7.2.windows.1 In-Reply-To: <1492005921-15664-1-git-send-email-zhang.zhanghailiang@huawei.com> References: <1492005921-15664-1-git-send-email-zhang.zhanghailiang@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.24.212] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020203.58EE3440.030D, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 369987425c1aff86f2669f6763cd12b9 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 45.249.212.189 Subject: [Qemu-devel] [PATCH v4 4/6] replication: fix code logic with the new shared_disk option X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, xiecl.fnst@cn.fujitsu.com, zhangchen.fnst@cn.fujitsu.com, qemu-block@nongnu.org, zhanghailiang Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some code logic only be needed in non-shared disk, here we adjust these codes to prepare for shared disk scenario. Reviewed-by: Stefan Hajnoczi Signed-off-by: zhanghailiang --- block/replication.c | 73 ++++++++++++++++++++++++++++++-------------------= ---- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/block/replication.c b/block/replication.c index b021215..3a35471 100644 --- a/block/replication.c +++ b/block/replication.c @@ -539,33 +539,40 @@ static void replication_start(ReplicationState *rs, R= eplicationMode mode, return; } =20 - /* start backup job now */ - error_setg(&s->blocker, - "Block device is in use by internal backup job"); - - top_bs =3D 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)) { - error_setg(errp, "No top_bs or it is invalid"); - reopen_backing_file(bs, false, NULL); - aio_context_release(aio_context); - return; - } - bdrv_op_block_all(top_bs, s->blocker); - bdrv_op_unblock(top_bs, BLOCK_OP_TYPE_DATAPLANE, s->blocker); - - job =3D backup_job_create(NULL, s->secondary_disk->bs, s->hidden_d= isk->bs, - 0, MIRROR_SYNC_MODE_NONE, NULL, false, + /* + * Only in the case of non-shared disk, + * the backup job is in the secondary side + */ + if (!s->is_shared_disk) { + /* start backup job now */ + error_setg(&s->blocker, + "Block device is in use by internal backup job"); + + top_bs =3D 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)) { + error_setg(errp, "No top_bs or it is invalid"); + reopen_backing_file(bs, false, NULL); + aio_context_release(aio_context); + return; + } + + bdrv_op_block_all(top_bs, s->blocker); + bdrv_op_unblock(top_bs, BLOCK_OP_TYPE_DATAPLANE, s->blocker); + job =3D backup_job_create(NULL, s->secondary_disk->bs, + s->hidden_disk->bs, 0, + MIRROR_SYNC_MODE_NONE, NULL, false, BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT, BLOCK_JOB_INTERN= AL, backup_job_completed, bs, NULL, &local_err= ); - if (local_err) { - error_propagate(errp, local_err); - backup_job_cleanup(bs); - aio_context_release(aio_context); - return; + if (local_err) { + error_propagate(errp, local_err); + backup_job_cleanup(bs); + aio_context_release(aio_context); + return; + } + block_job_start(job); } - block_job_start(job); =20 secondary_do_checkpoint(s, errp); break; @@ -595,14 +602,16 @@ static void replication_do_checkpoint(ReplicationStat= e *rs, Error **errp) case REPLICATION_MODE_PRIMARY: break; case REPLICATION_MODE_SECONDARY: - if (!s->secondary_disk->bs->job) { - error_setg(errp, "Backup job was cancelled unexpectedly"); - break; - } - backup_do_checkpoint(s->secondary_disk->bs->job, &local_err); - if (local_err) { - error_propagate(errp, local_err); - break; + if (!s->is_shared_disk) { + if (!s->secondary_disk->bs->job) { + error_setg(errp, "Backup job was cancelled unexpectedly"); + break; + } + backup_do_checkpoint(s->secondary_disk->bs->job, &local_err); + if (local_err) { + error_propagate(errp, local_err); + break; + } } secondary_do_checkpoint(s, errp); break; @@ -683,7 +692,7 @@ static void replication_stop(ReplicationState *rs, bool= failover, Error **errp) * before the BDS is closed, because we will access hidden * disk, secondary disk in backup_job_completed(). */ - if (s->secondary_disk->bs->job) { + if (!s->is_shared_disk && s->secondary_disk->bs->job) { block_job_cancel_sync(s->secondary_disk->bs->job); } =20 --=20 1.8.3.1