Re: [PATCH 21/26] btrfs-progs: use libbtrfsutil for subvol show

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/26/2018 07:41 PM, Omar Sandoval wrote:
> From: Omar Sandoval <osandov@xxxxxx>
> 
> Now implemented with btrfs_util_subvolume_path(),
> btrfs_util_subvolume_info(), and subvolume iterators.
> 
> Signed-off-by: Omar Sandoval <osandov@xxxxxx>
> ---
>  cmds-subvolume.c | 150 ++++++++++++++++++++++++++++++++++++-------------------
>  utils.c          | 118 -------------------------------------------
>  utils.h          |   5 --
>  3 files changed, 99 insertions(+), 174 deletions(-)
> 
> diff --git a/cmds-subvolume.c b/cmds-subvolume.c
> index c5e03011..b969fc88 100644
> --- a/cmds-subvolume.c
> +++ b/cmds-subvolume.c
>
>
> [...]
>  	} else
>  		strcpy(tstr, "-");
>  	printf("\tCreation time: \t\t%s\n", tstr);
>  
> -	printf("\tSubvolume ID: \t\t%llu\n", get_ri.root_id);
> -	printf("\tGeneration: \t\t%llu\n", get_ri.gen);
> -	printf("\tGen at creation: \t%llu\n", get_ri.ogen);
> -	printf("\tParent ID: \t\t%llu\n", get_ri.ref_tree);
> -	printf("\tTop level ID: \t\t%llu\n", get_ri.top_id);
> +	printf("\tSubvolume ID: \t\t%" PRIu64 "\n", subvol.id);
> +	printf("\tGeneration: \t\t%" PRIu64 "\n", subvol.generation);
> +	printf("\tGen at creation: \t%" PRIu64 "\n", subvol.otransid);
> +	printf("\tParent ID: \t\t%" PRIu64 "\n", subvol.parent_id);
> +	printf("\tTop level ID: \t\t%" PRIu64 "\n", subvol.parent_id);
>  
> -	if (get_ri.flags & BTRFS_ROOT_SUBVOL_RDONLY)
> +	if (subvol.flags & BTRFS_ROOT_SUBVOL_RDONLY)
>  		printf("\tFlags: \t\t\treadonly\n");
>  	else
>  		printf("\tFlags: \t\t\t-\n");
>  
>  	/* print the snapshots of the given subvol if any*/
>  	printf("\tSnapshot(s):\n");
> -	filter_set = btrfs_list_alloc_filter_set();
> -	btrfs_list_setup_filter(&filter_set, BTRFS_LIST_FILTER_BY_PARENT,
> -				(u64)(unsigned long)get_ri.uuid);
> -	btrfs_list_setup_print_column(BTRFS_LIST_PATH);
>  
> -	fd = open_file_or_dir(fullpath, &dirstream1);
> -	if (fd < 0) {
> -		fprintf(stderr, "ERROR: can't access '%s'\n", fullpath);
> -		goto out;
> +	err = btrfs_util_f_create_subvolume_iterator(fd,
> +						     BTRFS_FS_TREE_OBJECTID,
> +						     0, &iter);
> +
> [...]
When you have enough subvolumes in a filesystem, let's say 100000 (yes,
that sometimes happens), the current btrfs sub list is quite unusable,
which is kind of expected. But, currently, sub show is also unusable
because it still starts loading a list of all subvolumes to be able to
print the 'snapshots, if any'.

So I guess that this new sub show will at least print the info first and
then use the iterator and start crawling through the list, which can be
interrupted? At least you get the relevant info first then. :-)

-- 
Hans van Kranenburg
--
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




[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux