diff mbox series

btrfs-progs: cmds: show child subvolumes during recursive delete

Message ID 20250119105048.5452-1-realwakka@gmail.com (mailing list archive)
State New
Headers show
Series btrfs-progs: cmds: show child subvolumes during recursive delete | expand

Commit Message

Sidong Yang Jan. 19, 2025, 10:50 a.m. UTC
When a subvolume is deleted with the recursive option, any nested (child)
subvolumes also get removed without report it. This patch modifies the
delete subvol command to print a listt of child subvolumes during
recursive deletion.

Issue: #923

Signed-off-by: Sidong Yang <realwakka@gmail.com>
---
 cmds/subvolume.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

--
2.43.0
diff mbox series

Patch

diff --git a/cmds/subvolume.c b/cmds/subvolume.c
index f34d9400..586f2071 100644
--- a/cmds/subvolume.c
+++ b/cmds/subvolume.c
@@ -507,6 +507,33 @@  again:
 		goto out;
 	}

+	if (flags & BTRFS_UTIL_DELETE_SUBVOLUME_RECURSIVE) {
+		struct btrfs_util_subvolume_iterator *iter;
+		err = btrfs_util_subvolume_iter_create_fd(fd, target_subvol_id,
+							  BTRFS_UTIL_SUBVOLUME_ITERATOR_POST_ORDER,
+							  &iter);
+		if (!err) {
+			char *child_path;
+			struct btrfs_util_subvolume_info subvol_info;
+			while (!(err = btrfs_util_subvolume_iter_next_info(iter, &child_path, &subvol_info))) {
+				pr_verbose(LOG_DEFAULT, "Delete subvolume %" PRIu64 " (%s): ",
+					   subvol_info.id,
+					   commit_mode == COMMIT_EACH ||
+					   (commit_mode == COMMIT_AFTER && cnt + 1 == argc) ?
+					   "commit" : "no-commit");
+				pr_verbose(LOG_DEFAULT, "'%s/%s/%s'\n", dname, vname, child_path);
+
+				free(child_path);
+			}
+			if (err != BTRFS_UTIL_ERROR_STOP_ITERATION)
+				warning("failed to iterate subvol : %s", btrfs_util_strerror(err));
+
+			btrfs_util_destroy_subvolume_iterator(iter);
+		} else {
+			warning("failed to create iter: %s", btrfs_util_strerror(err));
+		}
+	}
+
 	pr_verbose(LOG_DEFAULT, "Delete subvolume %" PRIu64 " (%s): ",
 		target_subvol_id,
 		commit_mode == COMMIT_EACH ||