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 <f.ebner@proxmox.com>
This commit is contained in:
Fabian Ebner
2020-11-19 11:29:53 +01:00
committed by Thomas Lamprecht
parent 68c4bca39e
commit 3893d2755e

View File

@ -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");
}
}