From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363014; cv=none; d=zohomail.com; s=zohoarc; b=PKNkJUdbRp39bK6Pz9WBUqQWeviZu3o3zm5JB3mr+8SFwIbqPAlNYIUvLiLD7qoo9GDBh7Ko1IXMWDxZxQrD9r/ntbsnWQRFwRqK95WrPBe76xtBju1netPlmRgX5f+NyToUmS8dfW30wY8eHh112/LZbo5gx2p+QoPh+6LCKIA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363014; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=1R1nV2Btv0sXlyeI5oNTBpB1pnv0nnE+9e53vF+TzW8=; b=HsVYSD0NFgxH3GttfTYq1hqDXlMldBHEa/CFJx6Lv8wk5eVIdiFam5APlQJzHSGwfOtb1diSZyBnpUKK97cbAPf1IhUdNaCCUw9m7twXKTa+YywBiYIORdPrNCFeK+JSik1z82LaeBzlDP1QFC0hxMQAR1MCB2fSV+vGUxp9+BM= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1760363014115117.47084001013229; Mon, 13 Oct 2025 06:43:34 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 071303F293; Mon, 13 Oct 2025 09:43:32 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 266A9443CD; Mon, 13 Oct 2025 09:41:27 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 23AA643FD5; Mon, 13 Oct 2025 09:41:08 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A3CBF43FC1 for ; Mon, 13 Oct 2025 09:41:04 -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-543-DQVVZCx9OaWxJaA03_1PQg-1; Mon, 13 Oct 2025 09:41:01 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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 36CF618002CE for ; Mon, 13 Oct 2025 13:41:00 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 679FC18004D8 for ; Mon, 13 Oct 2025 13:40:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362863; 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=1R1nV2Btv0sXlyeI5oNTBpB1pnv0nnE+9e53vF+TzW8=; b=WqlyHRnJ9qGZmSDJrZtB72KMkNiDTg7GP5tFvALtWDydFpYQjBgSef9EVG3PzKo8TzdV8R bHrtapK3WkwEphp+hZ9I7qnl3h+Et2gankZYGb+tQYXiydcyKKWfqnAdBJIh5GouGD1g9A avJOmVuGsQK8AvyQ7meYVNo+22oGzBw= X-MC-Unique: DQVVZCx9OaWxJaA03_1PQg-1 X-Mimecast-MFC-AGG-ID: DQVVZCx9OaWxJaA03_1PQg_1760362860 To: devel@lists.libvirt.org Subject: [PATCH 1/7] qemu: monitor: Track inactive state of block nodes in 'qemuBlockNamedNodeData' Date: Mon, 13 Oct 2025 15:40:50 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: QTN49EPVOPk0XpIz8P7_6mb6KSVgNaM1KMKY7oZwUQw_1760362860 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AMXPYGMRQVQPDV4SO7LYLBEE5CU2T46Y X-Message-ID-Hash: AMXPYGMRQVQPDV4SO7LYLBEE5CU2T46Y X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363016131154100 Content-Type: text/plain; charset="utf-8" From: Peter Krempa New qemus report if given block node is active. We'll be using this data to decide if we need to reactivate them prior to blockjobs. Extract the data as 'inactive' as it's simpler to track and we care only about inactive nodes. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_monitor.h | 4 ++++ src/qemu/qemu_monitor_json.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 8ef85ceb0a..b257c19c89 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -751,6 +751,10 @@ struct _qemuBlockNamedNodeData { /* qcow2 data file 'raw' feature is enabled */ bool qcow2dataFileRaw; + + /* node is deactivated in qemu (reported as 'active' but may be missin= g, + * thus the flag is asserted only when we know it's inactive) */ + bool inactive; }; GHashTable * diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 9caade7bc9..d44f5d94ed 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2714,6 +2714,7 @@ qemuMonitorJSONBlockGetNamedNodeDataWorker(size_t pos= G_GNUC_UNUSED, virJSONValue *bitmaps; virJSONValue *snapshots; virJSONValue *format_specific; + bool active; const char *nodename; g_autoptr(qemuBlockNamedNodeData) ent =3D NULL; @@ -2736,6 +2737,10 @@ qemuMonitorJSONBlockGetNamedNodeDataWorker(size_t po= s G_GNUC_UNUSED, if ((bitmaps =3D virJSONValueObjectGetArray(val, "dirty-bitmaps"))) qemuMonitorJSONBlockGetNamedNodeDataBitmaps(bitmaps, ent); + /* stored as negative as the value may be missing from some qemus */ + if (virJSONValueObjectGetBoolean(val, "active", &active) =3D=3D 0) + ent->inactive =3D !active; + if ((snapshots =3D virJSONValueObjectGetArray(img, "snapshots"))) { size_t nsnapshots =3D virJSONValueArraySize(snapshots); size_t i; --=20 2.51.0 From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363263; cv=none; d=zohomail.com; s=zohoarc; b=L0j+6HpvQkXaVWQFZyTFB15LCk4T7AneeXRirBgTthqBKnNa7Kp1ppMQ+T0Q/JHws0POW/X9nCasXoI9I97G2b4VqAwyPTWifI6o2mSq9UGj10vjyqoQcYE/EAhWPLlT69wa1stltxrgGGvgzViFnOwpMK8189mZtBXsWwLXud8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363263; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=HuWO4OUNguRjdk5sxs2AE41QF8Xy2xMKeWX+tshuSHk=; b=U+svlpuGVp2BseEHuqc7b+1NezwTnu59pGs7YQfuX+z6VoLF8LXdQgAJRUkDToenk+6K5Tz3bQbyr1lnUlI4b2/rp0bOqM3rrP6VcsVjGUFOeun+Ig2iHzNZwqkuhabC9nl/vBgeHgD5ycVqoFfOMWlG1kbjMjy8o3ORC7jWRW8= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17603632637201009.9442236648262; Mon, 13 Oct 2025 06:47:43 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2244844400; Mon, 13 Oct 2025 09:47:38 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 0764944614; Mon, 13 Oct 2025 09:41:44 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 59D8A41BE7; Mon, 13 Oct 2025 09:41:10 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3B9ED43FE4 for ; Mon, 13 Oct 2025 09:41:05 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-672-7QrbkzlwPZq0O86av3barw-1; Mon, 13 Oct 2025 09:41:02 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5CA7F19560B0 for ; Mon, 13 Oct 2025 13:41:01 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9818018004D8 for ; Mon, 13 Oct 2025 13:41:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362864; 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=HuWO4OUNguRjdk5sxs2AE41QF8Xy2xMKeWX+tshuSHk=; b=NJ6h/Bfa4Jzllw8wALw2Ga7HYhwQx34oADHbMz1DDDCYHIhciB1moEQPAH8MQdVYAtURd3 a3eHSHAviXCu7Od4Dev2xDZ+4Hvj4eDzyDRfH9hTNIy2IpjPihDApBsEXcJdALUksmfLeq ZmIhNSZsp1gEv7zaDpEz3NU2AHHeTj4= X-MC-Unique: 7QrbkzlwPZq0O86av3barw-1 X-Mimecast-MFC-AGG-ID: 7QrbkzlwPZq0O86av3barw_1760362861 To: devel@lists.libvirt.org Subject: [PATCH 2/7] qemu: block: Introduce helper function to ensure that block nodes are active Date: Mon, 13 Oct 2025 15:40:51 +0200 Message-ID: <697207ca7de116f098c9a2494d2ddbd7fd03f990.1760362814.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: jxqFdmVadUKkjBgvKbowvTCQ5Dk8FdxjytS_SfYMTKg_1760362861 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZIPPE73LY3LREKH3KK4ZDEI2AFXQGRNY X-Message-ID-Hash: ZIPPE73LY3LREKH3KK4ZDEI2AFXQGRNY X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363266440158500 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Upcoming changes to snapshot code will break the assumption that block nodes are always active (if the function is able to acquire a modify job). Introduce qemuBlockNodesEnsureActive that checks if the block graph in qemu contains any inactive nodes and if yes reactivates everything. The function will be used on code paths such as blockjobs which require the nodes to be active. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_block.c | 52 +++++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_block.h | 4 ++++ 2 files changed, 56 insertions(+) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 194f8407e3..a7062d3e96 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -4023,3 +4023,55 @@ qemuBlockFinalize(virDomainObj *vm, return ret; } + + +/** + * qemuBlockNodesEnsureActive: + * @vm: domain object + * @asyncJob: asynchronous job ID + * + * Checks if any block nodes are inactive and reactivates them. This is ne= cessary + * to do before any blockjob as the block nodes could have been deactivated + * either by an aborted migration (before the VM switched to running mode)= or + * after a snapshot with 'manual' disks (which deactivates them). + * + * Block nodes need to be reactivated prior to fetching the data + * via 'qemuBlockGetNamedNodeData' as qemu doesn't guarantee that the data + * fetched while nodes are inactive is accurate. + */ +int +qemuBlockNodesEnsureActive(virDomainObj *vm, + virDomainAsyncJob asyncJob) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + GHashTableIter htitr; + g_autoptr(GHashTable) blockNamedNodeData =3D NULL; + qemuBlockNamedNodeData *node; + bool has_inactive =3D false; + int rc =3D 0; + + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_SET_ACTIVE)) + return 0; + + if (!(blockNamedNodeData =3D qemuBlockGetNamedNodeData(vm, asyncJob))) + return -1; + + g_hash_table_iter_init(&htitr, blockNamedNodeData); + while (g_hash_table_iter_next(&htitr, NULL, (void *) &node)) { + if (node->inactive) { + has_inactive =3D true; + break; + } + } + + if (!has_inactive) + return 0; + + if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) + return -1; + + rc =3D qemuMonitorBlockdevSetActive(priv->mon, NULL, true); + qemuDomainObjExitMonitor(vm); + + return rc; +} diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h index b9e950e494..ba7e9bbbda 100644 --- a/src/qemu/qemu_block.h +++ b/src/qemu/qemu_block.h @@ -376,3 +376,7 @@ int qemuBlockFinalize(virDomainObj *vm, qemuBlockJobData *job, virDomainAsyncJob asyncJob); + +int +qemuBlockNodesEnsureActive(virDomainObj *vm, + virDomainAsyncJob asyncJob); --=20 2.51.0 From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363314; cv=none; d=zohomail.com; s=zohoarc; b=ZDDzicTrUlN1YyzkjwLWVnjzkhH8CBRq6F+rRDstEkMxI43/mL1lciKqN9uFmC6SOSi2B8OtgUfSUR4eLHUtAA1oIiAhoao4fpo61GGDbPyCibiP1TQ49vG8FXFTeLnwfgsp/0yy/WyXsSGYVKM30Kn6TgI42O/iTvn3eHvhMpo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363314; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=zA0jrA8WT/2YLSvSi31JSkSQs1Os9/Gq2+nFRXptWRk=; b=PnGnigaziP+bkMDJlvz6cFaaFp9r0JKEI5vK1zEFHYUV1Zkkha3NgSButl+zXFIi9soNeMPZILxFJKQJMM1H4ataX25TYB2baV8lJfO11EXVNHDpBL5J0kXoUmqweN1rn9s8s8HEX+beBMN2XOzko3jYxWvOSA5xThtA7ITs5e0= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1760363314394462.9147341962048; Mon, 13 Oct 2025 06:48:34 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id E00CF44011; Mon, 13 Oct 2025 09:48:30 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 449D7446DA; Mon, 13 Oct 2025 09:41:51 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 196E243FC1; Mon, 13 Oct 2025 09:41:11 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 8B96643FE0 for ; Mon, 13 Oct 2025 09:41:05 -0400 (EDT) Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-315-NcyO_pggNhij1PPGlHGMgw-1; Mon, 13 Oct 2025 09:41:03 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 78235195410A for ; Mon, 13 Oct 2025 13:41:02 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C59281800578 for ; Mon, 13 Oct 2025 13:41:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362864; 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=zA0jrA8WT/2YLSvSi31JSkSQs1Os9/Gq2+nFRXptWRk=; b=Ame9pL+Lizl9ZpumA1yIEPKc4KTmlVzZYAiUPcdaNlKB35HvYPq8nJieDo1cdoWwzclNm/ xtYqGX+n0BofO7TdehnXJwzkLk14U/RwS/4rQ4KuiPuZKIP40F1ucQRCC1hBblTYe7gICJ s888MCDJDA1e/6B3dQ9MVDez9iS9lMk= X-MC-Unique: NcyO_pggNhij1PPGlHGMgw-1 X-Mimecast-MFC-AGG-ID: NcyO_pggNhij1PPGlHGMgw_1760362862 To: devel@lists.libvirt.org Subject: [PATCH 3/7] qemu: Re-activate block nodes before storage operations Date: Mon, 13 Oct 2025 15:40:52 +0200 Message-ID: <61e2fe52cc5def00b9fcc8a45e4bb9d78f5f2fa9.1760362814.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ZCyE3hlQ9vcXykXSQRr1HtSl7Ca5XstcneZKIiix-gk_1760362862 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: DB77NB6GHZYSRWGTGAOK55AFHECA6PAD X-Message-ID-Hash: DB77NB6GHZYSRWGTGAOK55AFHECA6PAD X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363314735158500 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Upcoming patches will modify how we treat inactive block nodes so that we can properly deactivate nodes for 'manual' disk snapshot mode. Re-activate the nodes before operations requiring them. This includes also query operations where we e.g. probe bitmaps. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_backup.c | 3 +++ src/qemu/qemu_checkpoint.c | 12 ++++++++++++ src/qemu/qemu_driver.c | 9 +++++++++ src/qemu/qemu_migration.c | 3 +++ src/qemu/qemu_snapshot.c | 6 ++++++ 5 files changed, 33 insertions(+) diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c index 1f43479b5e..3b4fe54854 100644 --- a/src/qemu/qemu_backup.c +++ b/src/qemu/qemu_backup.c @@ -823,6 +823,9 @@ qemuBackupBegin(virDomainObj *vm, if (qemuBackupBeginPrepareTLS(vm, cfg, def, &tlsProps, &tlsSecretProps= ) < 0) goto endjob; + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_BACKUP) < 0) + goto endjob; + actions =3D virJSONValueNewArray(); /* The 'chk' checkpoint must be rolled back if the transaction command diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c index af847cf1f2..193cf9a06a 100644 --- a/src/qemu/qemu_checkpoint.c +++ b/src/qemu/qemu_checkpoint.c @@ -189,6 +189,9 @@ qemuCheckpointDiscardBitmaps(virDomainObj *vm, actions =3D virJSONValueNewArray(); + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + return -1; + if (!(blockNamedNodeData =3D qemuBlockGetNamedNodeData(vm, VIR_ASYNC_J= OB_NONE))) return -1; @@ -411,6 +414,9 @@ qemuCheckpointRedefineValidateBitmaps(virDomainObj *vm, if (virDomainObjCheckActive(vm) < 0) return -1; + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + return -1; + if (!(blockNamedNodeData =3D qemuBlockGetNamedNodeData(vm, VIR_ASYNC_J= OB_NONE))) return -1; @@ -516,6 +522,9 @@ qemuCheckpointCreate(virQEMUDriver *driver, if (qemuCheckpointCreateCommon(driver, vm, def, &actions, &chk) < 0) return NULL; + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + return NULL; + qemuDomainObjEnterMonitor(vm); rc =3D qemuMonitorTransaction(qemuDomainGetMonitor(vm), &actions); qemuDomainObjExitMonitor(vm); @@ -651,6 +660,9 @@ qemuCheckpointGetXMLDescUpdateSize(virDomainObj *vm, if (virDomainObjCheckActive(vm) < 0) goto endjob; + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + goto endjob; + if (!(nodedataMerge =3D qemuBlockGetNamedNodeData(vm, VIR_ASYNC_JOB_NO= NE))) goto endjob; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ac72ea5cb0..3954857512 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13820,6 +13820,9 @@ qemuDomainBlockPullCommon(virDomainObj *vm, speed <<=3D 20; } + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + goto endjob; + if (!(job =3D qemuBlockJobDiskNewPull(vm, disk, baseSource, flags))) goto endjob; @@ -14390,6 +14393,9 @@ qemuDomainBlockCopyCommon(virDomainObj *vm, goto endjob; } + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + goto endjob; + /* pre-create the image file. This is required so that libvirt can pro= perly * label the image for access by qemu */ if (!existing) { @@ -14796,6 +14802,9 @@ qemuDomainBlockCommit(virDomainPtr dom, base, disk->dst, N= ULL))) goto endjob; + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_NONE) < 0) + goto endjob; + job =3D qemuBlockCommit(vm, disk, baseSource, topSource, top_parent, speed, VIR_ASYNC_JOB_NONE, VIR_TRISTATE_BOOL_YES, flags); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 7d87b3073b..a11d1d8452 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2919,6 +2919,9 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver, vm->newDef && !qemuDomainVcpuHotplugIsInOrder(vm->newDef))) cookieFlags |=3D QEMU_MIGRATION_COOKIE_CPU_HOTPLUG; + if (qemuBlockNodesEnsureActive(vm, vm->job->asyncJob) < 0) + return NULL; + return qemuMigrationSrcBeginXML(vm, xmlin, cookieout, cookieoutlen, cookieFlags, migrate_disks, flags); diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 764aafda4d..c988de37ca 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -2066,6 +2066,9 @@ qemuSnapshotCreate(virDomainObj *vm, /* actually do the snapshot */ if (virDomainObjIsActive(vm)) { + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_SNAPSHOT) < 0) + goto error; + if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY || virDomainSnapshotObjGetDef(snap)->memory =3D=3D VIR_DOMAIN_SNA= PSHOT_LOCATION_EXTERNAL) { /* external full system or disk snapshot */ @@ -4094,6 +4097,9 @@ qemuSnapshotDiscardImpl(virDomainObj *vm, return -1; } } else { + if (qemuBlockNodesEnsureActive(vm, VIR_ASYNC_JOB_SNAPSHOT) < 0) + return -1; + if (virDomainSnapshotIsExternal(snap)) { if (qemuSnapshotDiscardExternal(vm, snap, externalData) < = 0) return -1; --=20 2.51.0 From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363095; cv=none; d=zohomail.com; s=zohoarc; b=P8iNgSg1JIQ3Jm9WbE5Bj4CmU8FDjhyvoLnPNXAKBkOvN8lxUUqAyWQp5T/nhZr0FGaVgLkoCO3AQg40g6DF1poO1Ky0tSVstpNGsCkQ4sKP3KtoaecUKNxCPHp6ilB2yIs6nYqm4ofhacs0jiqVVZm6oy6hg9UWwASZlYkPTiY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363095; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=TMZfg7FJuIG1P1edQUIwmzProoILtON/iqGCQBwcbmE=; b=PSqSNBDQcYCBd1QSRVrgSq2ltZ31GVHIHU7/URU2L5Vdh7xntlPioeRmHmf70P/1wtLD+GrWnYEGwPN9MgF6/MjhsecgCZBz0z3oNgnBA8VJeDLjcnrE3A0d7BaInxbQv+MchSBdy9uUZuguu+nU3VzhuPMclPe5nfySXNXW1BU= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17603630952739.126578648896384; Mon, 13 Oct 2025 06:44:55 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id A076A3F299; Mon, 13 Oct 2025 09:44:52 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 22EAC41BE7; Mon, 13 Oct 2025 09:41:31 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id E855C43FD5; Mon, 13 Oct 2025 09:41:08 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 851A943FE7 for ; Mon, 13 Oct 2025 09:41:06 -0400 (EDT) Received: from mx-prod-mc-06.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-694-r6_dr-cvO9a9HfGQ68McNg-1; Mon, 13 Oct 2025 09:41:04 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8FBA01800293 for ; Mon, 13 Oct 2025 13:41:03 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id DE5B71800578 for ; Mon, 13 Oct 2025 13:41:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362865; 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=TMZfg7FJuIG1P1edQUIwmzProoILtON/iqGCQBwcbmE=; b=UUdJb9xKmYJOsRuk1yQ3SPGocC4lAtSt5ePHvOtWFDT5uVpQVsY33Caf6aeFQjk9ABzY9U jvAdY/O2M2W37ZSsgyWtAV2177rUKAR8kjv+d5QcwB1OwTbAmFU3UKhIfyZgK0++pDxgd2 nAEoX5Ogj0OTxsRmcEe7UY98d69BOwM= X-MC-Unique: r6_dr-cvO9a9HfGQ68McNg-1 X-Mimecast-MFC-AGG-ID: r6_dr-cvO9a9HfGQ68McNg_1760362863 To: devel@lists.libvirt.org Subject: [PATCH 4/7] qemu: migration: Don't reactivate block nodes after migration failure any more Date: Mon, 13 Oct 2025 15:40:53 +0200 Message-ID: <8ba5b5f1c8b49f7ff3ec6a8422a0859308a9b465.1760362814.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: wiYzphr-xjKPkVoWInFPURHP_ThaLMZ30AbIwwLaxAY_1760362863 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 523J74PBSPS2BRPYXVJVVS7DUHAU3N3P X-Message-ID-Hash: 523J74PBSPS2BRPYXVJVVS7DUHAU3N3P X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363097061154100 Content-Type: text/plain; charset="utf-8" From: Peter Krempa The other code paths which do want to issue block jobs can reactivate the nodes when necessary so we don't need to do that unconditionally after failed/cancelled migration. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_migration.c | 50 ++------------------------------------- 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index a11d1d8452..9109c4526d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -220,43 +220,6 @@ qemuMigrationSrcStoreDomainState(virDomainObj *vm) } -/** - * qemuMigrationBlockNodesReactivate: - * - * In case when we're keeping the VM paused qemu will not re-activate the = block - * device backend tree so blockjobs would fail. In case when qemu supports= the - * 'blockdev-set-active' command this function will re-activate the block = nodes. - */ -static void -qemuMigrationBlockNodesReactivate(virDomainObj *vm, - virDomainAsyncJob asyncJob) -{ - virErrorPtr orig_err; - qemuDomainObjPrivate *priv =3D vm->privateData; - int rc; - - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_SET_ACTIVE)) - return; - - VIR_DEBUG("re-activating block nodes"); - - virErrorPreserveLast(&orig_err); - - if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) - goto cleanup; - - rc =3D qemuMonitorBlockdevSetActive(priv->mon, NULL, true); - - qemuDomainObjExitMonitor(vm); - - if (rc < 0) - VIR_WARN("failed to re-activate block nodes after migration of VM = '%s'", vm->def->name); - - cleanup: - virErrorRestore(&orig_err); -} - - static void qemuMigrationSrcRestoreDomainState(virQEMUDriver *driver, virDomainObj *vm) { @@ -279,11 +242,11 @@ qemuMigrationSrcRestoreDomainState(virQEMUDriver *dri= ver, virDomainObj *vm) if (preMigrationState !=3D VIR_DOMAIN_RUNNING || state !=3D VIR_DOMAIN_PAUSED) - goto reactivate; + return; if (reason =3D=3D VIR_DOMAIN_PAUSED_IOERROR) { VIR_DEBUG("Domain is paused due to I/O error, skipping resume"); - goto reactivate; + return; } VIR_DEBUG("Restoring pre-migration state due to migration error"); @@ -306,14 +269,7 @@ qemuMigrationSrcRestoreDomainState(virQEMUDriver *driv= er, virDomainObj *vm) VIR_DOMAIN_EVENT_SUS= PENDED_API_ERROR); virObjectEventStateQueue(driver->domainEventState, event); } - - goto reactivate; } - - return; - - reactivate: - qemuMigrationBlockNodesReactivate(vm, VIR_ASYNC_JOB_MIGRATION_OUT); } @@ -6891,8 +6847,6 @@ qemuMigrationDstFinishFresh(virQEMUDriver *driver, if (*inPostCopy) *doKill =3D false; - } else { - qemuMigrationBlockNodesReactivate(vm, VIR_ASYNC_JOB_MIGRATION_IN); } if (mig->jobData) { --=20 2.51.0 From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363179; cv=none; d=zohomail.com; s=zohoarc; b=kZHz2RtRalpyv05rbCrrlm8Id5/NUAEvmIKeuLaNz7dmmN2IGFWzjkSOETc5rcOjx7L/VCs+z80cazNFyeHiK3IBdcAwudigH+4X051N3te1Bl8Jimxit0Uf7eyW/z7d/aiigXj0tda8XwATq6bphXD6by7uGUM8GEbgv3dDgoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363179; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=DbPZYrUVzMFrxRqz2fbct1pF4wR2EVK5eg+SNnONzdA=; b=NdiRaK6BN/dVHbLGah+O71DrZWY8aiEtNKiZ1nt3h/UKnyxpnrMlTlXlqxKcp14Lr2kKRUyGArcyOKH2VhiiqOZC2pHa4Ykfol6uvkKTHmoUyvWgFWCcA5iiaybbzjU2hfznzUdOw/UENdmqikMxp6mZV14SfmeToe3Uip41xfA= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1760363179944988.5761784419836; Mon, 13 Oct 2025 06:46:19 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C3A3D3F299; Mon, 13 Oct 2025 09:46:18 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id DF55244435; Mon, 13 Oct 2025 09:41:36 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4442C43FC1; Mon, 13 Oct 2025 09:41:09 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 522B541BE7 for ; Mon, 13 Oct 2025 09:41:08 -0400 (EDT) Received: from mx-prod-mc-06.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-152-5oUd9B0oOHSGGIslXOzLPw-1; Mon, 13 Oct 2025 09:41:05 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id ACA011800599 for ; Mon, 13 Oct 2025 13:41:04 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 07ECE1801AD5 for ; Mon, 13 Oct 2025 13:41:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362867; 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=DbPZYrUVzMFrxRqz2fbct1pF4wR2EVK5eg+SNnONzdA=; b=GBV7Y0XDEL2u7caAgAvnO4PzPUCfO1B+h6ioPCxy86Bus9pJi4hSvPX4i42baDQ6ruNeKV 2kSEwvyHK1Mh/VQRiubFDzhHxKE/OCJFcdgPUPfdhR5mW5IcEvB5YOQJRWHy21VVCXR/q2 /4sPhhtrakIGLbkiBNuNUiXVgwWHSZM= X-MC-Unique: 5oUd9B0oOHSGGIslXOzLPw-1 X-Mimecast-MFC-AGG-ID: 5oUd9B0oOHSGGIslXOzLPw_1760362864 To: devel@lists.libvirt.org Subject: [PATCH 5/7] qemu: snapshot: Deactivate block nodes on manually snapshotted disks Date: Mon, 13 Oct 2025 15:40:54 +0200 Message-ID: <37ef44fa63b6aaf60e9aced2960ce3b742b5e10b.1760362814.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: gSld1HF73dmtf3e4xJmMr8gY8Mvu9Nj5Uf6cJgxS4_Y_1760362864 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AOMO764XGL7WNGB7NLINCHU67GUVD6US X-Message-ID-Hash: AOMO764XGL7WNGB7NLINCHU67GUVD6US X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363182074154100 Content-Type: text/plain; charset="utf-8" From: Peter Krempa If the user wants to manually preserve state of the disk we need, apart from pausing the machine to quiesce all writes, also deactivate the block nodes of the device. This ensures that qemu writes out metadata (e.g. block dirty bitmaps) which are normally stored only in memory, thus allowing a consistent snapshot including the metadata. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_snapshot.c | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index c988de37ca..5c12dca892 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -1552,6 +1552,83 @@ qemuSnapshotCreateActiveExternalDisks(virDomainObj *= vm, } +static int +qemuSnapshotCreateActiveExternalDisksManual(virDomainObj *vm, + virDomainMomentObj *snap, + virDomainAsyncJob asyncJob) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + virDomainSnapshotDef *snapdef =3D virDomainSnapshotObjGetDef(snap); + g_autoptr(GPtrArray) nodenames =3D g_ptr_array_new(); + int ret =3D 0; + size_t i; + + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_SET_ACTIVE)) + return 0; + + for (i =3D 0; i < snapdef->ndisks; i++) { + virDomainDiskDef *domdisk =3D vm->def->disks[i]; + qemuDomainDiskPrivate *domdiskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(do= mdisk); + virStorageSource *n; + + if (snapdef->disks[i].snapshot !=3D VIR_DOMAIN_SNAPSHOT_LOCATION_M= ANUAL) + continue; + + if (domdiskPriv->nodeCopyOnRead) + g_ptr_array_add(nodenames, domdiskPriv->nodeCopyOnRead); + + if (domdisk->nthrottlefilters > 0) { + size_t j; + + for (j =3D 0; j < domdisk->nthrottlefilters; j++) { + g_ptr_array_add(nodenames, (void *) qemuBlockThrottleFilte= rGetNodename(domdisk->throttlefilters[j])); + } + } + + for (n =3D domdisk->src; virStorageSourceIsBacking(n); n =3D n->ba= ckingStore) { + const char *tmp; + + if ((tmp =3D qemuBlockStorageSourceGetFormatNodename(n))) + g_ptr_array_add(nodenames, (void *) tmp); + + if ((tmp =3D qemuBlockStorageSourceGetSliceNodename(n))) + g_ptr_array_add(nodenames, (void *) tmp); + + g_ptr_array_add(nodenames, (void *) qemuBlockStorageSourceGetS= torageNodename(n)); + + if (n->dataFileStore) { + if ((tmp =3D qemuBlockStorageSourceGetFormatNodename(n->da= taFileStore))) + g_ptr_array_add(nodenames, (void *) tmp); + + if ((tmp =3D qemuBlockStorageSourceGetSliceNodename(n->dat= aFileStore))) + g_ptr_array_add(nodenames, (void *) tmp); + + g_ptr_array_add(nodenames, (void *) qemuBlockStorageSource= GetStorageNodename(n->dataFileStore)); + } + } + } + + if (nodenames->len =3D=3D 0) + return 0; + + if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) + return -1; + + for (i =3D 0; i < nodenames->len; i++) { + const char *nodename =3D g_ptr_array_index(nodenames, i); + + if (qemuMonitorBlockdevSetActive(priv->mon, nodename, false) < 0) { + ret =3D -1; + break; + } + } + + qemuDomainObjExitMonitor(vm); + + return ret; +} + + static int qemuSnapshotCreateActiveExternal(virQEMUDriver *driver, virDomainObj *vm, @@ -1627,6 +1704,10 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *driv= er, } } + if (has_manual && + qemuSnapshotCreateActiveExternalDisksManual(vm, snap, VIR_ASYNC_JO= B_SNAPSHOT) < 0) + goto cleanup; + /* We need to collect reply from 'query-named-block-nodes' prior to the * migration step as qemu deactivates bitmaps after migration so the r= esult * would be wrong */ --=20 2.51.0 From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363357; cv=none; d=zohomail.com; s=zohoarc; b=kNDMpuEjL+329lhJffriAm02ybR0C614QzNZIj3rimZmh1EvrrjljE3k/iYROVsmojMOmWtCDE9Fr/xGqoeRDr706+nxdX/ZXvbQPuMCkQaHaORsTeSE4gFwBNIkBN5ubclYy2cVLeouZYFWEC+xGAoHVYnQSXKarQJtc/CZuqQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363357; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=HIy2nOmfThYxjTyjDx3BLGXldXXyfx+im4rmLYlYluQ=; b=Qwbb2D5kN5qwJ1wFfrW+b8qLJh9IWwcjPoYIeysInm5b6TF0r5nX3VTLSDpYkh3qJfwTXEGfRVxEeZAeZodwO5dd2zi0dADMVzNwyQdx4q+yzsNdfhYuYy6e4qwDXTLte9Xb9Ks9kgmy4fvmKSGlQ42tY58grPErAzUc/LZ9Sns= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1760363357313980.2432570804766; Mon, 13 Oct 2025 06:49:17 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3B46144240; Mon, 13 Oct 2025 09:49:16 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 1F69A441B5; Mon, 13 Oct 2025 09:41:59 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 1615A44294; Mon, 13 Oct 2025 09:41:32 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E9FF0440BA for ; Mon, 13 Oct 2025 09:41:13 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-597-XOQ3CrPLOlKXQlpTGJWgzQ-1; Mon, 13 Oct 2025 09:41:06 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id CCA501955E9A for ; Mon, 13 Oct 2025 13:41:05 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 21CB51800283 for ; Mon, 13 Oct 2025 13:41:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362873; 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=HIy2nOmfThYxjTyjDx3BLGXldXXyfx+im4rmLYlYluQ=; b=XuhWJEDjY+WeVbvjr1wGJnmogusSMssnnZn3bdPpdJriP+JM2wAWU6+lrDAzVPSQMK3WkR Xte4h7dVX7iuNJYA8m80Zopg9RQcy/1B43fqys39LfpRATZInEnv3bUTjsOUwSqC0D2fp6 Sc1ZVeEKkhcBLfowLm64Wz9t22nppB8= X-MC-Unique: XOQ3CrPLOlKXQlpTGJWgzQ-1 X-Mimecast-MFC-AGG-ID: XOQ3CrPLOlKXQlpTGJWgzQ_1760362865 To: devel@lists.libvirt.org Subject: [PATCH 6/7] qemu: snapshot: Allow snapshot consisting only of 'manual'-y handled disks Date: Mon, 13 Oct 2025 15:40:55 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: HBAeJiS8D98NhglGw_tyGx1dRN7rLJQtrlX2Y_bBiDc_1760362865 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: KLNCEGDRUUBGLQX6VYVYDU4DQ52KLGTO X-Message-ID-Hash: KLNCEGDRUUBGLQX6VYVYDU4DQ52KLGTO X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363360061154100 Content-Type: text/plain; charset="utf-8" From: Peter Krempa The 'manual' snapshot mode is meant for disks where the users wants to take a snapshot via means outside of libvirt, e.g. on a SAN network. Allow creating a snapshot which consists entirely of 'manual' disks. For now this effectively means that the VM will be paused but in the future more logic can be added to ensure consistency. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_snapshot.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 5c12dca892..d4994dd54e 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -996,7 +996,7 @@ qemuSnapshotPrepare(virDomainObj *vm, } } - if (!found_internal && !external && + if (!found_internal && !external && !*has_manual && def->memory =3D=3D VIR_DOMAIN_SNAPSHOT_LOCATION_NO) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("nothing selected for snapshot")); @@ -1013,7 +1013,7 @@ qemuSnapshotPrepare(virDomainObj *vm, } /* disk snapshot requires at least one disk */ - if (def->state =3D=3D VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT && !external) { + if (def->state =3D=3D VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT && !external &= & !*has_manual) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("disk-only snapshots require at least one disk to= be selected for snapshot")); return -1; --=20 2.51.0 From nobody Tue Oct 28 08:17:43 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760363400; cv=none; d=zohomail.com; s=zohoarc; b=jdaWv6RVhEhnv5Ygd2Tae/Y8on/qNpvcaplLhSTBWSqFLQpDI7lUOcXIEZR1VzOrRjNeoCJfX/XIc7w1n3lExJxdvHVq61/uMdsiUCnGafOsIPqMytP/gOmwsMpUwVpli+nlQA/TrDrTyLHEMqjo5TnoU9/pnYmS0fr9W9sIyfw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760363400; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=RfftW4EIIyU1QRQmU3CPDT1abSQS7P1hfTHlu9fAFj4=; b=lyLmaYybIUkDHWIzXD9S7yQCSdw6+3NKe+uwxaLXMjZpc6sqwsAoW89dsvWOi1a5/cBsX6SsHu988KBKzNnZILK/l0vqo+FWyVAU9NYBUTv0h8OtwtTHcP0TAY6nzrmd3M0g0OgdJbg6UqRewxL+EfhNDITYu5eJfP0xZvnu8Y8= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1760363400442306.3418479313041; Mon, 13 Oct 2025 06:50:00 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3800444068; Mon, 13 Oct 2025 09:49:59 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 5C62F443B3; Mon, 13 Oct 2025 09:43:17 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id ACE0644435; Mon, 13 Oct 2025 09:41:36 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A4E0D4429D for ; Mon, 13 Oct 2025 09:41:15 -0400 (EDT) Received: from mx-prod-mc-06.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-601-fskP0DdJOoO4AL1YmeL8Iw-1; Mon, 13 Oct 2025 09:41:08 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E871718002A9 for ; Mon, 13 Oct 2025 13:41:06 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.15]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3FE5518004D8 for ; Mon, 13 Oct 2025 13:41:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760362874; 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=RfftW4EIIyU1QRQmU3CPDT1abSQS7P1hfTHlu9fAFj4=; b=Q2ZiCeueKusHUdUVaB/P+ET3bXs/iEI6c9Piaas3h8bqVIdRMWufafP9aMFnydljg/+Hfr 5Vl6C7ia28tpDJKQ75Bu/IXceKDmWIyDtTPTFrZOcQcv4aHFJUOw1R/3fu18wAHMex7qMU aESnRbF0K910IDPa8hurtwrjOQn8tUI= X-MC-Unique: fskP0DdJOoO4AL1YmeL8Iw-1 X-Mimecast-MFC-AGG-ID: fskP0DdJOoO4AL1YmeL8Iw_1760362867 To: devel@lists.libvirt.org Subject: [PATCH 7/7] docs: snapshot: Add a note that blockjobs ought to be avoided with 'manual' snapshots Date: Mon, 13 Oct 2025 15:40:56 +0200 Message-ID: <0e25d3ee7797e2802dbdfabf6fafcec20f4a8f44.1760362814.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: -tsRWsbIG9z_724t48F95e3QiCyuEu0xETMpYe51bQM_1760362867 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: N2474M7OS7O55BBB7TSGVVOJKDVNOQT3 X-Message-ID-Hash: N2474M7OS7O55BBB7TSGVVOJKDVNOQT3 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760363402524154100 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Using a blockjob will reactivate the block nodes in qemu and thus e.g. qcow2 metadata such as bitmaps may become marked as dirty. Users of 'manual' snapshots ought to avoid those. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- docs/formatsnapshot.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/formatsnapshot.rst b/docs/formatsnapshot.rst index b85194b6bb..98e3adc235 100644 --- a/docs/formatsnapshot.rst +++ b/docs/formatsnapshot.rst @@ -127,9 +127,12 @@ The top-level ``domainsnapshot`` element may contain t= he following elements: :since:`Since 8.2.0` the ``snapshot`` attribute supports the ``manua= l`` value which instructs the hypervisor to create the snapshot and keep= a - synchronized state by pausing the VM which allows to snapshot disk + synchronized state by pausing the VM (and where supported deactivati= ng + the storage backends of the hypervisor), which allows to snapshot di= sk storage from outside of the hypervisor if the storage provider suppo= rts - it. The caller is responsible for resuming a VM paused by requestin= g a + it. VM operations requiring the storage (e.g. blockjobs, migration)= should + be avoided to ensure that the storage backends can stay deactivated. + The caller is responsible for resuming a VM paused by requesting a ``manual`` snapshot. When reverting such snapshot, the expectation i= s that the storage is configured in a way where the hypervisor will see the correct image state. --=20 2.51.0