Skip to content

Commit

Permalink
btrfs-progs: cmds: show child subvolumes during recursive delete
Browse files Browse the repository at this point in the history
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: kdave#923

Signed-off-by: Sidong Yang <[email protected]>
  • Loading branch information
realwakka committed Jan 19, 2025
1 parent 4544ad3 commit 31180a9
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions cmds/subvolume.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,33 @@ static int cmd_subvolume_delete(const struct cmd_struct *cmd, int argc, char **a
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 ||
Expand Down

0 comments on commit 31180a9

Please sign in to comment.