diff options
author | David Sterba <dsterba@suse.cz> | 2013-09-18 18:19:30 +0200 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2013-10-16 08:23:11 -0400 |
commit | 7fbcc39c3075b88718bcb3e8e6f3ff599a4e9f86 (patch) | |
tree | 50c7072f9a53f9270b0077206ad38ec5be14a2f4 /cmds-inspect.c | |
parent | 8e937074a4ecc1a70f4a10cfff94e60a916ce82f (diff) |
btrfs-progs: look up the containing tree root id
Find the tree id of the containing subvolume for a given file or
directory. For subvolume return it's own id.
$ btrfs inspect-internal rootid <path>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'cmds-inspect.c')
-rw-r--r-- | cmds-inspect.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/cmds-inspect.c b/cmds-inspect.c index bdebf7d8..f0c8e3d9 100644 --- a/cmds-inspect.c +++ b/cmds-inspect.c @@ -301,6 +301,43 @@ out: return ret ? 1 : 0; } +static const char* const cmd_rootid_usage[] = { + "btrfs inspect-internal rootid <path>", + "Get tree ID of the containing subvolume of path.", + NULL +}; + +static int cmd_rootid(int argc, char **argv) +{ + int ret; + int fd = -1; + u64 rootid; + DIR *dirstream = NULL; + + if (check_argc_exact(argc, 2)) + usage(cmd_rootid_usage); + + fd = open_file_or_dir(argv[1], &dirstream); + if (fd < 0) { + fprintf(stderr, "ERROR: can't access '%s'\n", argv[1]); + ret = -ENOENT; + goto out; + } + + ret = lookup_ino_rootid(fd, &rootid); + if (ret) { + fprintf(stderr, "%s: rootid failed with ret=%d\n", + argv[0], ret); + goto out; + } + + printf("%llu\n", (unsigned long long)rootid); +out: + close_file_or_dir(fd, dirstream); + + return !!ret; +} + const struct cmd_group inspect_cmd_group = { inspect_cmd_group_usage, NULL, { { "inode-resolve", cmd_inode_resolve, cmd_inode_resolve_usage, @@ -309,6 +346,7 @@ const struct cmd_group inspect_cmd_group = { cmd_logical_resolve_usage, NULL, 0 }, { "subvolid-resolve", cmd_subvolid_resolve, cmd_subvolid_resolve_usage, NULL, 0 }, + { "rootid", cmd_rootid, cmd_rootid_usage, NULL, 0 }, NULL_CMD_STRUCT } }; |