[pve-devel] [PATCH storage v4 1/7] btrfs: add helper to iterate over snapshots of a subvolume
Maximiliano Sandoval
m.sandoval at proxmox.com
Wed Feb 19 12:17:34 CET 2025
In this context a subvolume means a BTRFS subvolume.
`$volume\@$snap_name` would be for example
`btrfs_volume/images/102/vm-102-disk-0 at snap_name`.
Signed-off-by: Maximiliano Sandoval <m.sandoval at proxmox.com>
---
Differences from v3:
- Rename regex
- Delete now useless foreach_suvbol helper
Differences from v2:
- Split into multiple commits
- Simplify patch
- Use only the snapshot name in the callback of the helper
Differences from v1:
- Add a helper to run callback on each snapshot.
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) = @_;
--
2.39.5
More information about the pve-devel
mailing list