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 53ECE1FF183 for ; Wed, 3 Dec 2025 14:30:10 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 893429D53; Wed, 3 Dec 2025 14:30:03 +0100 (CET) From: Fiona Ebner To: pve-devel@lists.proxmox.com Date: Wed, 3 Dec 2025 14:26:33 +0100 Message-ID: <20251203132949.109685-8-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251203132949.109685-1-f.ebner@proxmox.com> References: <20251203132949.109685-1-f.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1764768548721 X-SPAM-LEVEL: Spam detection results: 0 AWL -1.017 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 KAM_MAILER 2 Automated Mailer Tag Left in Email SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH qemu-server 07/18] blockdev: switch get_node_name_below_throttle() to use QMP peer X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" The get_block_info() function can only be used when the main QEMU instance is the QMP peer, because it gets the information from the front-end devices. In case of QSD, the relevant information can be obtained with the 'query-named-block-nodes' QMP command. Signed-off-by: Fiona Ebner --- src/PVE/QemuServer.pm | 8 +++++--- src/PVE/QemuServer/BlockJob.pm | 2 +- src/PVE/QemuServer/Blockdev.pm | 22 ++++++++++++++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index 177fc7b1..600072c3 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -7280,7 +7280,8 @@ sub pbs_live_restore { # removes itself once all backing images vanish with 'auto-remove=on') my $jobs = {}; for my $ds (sort keys %$restored_disks) { - my $node_name = PVE::QemuServer::Blockdev::get_node_name_below_throttle($vmid, $ds); + my $node_name = + PVE::QemuServer::Blockdev::get_node_name_below_throttle(vm_qmp_peer($vmid), $ds); my $job_id = "restore-$ds"; mon_cmd( $vmid, 'block-stream', @@ -7400,8 +7401,9 @@ sub live_import_from_files { # removes itself once all backing images vanish with 'auto-remove=on') my $jobs = {}; for my $ds (sort keys %$live_restore_backing) { - my $node_name = - PVE::QemuServer::Blockdev::get_node_name_below_throttle($vmid, "drive-$ds"); + my $node_name = PVE::QemuServer::Blockdev::get_node_name_below_throttle( + vm_qmp_peer($vmid), "drive-$ds", + ); my $job_id = "restore-$ds"; mon_cmd( $vmid, 'block-stream', diff --git a/src/PVE/QemuServer/BlockJob.pm b/src/PVE/QemuServer/BlockJob.pm index 85d86022..f54b783a 100644 --- a/src/PVE/QemuServer/BlockJob.pm +++ b/src/PVE/QemuServer/BlockJob.pm @@ -448,7 +448,7 @@ sub blockdev_mirror { # Need to replace the node below the top node. This is not necessarily a format node, for # example, it can also be a zeroinit node by a previous mirror! So query QEMU itself. my $source_node_name = - PVE::QemuServer::Blockdev::get_node_name_below_throttle($vmid, $device_id, 1); + PVE::QemuServer::Blockdev::get_node_name_below_throttle(vm_qmp_peer($vmid), $device_id, 1); # Copy original drive config (aio, cache, discard, ...): my $dest_drive = dclone($source->{drive}); diff --git a/src/PVE/QemuServer/Blockdev.pm b/src/PVE/QemuServer/Blockdev.pm index 36a0ea99..52875010 100644 --- a/src/PVE/QemuServer/Blockdev.pm +++ b/src/PVE/QemuServer/Blockdev.pm @@ -161,12 +161,22 @@ sub top_node_name { } sub get_node_name_below_throttle { - my ($vmid, $device_id, $assert_top_is_throttle) = @_; + my ($qmp_peer, $device_id, $assert_top_is_throttle) = @_; - my $block_info = get_block_info($vmid); - my $drive_id = $device_id =~ s/^drive-//r; - my $top = $block_info->{$drive_id}->{inserted} - or die "no block node inserted for drive '$drive_id'\n"; + my $top; + if ($qmp_peer->{type} eq 'qmp') { # get_block_info() only works if there are front-end devices. + my $block_info = get_block_info($qmp_peer->{id}); + my $drive_id = $device_id =~ s/^drive-//r; + $top = $block_info->{$drive_id}->{inserted} + or die "no block node inserted for drive '$drive_id'\n"; + } else { + my $named_block_node_info = qmp_cmd($qmp_peer, 'query-named-block-nodes'); + for my $info ($named_block_node_info->@*) { + next if $info->{'node-name'} ne $device_id; + $top = $info; + last; + } + } if ($top->{drv} ne 'throttle') { die "$device_id: unexpected top node $top->{'node-name'} ($top->{drv})\n" @@ -945,7 +955,7 @@ 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 = get_node_name_below_throttle($vmid, $deviceid, 1); + $src_blockdev_name = get_node_name_below_throttle(vm_qmp_peer($vmid), $deviceid, 1); } else { $src_name_options = { 'snapshot-name' => $src_snap }; $src_blockdev_name = get_node_name('fmt', $drive_id, $volid, $src_name_options); -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel