]> git.proxmox.com Git - pve-storage.git/blobdiff - PVE/Storage/BTRFSPlugin.pm
btrfs: free image: only remove snapshots for current subvol
[pve-storage.git] / PVE / Storage / BTRFSPlugin.pm
index a1e5b98c3636c003749310ea117d4edc88acde64..1407f443f1f5e83964345b4b1f926da4ee8664f9 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use base qw(PVE::Storage::Plugin);
 
 use Fcntl qw(S_ISDIR O_WRONLY O_CREAT O_EXCL);
-use File::Basename qw(dirname);
+use File::Basename qw(basename dirname);
 use File::Path qw(mkpath);
 use IO::Dir;
 use POSIX qw(EEXIST);
@@ -309,7 +309,7 @@ sub alloc_image {
     my ($class, $storeid, $scfg, $vmid, $fmt, $name, $size) = @_;
 
     if ($fmt ne 'raw' && $fmt ne 'subvol') {
-       return $class->SUPER::alloc_image($storeid, $scfg, $vmid, $fmt, $name, $size)
+       return $class->SUPER::alloc_image($storeid, $scfg, $vmid, $fmt, $name, $size);
     }
 
     # From Plugin.pm:
@@ -410,7 +410,7 @@ sub free_image {
        $class->parse_volname($volname);
 
     if (!defined($format) || ($format ne 'subvol' && $format ne 'raw')) {
-       return PVE::Storage::DirPlugin->free_image($storeid, $scfg, $volname, $isBase, $_format);
+       return $class->SUPER::free_image($storeid, $scfg, $volname, $isBase, $_format);
     }
 
     my $path = $class->filesystem_path($scfg, $volname);
@@ -421,9 +421,11 @@ sub free_image {
     }
 
     my $dir = dirname($subvol);
+    my $basename = basename($subvol);
     my @snapshot_vols;
     foreach_subvol($dir, sub {
        my ($volume, $name, $snapshot) = @_;
+       return if $name ne $basename;
        return if !defined $snapshot;
        push @snapshot_vols, "$dir/$volume";
     });