From 3893d2755e523cd81cf6a72253d5345bd555a8db Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Thu, 19 Nov 2020 11:29:53 +0100 Subject: [PATCH] fix volume activation for ZFS subvols 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 --- 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"); } }