From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 8CAEA1FF136 for ; Mon, 09 Mar 2026 18:01:23 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EC9BC6756; Mon, 9 Mar 2026 17:59:57 +0100 (CET) From: Fiona Ebner To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server v2 09/18] blockdev: switch blockdev_replace() to use QMP peer Date: Mon, 9 Mar 2026 17:58:35 +0100 Message-ID: <20260309165913.219308-10-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260309165913.219308-1-f.ebner@proxmox.com> References: <20260309165913.219308-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1773075524982 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.004 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: HQ4J5GKTFDRE4CP75GLHN3XG76DF4VFO X-Message-ID-Hash: HQ4J5GKTFDRE4CP75GLHN3XG76DF4VFO X-MailFrom: f.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; 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: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Signed-off-by: Fiona Ebner --- src/PVE/QemuServer.pm | 2 +- src/PVE/QemuServer/VolumeChain.pm | 25 ++++++++++++------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index a27a27c2..ddeb394c 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -4427,7 +4427,7 @@ sub qemu_volume_snapshot_delete { PVE::QemuServer::VolumeChain::blockdev_replace( $storecfg, - $vmid, + vm_qmp_peer($vmid), $machine_version, $attached_deviceid, $drive, diff --git a/src/PVE/QemuServer/VolumeChain.pm b/src/PVE/QemuServer/VolumeChain.pm index 1b8d199e..01c5dd9b 100644 --- a/src/PVE/QemuServer/VolumeChain.pm +++ b/src/PVE/QemuServer/VolumeChain.pm @@ -11,7 +11,7 @@ use PVE::Storage; use PVE::QemuServer::Blockdev qw(generate_file_blockdev generate_format_blockdev); use PVE::QemuServer::BlockJob; use PVE::QemuServer::Drive; -use PVE::QemuServer::Monitor qw(mon_cmd vm_qmp_peer); +use PVE::QemuServer::Monitor qw(mon_cmd qmp_cmd vm_qmp_peer); sub blockdev_external_snapshot { my ($storecfg, $vmid, $machine_version, $deviceid, $drive, $snap, $parent_snap) = @_; @@ -26,7 +26,7 @@ sub blockdev_external_snapshot { #reopen current to snap blockdev_replace( $storecfg, - $vmid, + vm_qmp_peer($vmid), $machine_version, $deviceid, $drive, @@ -95,7 +95,7 @@ my sub blockdev_relative_backing_file { sub blockdev_replace { my ( $storecfg, - $vmid, + $qmp_peer, $machine_version, $deviceid, $drive, @@ -113,9 +113,8 @@ sub blockdev_replace { my $src_blockdev_name; if ($src_snap eq 'current') { # there might be other nodes on top like zeroinit, look up the current node below throttle - $src_blockdev_name = PVE::QemuServer::Blockdev::get_node_name_below_throttle( - vm_qmp_peer($vmid), $deviceid, 1, - ); + $src_blockdev_name = + PVE::QemuServer::Blockdev::get_node_name_below_throttle($qmp_peer, $deviceid, 1); } else { $src_name_options = { 'snapshot-name' => $src_snap }; $src_blockdev_name = @@ -148,16 +147,16 @@ sub blockdev_replace { ); $target_fmt_blockdev->{backing} = $parent_fmt_nodename; } - mon_cmd($vmid, 'blockdev-add', %$target_fmt_blockdev); + qmp_cmd($qmp_peer, 'blockdev-add', %$target_fmt_blockdev); #reopen the current throttlefilter nodename with the target fmt nodename my $throttle_blockdev = PVE::QemuServer::Blockdev::generate_throttle_blockdev( $drive, $target_fmt_blockdev->{'node-name'}, {}, ); - mon_cmd($vmid, 'blockdev-reopen', options => [$throttle_blockdev]); + qmp_cmd($qmp_peer, 'blockdev-reopen', options => [$throttle_blockdev]); } else { #intermediate snapshot - mon_cmd($vmid, 'blockdev-add', %$target_fmt_blockdev); + qmp_cmd($qmp_peer, 'blockdev-add', %$target_fmt_blockdev); #reopen the parent node with the new target fmt backing node my $parent_file_blockdev = generate_file_blockdev( @@ -173,14 +172,14 @@ sub blockdev_replace { { 'snapshot-name' => $parent_snap }, ); $parent_fmt_blockdev->{backing} = $target_fmt_blockdev->{'node-name'}; - mon_cmd($vmid, 'blockdev-reopen', options => [$parent_fmt_blockdev]); + qmp_cmd($qmp_peer, 'blockdev-reopen', options => [$parent_fmt_blockdev]); my $backing_file = blockdev_relative_backing_file($target_file_blockdev, $parent_file_blockdev); #change backing-file in qcow2 metadatas - mon_cmd( - $vmid, 'change-backing-file', + qmp_cmd( + $qmp_peer, 'change-backing-file', device => $deviceid, 'image-node-name' => $parent_fmt_blockdev->{'node-name'}, 'backing-file' => $backing_file, @@ -188,7 +187,7 @@ sub blockdev_replace { } # delete old file|fmt nodes - eval { PVE::QemuServer::Blockdev::detach(vm_qmp_peer($vmid), $src_blockdev_name); }; + eval { PVE::QemuServer::Blockdev::detach($qmp_peer, $src_blockdev_name); }; warn "detaching block node for $src_snap failed - $@" if $@; } -- 2.47.3