From 171b760d815bf85787b59d57e8552610cf986231 Mon Sep 17 00:00:00 2001 From: Maximiliano Sandoval Date: Wed, 19 Feb 2025 12:17:34 +0100 Subject: [PATCH] btrfs: add helper to iterate over snapshots of a subvolume In this context a subvolume means a BTRFS subvolume. `$volume\@$snap_name` would be for example `btrfs_volume/images/102/vm-102-disk-0@snap_name`. Signed-off-by: Maximiliano Sandoval --- src/PVE/Storage/BTRFSPlugin.pm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/PVE/Storage/BTRFSPlugin.pm b/src/PVE/Storage/BTRFSPlugin.pm index cadd9d1..e5c3e08 100644 --- a/src/PVE/Storage/BTRFSPlugin.pm +++ b/src/PVE/Storage/BTRFSPlugin.pm @@ -419,6 +419,20 @@ my sub foreach_subvol : prototype($$) { }) } +# Calls `$code->($snapshot)` for each snapshot of the BTRFS subvolume. +my sub foreach_snapshot_of_subvol : prototype($$) { + my ($subvol, $code) = @_; + + my $basename = basename($subvol); + my $dir = dirname($subvol); + foreach_subvol($dir, sub { + my ($volume, $name, $snapshot) = @_; + return if $name ne $basename; + return if !defined $snapshot; + $code->($snapshot); + }); +} + sub free_image { my ($class, $storeid, $scfg, $volname, $isBase, $_format) = @_;