[pve-devel] [PATCH storage v3 1/4] btrfs: add helper to iterate over snapshots of a subvolume

Maximiliano Sandoval m.sandoval at proxmox.com
Wed Feb 19 10:58:45 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 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..43f797a 100644
--- a/src/PVE/Storage/BTRFSPlugin.pm
+++ b/src/PVE/Storage/BTRFSPlugin.pm
@@ -419,6 +419,20 @@ my sub foreach_subvol : prototype($$) {
     })
 }
 
+# Calls `$code->($volume, $snap_name)` 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, $snap) = @_;
+	return if $name ne $basename;
+	return if !defined $snap;
+	$code->($snap);
+   });
+}
+
 sub free_image {
     my ($class, $storeid, $scfg, $volname, $isBase, $_format) = @_;
 
-- 
2.39.5





More information about the pve-devel mailing list