From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 446AD1FF09C for ; Mon, 05 Oct 2026 13:06:59 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id EF9BA214F4; Mon, 05 Oct 2026 13:06:57 +0200 (CEST) From: Fiona Ebner To: pve-devel@lists.proxmox.com Subject: [PATCH storage] plugins: better document how volname_for_format() validates the name Date: Mon, 5 Oct 2026 13:04:43 +0200 Message-ID: <20261005110650.91260-1-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1791198414013 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.483 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: WQY7ERPZSKQMR5KUGYQIZ43ZQQ45M32R X-Message-ID-Hash: WQY7ERPZSKQMR5KUGYQIZ43ZQQ45M32R X-MailFrom: f.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: In particular, there is a requirement for get_parsed_format() to return a format only if it validated the name. Mention it explicitly. Signed-off-by: Fiona Ebner --- src/PVE/Storage/Plugin.pm | 5 +++-- src/PVE/Storage/ZFSPoolPlugin.pm | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/PVE/Storage/Plugin.pm b/src/PVE/Storage/Plugin.pm index 8318a68..e2025f8 100644 --- a/src/PVE/Storage/Plugin.pm +++ b/src/PVE/Storage/Plugin.pm @@ -851,7 +851,7 @@ sub parse_volname { =head3 get_parsed_format Return the disk format encoded in the given volume name, or C if the name does not spell one -out. +out. If a format is returned, the name must have been validated. This is an extension point for plugins whose volume names encode the format differently. ZFS derives it from the name prefix via C, while LVM and RBD take it from a known file @@ -866,7 +866,7 @@ sub get_parsed_format { return undef if $name !~ m/\.[^.]+$/; # no extension, so no format is spelled out - return (parse_name_dir($name))[1]; + return (parse_name_dir($name))[1]; # dies for invalid volume file names } sub is_valid_format { @@ -904,6 +904,7 @@ sub volname_for_format { my $parsed_volname_fmt = $class->get_parsed_format($name); + # Note that get_parsed_format() validates the name if it has a format extension. return $name if defined($parsed_volname_fmt) && $parsed_volname_fmt eq $fmt; my $suggestion = $class->volname_with_format($name, $fmt); diff --git a/src/PVE/Storage/ZFSPoolPlugin.pm b/src/PVE/Storage/ZFSPoolPlugin.pm index 61c49d9..e7cd1de 100644 --- a/src/PVE/Storage/ZFSPoolPlugin.pm +++ b/src/PVE/Storage/ZFSPoolPlugin.pm @@ -159,7 +159,7 @@ sub parse_volname { sub get_parsed_format { my ($class, $name) = @_; - return ($class->parse_volname($name))[6]; + return ($class->parse_volname($name))[6]; # dies for invalid volume names } # ZFS volume names always encode their format in the name prefix (vm- for raw @@ -170,6 +170,7 @@ sub volname_for_format { die "unsupported format '$fmt'\n" if !($class->is_valid_format($fmt)); + # Note that get_parsed_format() validates the name. my $name_fmt = $class->get_parsed_format($name); return $name if $name_fmt eq $fmt; -- 2.47.3