[pve-devel] [PATCH qemu-server v3 30/51] blockdev: add helper to get node below throttle node

Fiona Ebner f.ebner at proxmox.com
Wed Jul 2 18:28:03 CEST 2025


Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---

Changes in v3:
* Adapt to latest version of QEMU patch for child node name info.

 src/PVE/QemuServer/Blockdev.pm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/PVE/QemuServer/Blockdev.pm b/src/PVE/QemuServer/Blockdev.pm
index 1f8763a9..7aacc7fc 100644
--- a/src/PVE/QemuServer/Blockdev.pm
+++ b/src/PVE/QemuServer/Blockdev.pm
@@ -139,6 +139,30 @@ sub top_node_name {
     return "drive-$drive_id";
 }
 
+sub get_node_name_below_throttle {
+    my ($vmid, $device_id, $assert_top_is_throttle) = @_;
+
+    my $block_info = get_block_info($vmid);
+    my $drive_id = $device_id =~ s/^drive-//r;
+    my $inserted = $block_info->{$drive_id}->{inserted}
+        or die "no block node inserted for drive '$drive_id'\n";
+
+    if ($inserted->{drv} ne 'throttle') {
+        die "$device_id: unexpected top node $inserted->{'node-name'} ($inserted->{drv})\n"
+            if $assert_top_is_throttle;
+        # before the switch to -blockdev, the top node was not throttle
+        return $inserted->{'node-name'};
+    }
+
+    my $children = { map { $_->{child} => $_ } $inserted->{children}->@* };
+
+    if (my $node_name = $children->{file}->{'node-name'}) {
+        return $node_name;
+    }
+
+    die "$device_id: throttle node without file child node name!\n";
+}
+
 my sub read_only_json_option {
     my ($drive, $options) = @_;
 
-- 
2.47.2





More information about the pve-devel mailing list