From 30664f14ff21bda93956fe6d920c6dd5909d2de1 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Mon, 8 Mar 2021 14:43:38 +0100 Subject: [PATCH] fix bootdisk_size for new bootorder config scheme Previously, we ever only had a single boot *disk*, while possibly having multiple cdroms/nics in the boot order e.g. the config: boot: dnc bootdisk: scsi0 ide0: media=cdrom,none scsi0: xxx net0: ... would return the size of scsi0 even though it would first boot from cdrom/network. When editing the bootorder with such a legacy config, we remove the 'bootdisk' property and replace the legacy notation with an explicit order, but we only search the first disk for the size now. Restore that behaviour by iterating over all disks in the boot order property string until we get one that is not a cdrom and has a size. Signed-off-by: Dominik Csapak --- PVE/QemuServer/Drive.pm | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/PVE/QemuServer/Drive.pm b/PVE/QemuServer/Drive.pm index 0d66b2ec..146a4ab1 100644 --- a/PVE/QemuServer/Drive.pm +++ b/PVE/QemuServer/Drive.pm @@ -531,20 +531,18 @@ sub bootdisk_size { my $bootdisks = get_bootdisks($conf); return if !@$bootdisks; - my $bootdisk = $bootdisks->[0]; - return if !is_valid_drivename($bootdisk); + for my $bootdisk (@$bootdisks) { + next if !is_valid_drivename($bootdisk); + next if !$conf->{$bootdisk}; + my $drive = parse_drive($bootdisk, $conf->{$bootdisk}); + next if !defined($drive); + next if drive_is_cdrom($drive); + my $volid = $drive->{file}; + next if !$volid; + return $drive->{size}; + } - return if !$conf->{$bootdisk}; - - my $drive = parse_drive($bootdisk, $conf->{$bootdisk}); - return if !defined($drive); - - return if drive_is_cdrom($drive); - - my $volid = $drive->{file}; - return if !$volid; - - return $drive->{size}; + return; } sub update_disksize {