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 <divya.indi@xxxxxxxxxx>
>> Reviewed-by: Ashish Samant <ashish.samant@xxxxxxxxxx>
>> Reviewed-by: Liu Bo <bo.li.liu@xxxxxxxxxx>
>> ---
>> 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 majordomo@xxxxxxxxxxxxxxx
> 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html