[pve-devel] [PATCH qemu-server v2 28/49] blockdev: add helper to get node below throttle node
Fiona Ebner
f.ebner at proxmox.com
Tue Jul 1 17:40:48 CEST 2025
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
Changes in v2:
* Rely on QEMU patch that returns file child node name as part of
block info.
* Add parameter so callers that know they happen for -blockdev only
can assert that the top node is indeed a throttle node.
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 660ad471..87b46eb4 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-name'} => $_ } $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