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.