[pve-devel] [PATCH storage 22/26] zfs: update 'path' method for new naming scheme

Wolfgang Bumiller
2025-07-29T11:17:30Z

src/PVE/Storage/ZFSPoolPlugin.pm | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/PVE/Storage/ZFSPoolPlugin.pm b/src/PVE/Storage/ZFSPoolPlugin.pm
index 2cae090..83cb9fb 100644
--- a/src/PVE/Storage/ZFSPoolPlugin.pm
+++ b/src/PVE/Storage/ZFSPoolPlugin.pm
@@ -123,7 +123,15 @@ sub zfs_parse_zvol_list {
return $list;
}

-my sub image_vtype_from_name : prototype($) {
+my sub volname_is_subvol : prototype($) {
+ my ($volname) = @_;
+ return 1 if $volname =~ /^(?:base-)?subvol-ct-/;
+ return 1 if $volname =~ /^subvol-/;
+ return 1 if $volname =~ /^basevol-/;
+ return 0;
+}
+
+my sub volume_type_from_name : prototype($) {
my ($name) = @_;

return 'ct-vol' if $name =~ /^(base-)?subvol(-ct)?-/;
@@ -194,16 +202,15 @@ sub path {
my $path = '';
my $mountpoint = $scfg->{mountpoint} // "/$scfg->{pool}";

- if ($vtype eq "images") {
- if ($name =~ m/^subvol-/ || $name =~ m/^basevol-/) {
- $path = "$mountpoint/$name";
- } else {
- $path = "/dev/zvol/$scfg->{pool}/$name";
- }
- $path .= "\@$snapname" if defined($snapname);
+ die "$vtype is not allowed in ZFSPool!"
+ if $vtype ne 'vm-vol' && $vtype ne 'ct-vol' && $vtype ne 'images';
+
+ if (volname_is_subvol($name)) {
+ $path = "$mountpoint/$name";
} else {
- die "$vtype is not allowed in ZFSPool!";
+ $path = "/dev/zvol/$scfg->{pool}/$name";
}
+ $path .= "\@$snapname" if defined($snapname);

return ($path, $vmid, $vtype);
}