On Sat, Feb 20, 2021 at 12:41:17PM +0000, Sidong Yang wrote:
> This patch make output of filesystem-resize command more readable and
> give detail information for users. This patch provides more information
> about filesystem like below.
> 
> Before:
> Resize '/mnt' of '1:-1G'
> 
> After:
> Resize device id 1 (/dev/vdb) from 4.00GiB to 3.00GiB
> 
> Signed-off-by: Sidong Yang <realwa...@gmail.com>
> ---
> v2:
>   - print more detailed error
>   - covers all the possibilities format provides
> v3:
>   - use snprintf than strcpy for safety
>   - add diff variable for code readability
> v4:
>   - fix bugs for argument that has no devid
> ---
>  cmds/filesystem.c | 120 +++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 119 insertions(+), 1 deletion(-)
> 
> diff --git a/cmds/filesystem.c b/cmds/filesystem.c
> index 0d23daf4..7ddf5880 100644
> --- a/cmds/filesystem.c
> +++ b/cmds/filesystem.c
> @@ -28,6 +28,7 @@
>  #include <linux/limits.h>
>  #include <linux/version.h>
>  #include <getopt.h>
> +#include <limits.h>
>  
>  #include <btrfsutil.h>
>  
> @@ -1074,6 +1075,117 @@ static const char * const 
> cmd_filesystem_resize_usage[] = {
>       NULL
>  };
>  
> +static int check_resize_args(const char *amount, const char *path) {
> +     struct btrfs_ioctl_fs_info_args fi_args;
> +     struct btrfs_ioctl_dev_info_args *di_args = NULL;
> +     int ret, i, dev_idx = -1;
> +     u64 devid = 1;
> +     const char *res_str = NULL;
> +     char *devstr = NULL, *sizestr = NULL;
> +     u64 new_size = 0, old_size = 0, diff = 0;
> +     int mod = 0;
> +     char amount_dup[BTRFS_VOL_NAME_MAX];
> +
> +     ret = get_fs_info(path, &fi_args, &di_args);
> +
> +     if (ret) {
> +             error("unable to retrieve fs info");
> +             return 1;
> +     }
> +
> +     if (!fi_args.num_devices) {
> +             error("no devices found");
> +             free(di_args);
> +             return 1;

Btw I changed all the free/return to ret = 1/goto out pattern so the
cleanup does not need to repeated next to each return.

Reply via email to