all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH qemu-server 1/1] fix #8030: snapshot: avoid orphaned vmstate volume on failure
@ 2026-09-14 14:05 Michael Köppl
  0 siblings, 0 replies; only message in thread
From: Michael Köppl @ 2026-09-14 14:05 UTC (permalink / raw)
  To: pve-devel

The state volume was allocated before the running instance was queried
for its machine type, CPU argument and network MTUs. Those queries can
fail (e.g. the 'query-machines' QMP command, which can run into a
timeout while QEMU's is busy [0]).

The helper is called from __snapshot_prepare() before write_config(), so
the config never records the snapshot, snapshot_create() dies before it
gets to its cleanup path. Such a failure leaves behind the just
allocated volume.

Query the running instance first, which makes the allocation the last
step of the function that can fail.

[0] https://bugzilla.proxmox.com/show_bug.cgi?id=8030

Signed-off-by: Michael Köppl <m.koeppl@proxmox.com>
---
Tested this pretty much as described in the Bugzilla entry, but using a
Perl script to connect to the QMP socket instead of socat.

 src/PVE/QemuConfig.pm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/PVE/QemuConfig.pm b/src/PVE/QemuConfig.pm
index 26f0fda2..2ef6c075 100644
--- a/src/PVE/QemuConfig.pm
+++ b/src/PVE/QemuConfig.pm
@@ -238,8 +238,6 @@ sub __snapshot_save_vmstate {
     my $name = "vm-$vmid-state-$snapname";
     $name .= ".raw" if $scfg->{path}; # add filename extension for file base storage
 
-    my $statefile =
-        PVE::Storage::vdisk_alloc($storecfg, $target, $vmid, 'raw', $name, $size * 1024);
     my $runningmachine = PVE::QemuServer::Machine::get_current_qemu_machine($vmid);
 
     # get current QEMU -cpu argument to ensure consistency of custom CPU models
@@ -249,6 +247,11 @@ sub __snapshot_save_vmstate {
 
     my $nets_host_mtu = PVE::QemuServer::Network::get_nets_host_mtu($vmid, $conf);
 
+    # allocate only after querying the running instance, nothing below can fail, so a failed
+    # query cannot leave an orphaned state volume behind
+    my $statefile =
+        PVE::Storage::vdisk_alloc($storecfg, $target, $vmid, 'raw', $name, $size * 1024);
+
     if (!$suspend) {
         $conf = $conf->{snapshots}->{$snapname};
     }
-- 
2.47.3





^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-09-14 14:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-14 14:05 [PATCH qemu-server 1/1] fix #8030: snapshot: avoid orphaned vmstate volume on failure Michael Köppl

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal