[pve-devel] [PATCH container] apply pending mountpoint: also hotplug non-volume mount points

Fiona Ebner f.ebner at proxmox.com
Mon Aug 8 14:36:42 CEST 2022


Previously, bind and device mount points were applied to the
configuration, but not actually hot-plugged/mounted, causing a
mismatch for running containers.

Reported in the community forum:
https://forum.proxmox.com/threads/113364/

Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---

Better viewed with -w

 src/PVE/LXC/Config.pm | 60 +++++++++++++++++++++----------------------
 1 file changed, 29 insertions(+), 31 deletions(-)

diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index b4b0261..23c1ba7 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -1471,40 +1471,38 @@ sub apply_pending_mountpoint {
 
     my $mp = $class->parse_volume($opt, $conf->{pending}->{$opt});
     my $old = $conf->{$opt};
-    if ($mp->{type} eq 'volume') {
-	if ($mp->{volume} =~ $PVE::LXC::NEW_DISK_RE) {
-	    my $original_value = $conf->{pending}->{$opt};
-	    my $vollist = PVE::LXC::create_disks(
-		$storecfg,
-		$vmid,
-		{ $opt => $original_value },
-		$conf,
-		1,
-	    );
-	    if ($running) {
-		# Re-parse mount point:
-		my $mp = $class->parse_volume($opt, $conf->{pending}->{$opt});
-		eval {
-		    PVE::LXC::mountpoint_hotplug($vmid, $conf, $opt, $mp, $storecfg);
-		};
-		my $err = $@;
-		if ($err) {
-		    PVE::LXC::destroy_disks($storecfg, $vollist);
-		    # The pending-changes code collects errors but keeps on looping through further
-		    # pending changes, so unroll the change in $conf as well if destroy_disks()
-		    # didn't die().
-		    $conf->{pending}->{$opt} = $original_value;
-		    die $err;
-		}
-	    }
-	} else {
-	    die "skip\n" if $running && defined($old); # TODO: "changing" mount points?
-	    $rescan_volume->($storecfg, $mp);
-	    if ($running) {
+    if ($mp->{type} eq 'volume' && $mp->{volume} =~ $PVE::LXC::NEW_DISK_RE) {
+	my $original_value = $conf->{pending}->{$opt};
+	my $vollist = PVE::LXC::create_disks(
+	    $storecfg,
+	    $vmid,
+	    { $opt => $original_value },
+	    $conf,
+	    1,
+	);
+	if ($running) {
+	    # Re-parse mount point:
+	    my $mp = $class->parse_volume($opt, $conf->{pending}->{$opt});
+	    eval {
 		PVE::LXC::mountpoint_hotplug($vmid, $conf, $opt, $mp, $storecfg);
+	    };
+	    my $err = $@;
+	    if ($err) {
+		PVE::LXC::destroy_disks($storecfg, $vollist);
+		# The pending-changes code collects errors but keeps on looping through further
+		# pending changes, so unroll the change in $conf as well if destroy_disks()
+		# didn't die().
+		$conf->{pending}->{$opt} = $original_value;
+		die $err;
 	    }
-	    $conf->{pending}->{$opt} = $class->print_ct_mountpoint($mp);
 	}
+    } else {
+	die "skip\n" if $running && defined($old); # TODO: "changing" mount points?
+	$rescan_volume->($storecfg, $mp) if $mp->{type} eq 'volume';
+	if ($running) {
+	    PVE::LXC::mountpoint_hotplug($vmid, $conf, $opt, $mp, $storecfg);
+	}
+	$conf->{pending}->{$opt} = $class->print_ct_mountpoint($mp);
     }
 
     if (defined($old)) {
-- 
2.30.2





More information about the pve-devel mailing list