[pve-devel] [PATCH storage] fix #2085: Handle non-default mount point in path() by introducing new mountpoint property

Fabian Ebner f.ebner at proxmox.com
Wed Nov 6 13:46:49 CET 2019


A new mountpoint property is added to the schema for ZFSPool storages.
When needed for the first time, the current mount point is determined and
written to the storage config.

Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
 PVE/Storage/ZFSPoolPlugin.pm | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
index 16fb0d6..44c8123 100644
--- a/PVE/Storage/ZFSPoolPlugin.pm
+++ b/PVE/Storage/ZFSPoolPlugin.pm
@@ -32,6 +32,10 @@ sub properties {
 	    description => "use sparse volumes",
 	    type => 'boolean',
 	},
+	mountpoint => {
+	    description => "mount point",
+	    type => 'string', format => 'pve-storage-path',
+	},
     };
 }
 
@@ -44,6 +48,7 @@ sub options {
 	disable => { optional => 1 },
 	content => { optional => 1 },
 	bwlimit => { optional => 1 },
+	mountpoint => { optional => 1 },
     };
 }
 
@@ -148,11 +153,27 @@ sub path {
     my ($vtype, $name, $vmid) = $class->parse_volname($volname);
 
     my $path = '';
+    my $mountpoint = $scfg->{mountpoint};
+
+    # automatically write mountpoint to storage config if it is not present
+    if (!$mountpoint) {
+	$mountpoint = $class->zfs_request($scfg, undef, 'get', '-o', 'value',
+					  'mountpoint', '-H', $scfg->{pool});
+	chomp($mountpoint);
+
+	eval {
+	    PVE::Storage::lock_storage_config(sub {
+		my $cfg = PVE::Storage::config();
+		$cfg->{ids}->{$storeid}->{mountpoint} = $mountpoint;
+		PVE::Storage::write_config($cfg);
+	    }, "update storage config failed");
+	};
+	warn $@ if $@;
+    }
 
     if ($vtype eq "images") {
 	if ($name =~ m/^subvol-/ || $name =~ m/^basevol-/) {
-	    # fixme: we currently assume standard mount point?!
-	    $path = "/$scfg->{pool}/$name";
+	    $path = "$mountpoint/$name";
 	} else {
 	    $path = "/dev/zvol/$scfg->{pool}/$name";
 	}
-- 
2.20.1





More information about the pve-devel mailing list