]> git.proxmox.com Git - pve-container.git/commitdiff
vm_stop_cleanup : detach loopdevices for non rootfs mountpoint
authorAlexandre Derumier <aderumier@odiso.com>
Tue, 18 Aug 2015 03:56:05 +0000 (05:56 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 18 Aug 2015 04:51:54 +0000 (06:51 +0200)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
src/PVE/LXC.pm

index 472b810871b00f01f6e3de0879905b040bce1da8..84242610c2d17117136caa5ffc97ac45fd3b5d7f 100644 (file)
@@ -1263,9 +1263,28 @@ sub vm_stop_cleanup {
     
     eval {
        if (!$keepActive) {
+
+           my $loopdevs = loopdevices_list();
+
             PVE::LXC::foreach_mountpoint($conf, sub {
                my ($ms, $mountpoint) = @_;
-               PVE::Storage::deactivate_volumes($storage_cfg, [$mountpoint->{volume}]);
+
+               my $volid = $mountpoint->{volume};
+               #detach loopdevices of non rootfs mountpoints 
+               my ($storage, $volname) = PVE::Storage::parse_volume_id($volid);
+               my $scfg = PVE::Storage::storage_config($storage_cfg, $storage);
+               my ($vtype, undef, undef, undef, undef, $isBase, $format) =
+                   PVE::Storage::parse_volname($storage_cfg, $volid);
+
+               if($ms ne 'rootfs' && $format eq 'raw' && ($scfg->{type} eq 'dir' || $scfg->{type} eq 'nfs')) {
+                   my $path = PVE::Storage::path($storage_cfg, $volid);
+                   foreach my $dev (keys %$loopdevs){
+                       PVE::Tools::run_command(['losetup', '-d', $dev]) if $loopdevs->{$dev} eq $path;
+                   }
+               }
+
+               PVE::Storage::deactivate_volumes($storage_cfg, [$volid]);
+
             });
        }
     };