[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