diff mbox

[05/10] Btrfs-progs: add function btrfs_get_subvol to get root_info of a subvol

Message ID 1358928771-31960-6-git-send-email-anand.jain@oracle.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Anand Jain Jan. 23, 2013, 8:12 a.m. UTC
We need a function which can get the root_info of a given
subvol. This is in preparation to add support for the show
sub-cli.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 btrfs-list.c | 38 ++++++++++++++++++++++++++++++++++++++
 btrfs-list.h |  1 +
 2 files changed, 39 insertions(+)

Comments

Eric Sandeen Jan. 24, 2013, 4:49 a.m. UTC | #1
On 1/23/13 2:12 AM, Anand Jain wrote:
> We need a function which can get the root_info of a given
> subvol. This is in preparation to add support for the show
> sub-cli.
> 
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> ---
>  btrfs-list.c | 38 ++++++++++++++++++++++++++++++++++++++
>  btrfs-list.h |  1 +
>  2 files changed, 39 insertions(+)
> 
> diff --git a/btrfs-list.c b/btrfs-list.c
> index 1851f3e..ec64a36 100644
> --- a/btrfs-list.c
> +++ b/btrfs-list.c
> @@ -1455,6 +1455,44 @@ int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set,
>  	return 0;
>  }
>  
> +int btrfs_get_subvol(int fd, struct root_info *the_ri)
> +{
> +	int ret = -1;
> +	struct root_lookup rl;
> +	struct rb_node *rbn;
> +	struct root_info *ri;
> +	u64 root_id = btrfs_list_get_path_rootid(fd);
> +
> +	if (btrfs_list_subvols(fd, &rl))
> +		return 13;

Unless there is an ongoing plan to actually do something with these
magical returns, can we maybe just be normal about error return values
in new code?

The caller you add only cares about 0 or not, right?  Or is there some other
purpose for "13" I'm not aware of?

Thanks,
-Eric

> +	rbn = rb_first(&rl.root);
> +	while(rbn) {
> +		ri = rb_entry(rbn, struct root_info, rb_node);
> +		resolve_root(&rl, ri, root_id);
> +		if (!comp_entry_with_rootid(the_ri, ri, 0)) {
> +			memcpy(the_ri, ri, offsetof(struct root_info, path));
> +			if (ri->path)
> +				the_ri->path = strdup(ri->path);
> +			else
> +				the_ri->path = NULL;
> +			if (ri->name)
> +				the_ri->name = strdup(ri->name);
> +			else
> +				the_ri->name = NULL;
> +			if (ri->full_path)
> +				the_ri->full_path = strdup(ri->full_path);
> +			else
> +				the_ri->name = NULL;
> +			ret = 0;
> +			break;
> +		}
> +		rbn = rb_next(rbn);
> +	}
> +	__free_all_subvolumn(&rl);
> +	return ret;
> +}
> +
>  static int print_one_extent(int fd, struct btrfs_ioctl_search_header *sh,
>  			    struct btrfs_file_extent_item *item,
>  			    u64 found_gen, u64 *cache_dirid,
> diff --git a/btrfs-list.h b/btrfs-list.h
> index 3b7b680..580d4d1 100644
> --- a/btrfs-list.h
> +++ b/btrfs-list.h
> @@ -151,3 +151,4 @@ int btrfs_list_find_updated_files(int fd, u64 root_id, u64 oldest_gen);
>  int btrfs_list_get_default_subvolume(int fd, u64 *default_id);
>  char *btrfs_list_path_for_root(int fd, u64 root);
>  u64 btrfs_list_get_path_rootid(int fd);
> +int btrfs_get_subvol(int fd, struct root_info *the_ri);
> 

--
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
Anand Jain Jan. 25, 2013, 9:20 a.m. UTC | #2
On 01/24/2013 12:49 PM, Eric Sandeen wrote:
> On 1/23/13 2:12 AM, Anand Jain wrote:
>> We need a function which can get the root_info of a given
>> subvol. This is in preparation to add support for the show
>> sub-cli.
>>
>> Signed-off-by: Anand Jain <anand.jain@oracle.com>
>> ---
>>   btrfs-list.c | 38 ++++++++++++++++++++++++++++++++++++++
>>   btrfs-list.h |  1 +
>>   2 files changed, 39 insertions(+)
>>
>> diff --git a/btrfs-list.c b/btrfs-list.c
>> index 1851f3e..ec64a36 100644
>> --- a/btrfs-list.c
>> +++ b/btrfs-list.c
>> @@ -1455,6 +1455,44 @@ int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set,
>>   	return 0;
>>   }
>>
>> +int btrfs_get_subvol(int fd, struct root_info *the_ri)
>> +{
>> +	int ret = -1;
>> +	struct root_lookup rl;
>> +	struct rb_node *rbn;
>> +	struct root_info *ri;
>> +	u64 root_id = btrfs_list_get_path_rootid(fd);
>> +
>> +	if (btrfs_list_subvols(fd, &rl))
>> +		return 13;
>
> Unless there is an ongoing plan to actually do something with these
> magical returns, can we maybe just be normal about error return values
> in new code?
>
> The caller you add only cares about 0 or not, right?  Or is there some other
> purpose for "13" I'm not aware of?
>
> Thanks,
> -Eric

  It was as in the original return value. But I think
  its time we fix this. now. accepted.

Thanks, Anand
--
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
diff mbox

Patch

diff --git a/btrfs-list.c b/btrfs-list.c
index 1851f3e..ec64a36 100644
--- a/btrfs-list.c
+++ b/btrfs-list.c
@@ -1455,6 +1455,44 @@  int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set,
 	return 0;
 }
 
+int btrfs_get_subvol(int fd, struct root_info *the_ri)
+{
+	int ret = -1;
+	struct root_lookup rl;
+	struct rb_node *rbn;
+	struct root_info *ri;
+	u64 root_id = btrfs_list_get_path_rootid(fd);
+
+	if (btrfs_list_subvols(fd, &rl))
+		return 13;
+
+	rbn = rb_first(&rl.root);
+	while(rbn) {
+		ri = rb_entry(rbn, struct root_info, rb_node);
+		resolve_root(&rl, ri, root_id);
+		if (!comp_entry_with_rootid(the_ri, ri, 0)) {
+			memcpy(the_ri, ri, offsetof(struct root_info, path));
+			if (ri->path)
+				the_ri->path = strdup(ri->path);
+			else
+				the_ri->path = NULL;
+			if (ri->name)
+				the_ri->name = strdup(ri->name);
+			else
+				the_ri->name = NULL;
+			if (ri->full_path)
+				the_ri->full_path = strdup(ri->full_path);
+			else
+				the_ri->name = NULL;
+			ret = 0;
+			break;
+		}
+		rbn = rb_next(rbn);
+	}
+	__free_all_subvolumn(&rl);
+	return ret;
+}
+
 static int print_one_extent(int fd, struct btrfs_ioctl_search_header *sh,
 			    struct btrfs_file_extent_item *item,
 			    u64 found_gen, u64 *cache_dirid,
diff --git a/btrfs-list.h b/btrfs-list.h
index 3b7b680..580d4d1 100644
--- a/btrfs-list.h
+++ b/btrfs-list.h
@@ -151,3 +151,4 @@  int btrfs_list_find_updated_files(int fd, u64 root_id, u64 oldest_gen);
 int btrfs_list_get_default_subvolume(int fd, u64 *default_id);
 char *btrfs_list_path_for_root(int fd, u64 root);
 u64 btrfs_list_get_path_rootid(int fd);
+int btrfs_get_subvol(int fd, struct root_info *the_ri);