Hi, any news about these commands ?
BR G.Baroncelli On 2016-10-28 17:44, David Sterba wrote: > On Mon, Oct 17, 2016 at 05:35:13PM -0700, Divya Indi wrote: >> An efficient alternative to retrieving block groups: >> get_chunks(): Walk the chunk tree to retrieve the chunks. >> get_bg_info(): For each retrieved chunk, lookup an exact match of block >> group in the extent tree. >> >> Signed-off-by: Divya Indi <[email protected]> >> Reviewed-by: Ashish Samant <[email protected]> >> Reviewed-by: Liu Bo <[email protected]> >> --- >> cmds-inspect.c | 66 >> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 66 insertions(+), 0 deletions(-) >> >> diff --git a/cmds-inspect.c b/cmds-inspect.c >> index 4b7cea0..f435ea9 100644 >> --- a/cmds-inspect.c >> +++ b/cmds-inspect.c >> @@ -81,6 +81,72 @@ out: >> return !!ret; >> } >> >> +static void bg_flags_to_str(u64 flags, char *ret) >> +{ >> + int empty = 1; >> + >> + if (flags & BTRFS_BLOCK_GROUP_DATA) { >> + empty = 0; >> + strcpy(ret, "DATA"); >> + } >> + if (flags & BTRFS_BLOCK_GROUP_METADATA) { >> + if (!empty) >> + strcat(ret, "|"); >> + strcat(ret, "METADATA"); >> + } >> + if (flags & BTRFS_BLOCK_GROUP_SYSTEM) { >> + if (!empty) >> + strcat(ret, "|"); >> + strcat(ret, "SYSTEM"); >> + } >> +} >> + >> +/* Walking through the chunk tree to retrieve chunks. */ > > No empty newline. > >> + >> +static int get_chunks(int fd, struct btrfs_ioctl_search_args *chunk_args) >> +{ >> + struct btrfs_ioctl_search_key *sk; >> + int ret; >> + int e; >> + >> + sk = &chunk_args->key; >> + >> + sk->tree_id = BTRFS_CHUNK_TREE_OBJECTID; >> + sk->min_objectid = sk->max_objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID; >> + sk->max_type = sk->min_type = BTRFS_CHUNK_ITEM_KEY; > > Please don't do multiple asignments in one statement. > >> + sk->nr_items = 4096; >> + >> + ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, chunk_args); >> + e = errno; > > This is useless asignment, I've removed it from the code, please don't > reintrduce it. > >> + if (ret < 0) { >> + fprintf(stderr, "ret %d error '%s'\n", ret, >> + strerror(e)); >> + } >> + return ret; >> +} > > >> + >> +/* Given the objectid, find the block group item in the extent tree */ >> +static int get_bg_info(int fd, struct btrfs_ioctl_search_args *bg_args, >> + u64 objectid, unsigned long length) >> +{ >> + struct btrfs_ioctl_search_key *bg_sk; >> + int ret; >> + int e; >> + >> + bg_sk = &bg_args->key; >> + >> + bg_sk->min_objectid = bg_sk->max_objectid = objectid; >> + bg_sk->nr_items = 1; >> + bg_sk->min_offset = bg_sk->max_offset = length; > > Same here. > >> + >> + ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, bg_args); >> + e = errno; >> + if (ret < 0) { >> + fprintf(stderr, "ret %d error '%s'\n", ret, >> + strerror(e)); > > Please take a look how the error messages are constructed when the tree > search ioctl fails, there are enough examples in the code. > >> + } >> + return ret; >> +} >> static const char * const cmd_inspect_inode_resolve_usage[] = { >> "btrfs inspect-internal inode-resolve [-v] <inode> <path>", >> "Get file system paths for the given inode", > > Actually, I'm not sure if such functions should exist at all, as they > only hide the search ioctl but don't do any validation of the returned > keys and data. > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- gpg @keyserver.linux.it: Goffredo Baroncelli <kreijackATinwind.it> Key fingerprint BBF5 1610 0B64 DAC6 5F7D 17B2 0EDA 9B37 8B82 E0B5 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
