[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