[pve-devel] [PATCH common 1/2] set 'snapshot-delete' lock when deleting snapshot

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Dec 21 10:54:17 CET 2016


unless we are in cleanup mode from a failed snapshot_create,
in which case the config already has a 'snapshot' lock.

this is necessary to prevent concurrent starting of or other
actions on the guest in the windows inbetween holding the
flock, e.g. when removing the volume snapshot (which can
take a bit of time).

Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
 src/PVE/AbstractConfig.pm | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/PVE/AbstractConfig.pm b/src/PVE/AbstractConfig.pm
index ac12fd1..23512d0 100644
--- a/src/PVE/AbstractConfig.pm
+++ b/src/PVE/AbstractConfig.pm
@@ -468,6 +468,9 @@ sub snapshot_delete {
     my $snap;
     my $unused = [];
 
+    $class->set_lock($vmid, 'snapshot-delete')
+	if (!$drivehash); # doesn't already have a 'snapshot' lock
+
     my $unlink_parent = sub {
 	my ($confref, $new_parent) = @_;
 
@@ -486,7 +489,6 @@ sub snapshot_delete {
 	my $conf = $class->load_config($vmid);
 
 	if (!$drivehash) {
-	    $class->check_lock($conf);
 	    die "you can't delete a snapshot if vm is a template\n"
 		if $class->is_template($conf);
 	}
@@ -512,7 +514,7 @@ sub snapshot_delete {
 	    $snap->{snapstate} = 'delete';
 	} else {
 	    delete $conf->{snapshots}->{$snapname};
-	    delete $conf->{lock} if $drivehash;
+	    delete $conf->{lock};
 	    foreach my $volid (@$unused) {
 		$class->add_unused_volume($conf, $volid);
 	    }
-- 
2.1.4





More information about the pve-devel mailing list