From nobody Fri Dec 19 16:08:31 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1741797440558563.8267206626936; Wed, 12 Mar 2025 09:37:20 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id EB34F1C3C; Wed, 12 Mar 2025 12:37:19 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 839701C79; Wed, 12 Mar 2025 12:32:14 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id EA36F1DC9; Wed, 12 Mar 2025 12:32:09 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 9F06C1CBC for ; Wed, 12 Mar 2025 12:31:45 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-216-C_HZCaUwN0Kb4kBPcAKDhQ-1; Wed, 12 Mar 2025 12:31:43 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 01D4E180AF4E for ; Wed, 12 Mar 2025 16:31:43 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.6]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2B7AF1955BCB for ; Wed, 12 Mar 2025 16:31:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1741797105; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9SzB1SbYiH0KN+W8orU7i1hOd/woQSP4Ka/aVGhF3V4=; b=dueq1v68IRC5+UPlqlEI6E5NILT+XkAzvCkzjfkU5WaMDzFayDyPSbuYOjYNvSounUgvPD BEICHWZTt0lo2d70Jz1D6Tt6FwK3+7S2uLpczFrQHJZCJCh8A7aTo51FL/LGZaPLTiblPl F9yUC8S3wvPVO2gZDrEUJ11ljMP2RDI= X-MC-Unique: C_HZCaUwN0Kb4kBPcAKDhQ-1 X-Mimecast-MFC-AGG-ID: C_HZCaUwN0Kb4kBPcAKDhQ_1741797103 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 09/17] qemu: Always assume supprot for QEMU_CAPS_BLOCKDEV_REOPEN Date: Wed, 12 Mar 2025 17:31:19 +0100 Message-ID: <7daea98ce6cdf2c1cb78a137d275d5fb397eb8d2.1741796995.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: u4WjUiEicXNpFVKQe43fhnF3TDW5CvmsvjsBQ7aLrnI_1741797103 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: SPIVPEQUKFMOEHF5NLHR43LOP7MGSJ2U X-Message-ID-Hash: SPIVPEQUKFMOEHF5NLHR43LOP7MGSJ2U X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1741797441328019000 Content-Type: text/plain; charset="utf-8" 'blockdev-reopen' is supported since qemu-6.1, thus we can now remove the interlocks. Document the change to 'mirror' as this patch removes the last clue why we overwrite the mirror's readonly state to false unconditionally. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_blockjob.c | 11 +---------- src/qemu/qemu_checkpoint.c | 6 ++---- src/qemu/qemu_driver.c | 11 +++-------- 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 3aef1ec285..be18f7b273 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -968,10 +968,6 @@ qemuBlockJobProcessEventCompletedCommitBitmaps(virDoma= inObj *vm, g_autoptr(virJSONValue) actions =3D NULL; bool active =3D job->type =3D=3D QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT; - if (!active && - !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) - return 0; - if (!(blockNamedNodeData =3D qemuBlockGetNamedNodeData(vm, asyncJob))) return -1; @@ -1205,9 +1201,6 @@ qemuBlockJobProcessEventCompletedCopyBitmaps(virDomai= nObj *vm, g_autoptr(virJSONValue) actions =3D NULL; bool shallow =3D job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW; - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) - return 0; - if (!(blockNamedNodeData =3D qemuBlockGetNamedNodeData(vm, asyncJob))) return -1; @@ -1237,7 +1230,6 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDri= ver *driver, qemuBlockJobData *job, virDomainAsyncJob asyncJob) { - qemuDomainObjPrivate *priv =3D vm->privateData; g_autoptr(virStorageSource) src =3D NULL; VIR_DEBUG("copy job '%s' on VM '%s' pivoted", job->name, vm->def->name= ); @@ -1257,8 +1249,7 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDri= ver *driver, !virStorageSourceIsBacking(job->disk->mirror->backingStore)) job->disk->mirror->backingStore =3D g_steal_pointer(&job->disk->sr= c->backingStore); - if (job->disk->src->readonly && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) + if (job->disk->src->readonly) ignore_value(qemuBlockReopenReadOnly(vm, job->disk->mirror, asyncJ= ob)); qemuBlockJobRewriteConfigDiskSource(vm, job->disk, job->disk->mirror); diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c index ca58da8fcb..b05aaa246e 100644 --- a/src/qemu/qemu_checkpoint.c +++ b/src/qemu/qemu_checkpoint.c @@ -225,8 +225,7 @@ qemuCheckpointDiscardBitmaps(virDomainObj *vm, false, false, false) < 0) goto relabel; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN) && - qemuBlockReopenReadWrite(vm, src, VIR_ASYNC_JOB_NONE) < 0) + if (qemuBlockReopenReadWrite(vm, src, VIR_ASYNC_JOB_NONE) < 0) goto relabel; relabelimages =3D g_slist_prepend(relabelimages, src); @@ -240,8 +239,7 @@ qemuCheckpointDiscardBitmaps(virDomainObj *vm, for (next =3D relabelimages; next; next =3D next->next) { virStorageSource *src =3D next->data; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) - ignore_value(qemuBlockReopenReadOnly(vm, src, VIR_ASYNC_JOB_NO= NE)); + ignore_value(qemuBlockReopenReadOnly(vm, src, VIR_ASYNC_JOB_NONE)); ignore_value(qemuDomainStorageSourceAccessAllow(driver, vm, src, true, false, false= )); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2364b4d312..ef731cb072 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14260,14 +14260,9 @@ qemuDomainBlockCopyCommon(virDomainObj *vm, keepParentLabel) < 0) goto endjob; - if (mirror->readonly) { - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("copy of read-only disks is not supported")); - goto endjob; - } - mirror->readonly =3D false; - } + /* In case we're copying a read-only disk we need to open the mirror i= mage + * as read-write for the duration of the copy job */ + mirror->readonly =3D false; /* we must initialize XML-provided chain prior to detecting to keep se= mantics * with VM startup */ --=20 2.48.1