From 98d80cb67b96926cc0fea522c171cfe3f96b3470 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 17 Jun 2016 16:12:28 +0200 Subject: [PATCH] use foreach_drive instead of foreach_volid foreach_volid recurses over snapshots as well, resulting in lots of repeated checks (especially for VMs with lots of snapshots and disks). a potential vmstate volume must be checked explicitly, because foreach_drive does not care about those. --- PVE/QemuMigrate.pm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 5bfdc053..e7a1d8a0 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -299,9 +299,17 @@ sub sync_disks { } }; - PVE::QemuServer::foreach_volid($conf, $test_volid); + my $test_drive = sub { + my ($ds, $drive, $snapname) = @_; + + &$test_volid($drive->{file}, PVE::QemuServer::drive_is_cdrom($drive), $snapname); + }; + + PVE::QemuServer::foreach_drive($conf, $test_drive); foreach my $snapname (keys %{$conf->{snapshots}}) { - PVE::QemuServer::foreach_volid($conf->{snapshots}->{$snapname}, $test_volid, $snapname); + &$test_volid($conf->{snapshots}->{$snapname}->{'vmstate'}, 0, undef) + if defined($conf->{snapshots}->{$snapname}->{'vmstate'}); + PVE::QemuServer::foreach_drive($conf->{snapshots}->{$snapname}, $test_drive, $snapname); } if ($self->{running} && !$sharedvm) { -- 2.39.5