From: Goffredo Baroncelli <kreijack@libero.it>
To: Andreas Philipp <philipp.andreas@gmail.com>
Cc: linux-btrfs@vger.kernel.org, hugo@carfax.org.uk
Subject: Re: [PATCH v2] print parent ID in btrfs suvolume list
Date: Sat, 02 Jul 2011 09:55:47 +0200 [thread overview]
Message-ID: <4E0ECF03.30400@libero.it> (raw)
In-Reply-To: <4E0D9F90.4060703@gmail.com>
On 07/01/2011 12:21 PM, Andreas Philipp wrote:
> There was some discussion on "where" subvolumes live in. Why do we not
> simply print the parent ID for each subvolume in btrfs subvolume list?
> This patch adds this functionality when called with parameter "-p".
>
Can I ask you to update the man page too ?
> Signed-off-by: Andreas Philipp <philipp.andreas@gmail.com>
> ---
> V1->V2: do not change the default behavior but rather add the switch -p.
>
> btrfs-list.c | 24 ++++++++++++++++++------
> btrfs.c | 6 ++++--
> btrfs_cmds.c | 17 +++++++++++++++--
> btrfs_cmds.h | 2 +-
> 4 files changed, 38 insertions(+), 11 deletions(-)
>
> diff --git a/btrfs-list.c b/btrfs-list.c
> index f804dfc..be20c91 100644
> --- a/btrfs-list.c
> +++ b/btrfs-list.c
> @@ -200,9 +200,10 @@ static int add_root(struct root_lookup *root_lookup,
> * This can't be called until all the root_info->path fields are filled
> * in by lookup_ino_path
> */
> -static int resolve_root(struct root_lookup *rl, struct root_info *ri)
> +static int resolve_root(struct root_lookup *rl, struct root_info *ri, int print_parent)
> {
> u64 top_id;
> + u64 parent_id = 0;
> char *full_path = NULL;
> int len = 0;
> struct root_info *found;
> @@ -233,6 +234,11 @@ static int resolve_root(struct root_lookup *rl, struct root_info *ri)
> }
>
> next = found->ref_tree;
> + /* record the first parent */
> + if ( parent_id == 0 ) {
> + parent_id = next;
> + }
> +
> /* if the ref_tree refers to ourselves, we're at the top */
> if (next == found->root_id) {
> top_id = next;
> @@ -249,9 +255,15 @@ static int resolve_root(struct root_lookup *rl, struct root_info *ri)
> break;
> }
> }
> - printf("ID %llu top level %llu path %s\n",
> - (unsigned long long)ri->root_id, (unsigned long long)top_id,
> - full_path);
> + if (print_parent) {
> + printf("ID %llu parent %llu top level %llu path %s\n",
> + (unsigned long long)ri->root_id, (unsigned long long)parent_id, (unsigned long long)top_id,
> + full_path);
> + } else {
> + printf("ID %llu top level %llu path %s\n",
> + (unsigned long long)ri->root_id, (unsigned long long)top_id,
> + full_path);
> + }
> free(full_path);
> return 0;
> }
> @@ -549,7 +561,7 @@ build:
> return full;
> }
>
> -int list_subvols(int fd)
> +int list_subvols(int fd, int print_parent)
> {
> struct root_lookup root_lookup;
> struct rb_node *n;
> @@ -666,7 +678,7 @@ int list_subvols(int fd)
> while (n) {
> struct root_info *entry;
> entry = rb_entry(n, struct root_info, rb_node);
> - resolve_root(&root_lookup, entry);
> + resolve_root(&root_lookup, entry, print_parent);
> n = rb_prev(n);
> }
>
> diff --git a/btrfs.c b/btrfs.c
> index 87cc680..d09823a 100644
> --- a/btrfs.c
> +++ b/btrfs.c
> @@ -66,9 +66,11 @@ static struct Command commands[] = {
> "not passed).",
> NULL
> },
> - { do_subvol_list, 1, "subvolume list", "<path>\n"
> + { do_subvol_list, -1, "subvolume list", "[-p] <path>\n"
> "List the snapshot/subvolume of a filesystem.",
> - NULL
> + "[-p] <path>\n"
> + "List the snapshot/subvolume of a filesystem.\n"
> + "-p print parent ID"
> },
> { do_set_default_subvol, 2,
> "subvolume set-default", "<id> <path>\n"
> diff --git a/btrfs_cmds.c b/btrfs_cmds.c
> index 062e7d7..9e0c9bc 100644
> --- a/btrfs_cmds.c
> +++ b/btrfs_cmds.c
> @@ -303,9 +303,22 @@ int do_subvol_list(int argc, char **argv)
> {
> int fd;
> int ret;
> + int print_parent = 0;
> char *subvol;
> + int optind = 1;
>
> - subvol = argv[1];
> + while(1) {
> + int c = getopt(argc, argv, "p");
> + if (c < 0) break;
> + switch(c) {
> + case 'p':
> + print_parent = 1;
> + optind++;
> + break;
> + }
> + }
> +
> + subvol = argv[optind];
>
> ret = test_issubvolume(subvol);
> if (ret < 0) {
> @@ -322,7 +335,7 @@ int do_subvol_list(int argc, char **argv)
> fprintf(stderr, "ERROR: can't access '%s'\n", subvol);
> return 12;
> }
> - ret = list_subvols(fd);
> + ret = list_subvols(fd, print_parent);
> if (ret)
> return 19;
> return 0;
> diff --git a/btrfs_cmds.h b/btrfs_cmds.h
> index 61456fa..83faa5b 100644
> --- a/btrfs_cmds.h
> +++ b/btrfs_cmds.h
> @@ -34,7 +34,7 @@ int do_scan(int nargs, char **argv);
> int do_resize(int nargs, char **argv);
> int do_subvol_list(int nargs, char **argv);
> int do_set_default_subvol(int nargs, char **argv);
> -int list_subvols(int fd);
> +int list_subvols(int fd, int print_parent);
> int do_df_filesystem(int nargs, char **argv);
> int find_updated_files(int fd, u64 root_id, u64 oldest_gen);
> int do_find_newer(int argc, char **argv);
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
.
prev parent reply other threads:[~2011-07-02 7:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-26 21:10 Integration branch updated Hugo Mills
2011-06-27 12:43 ` David Sterba
2011-06-27 13:03 ` Andreas Philipp
2011-06-27 14:45 ` Hugo Mills
2011-07-01 10:21 ` [PATCH v2] print parent ID in btrfs suvolume list Andreas Philipp
2011-07-02 7:55 ` Goffredo Baroncelli [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E0ECF03.30400@libero.it \
--to=kreijack@libero.it \
--cc=hugo@carfax.org.uk \
--cc=kreijack@inwind.it \
--cc=linux-btrfs@vger.kernel.org \
--cc=philipp.andreas@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).