[pve-devel] [PATCH storage] fix volume activation for ZFS subvols
Fabian Ebner
f.ebner at proxmox.com
Thu Nov 19 11:29:53 CET 2020
When using the path to request properties, and no ZFS file system is mounted
at that path, ZFS will fall back to the parent filesystem:
> # zfs unmount myzpool/subvol-172-disk-0
> # zfs get mounted /myzpool/subvol-172-disk-0
> NAME PROPERTY VALUE SOURCE
> myzpool mounted yes -
> # zfs get mounted myzpool/subvol-172-disk-0
> NAME PROPERTY VALUE SOURCE
> myzpool/subvol-172-disk-0 mounted no -
Thus, we cannot use the path and need to use the dataset directly.
Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
See commit 59fdc2b71e5da8eaf3c821a5c55f410f58da200a for more context.
I did build the package as root to run the zfs regressiontests this time.
PVE/Storage/ZFSPoolPlugin.pm | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
index 07540b3..2f0a80a 100644
--- a/PVE/Storage/ZFSPoolPlugin.pm
+++ b/PVE/Storage/ZFSPoolPlugin.pm
@@ -549,15 +549,14 @@ sub activate_volume {
return 1 if defined($snapname);
- my (undef, undef, undef, undef, undef, undef, $format) = $class->parse_volname($volname);
+ my (undef, $dataset, undef, undef, undef, undef, $format) = $class->parse_volname($volname);
if ($format eq 'raw') {
$class->zfs_wait_for_zvol_link($scfg, $volname);
} elsif ($format eq 'subvol') {
- my ($path, undef, undef) = $class->path($scfg, $volname, $storeid);
- my $mounted = $class->zfs_get_properties($scfg, 'mounted', "$path");
+ my $mounted = $class->zfs_get_properties($scfg, 'mounted', "$scfg->{pool}/$dataset");
if ($mounted !~ m/^yes$/) {
- $class->zfs_request($scfg, undef, 'mount', "$path");
+ $class->zfs_request($scfg, undef, 'mount', "$scfg->{pool}/$dataset");
}
}
--
2.20.1
More information about the pve-devel
mailing list