Message ID | 20210420045827.150881-1-l@damenly.su (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] btrfs-progs: fi resize: fix false 0.00B sized output | expand |
On Tue, Apr 20, 2021 at 12:58:27PM +0800, Su Yue wrote: > Resize to nums without sign prefix makes false output: > btrfs fi resize 1:150g /srv/extra > Resize device id 1 (/dev/sdb1) from 298.09GiB to 0.00B > > The resize operation would take effect though. > > check_resize_args() does not handle the mod 0 case and new_size is 0. > Simply assigning @diff to @new_size to fix this. > > Issue: #307 > Reported-by: Chris Murphy <lists@colorremedies.com> > Signed-off-by: Su Yue <l@damenly.su> Reviewed-by: Boris Burkov <boris@bur.io> > --- > Changelog: > v3: > Just assign @diff to @new_size. (Boris Burkov) > v2: > Calculate u64 diff using max() and min(). > Calculate mod by comparing new and old size. > --- > cmds/filesystem.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/cmds/filesystem.c b/cmds/filesystem.c > index 9e3cce687d6e..b4c09768235c 100644 > --- a/cmds/filesystem.c > +++ b/cmds/filesystem.c > @@ -1158,7 +1158,10 @@ static int check_resize_args(const char *amount, const char *path) { > } > old_size = di_args[dev_idx].total_bytes; > > - if (mod < 0) { > + /* For target sizes without '+'/'-' sign prefix(e.g. 1:150g) */ > + if (mod == 0) { > + new_size = diff; > + } else if (mod < 0) { > if (diff > old_size) { > error("current size is %s which is smaller than %s", > pretty_size_mode(old_size, UNITS_DEFAULT), > -- > 2.30.1 >
On Tue, Apr 20, 2021 at 12:58:27PM +0800, Su Yue wrote: > Resize to nums without sign prefix makes false output: > btrfs fi resize 1:150g /srv/extra > Resize device id 1 (/dev/sdb1) from 298.09GiB to 0.00B > > The resize operation would take effect though. > > check_resize_args() does not handle the mod 0 case and new_size is 0. > Simply assigning @diff to @new_size to fix this. > > Issue: #307 > Reported-by: Chris Murphy <lists@colorremedies.com> > Signed-off-by: Su Yue <l@damenly.su> > --- > Changelog: > v3: > Just assign @diff to @new_size. (Boris Burkov) Patch replaced in devel, thanks.
diff --git a/cmds/filesystem.c b/cmds/filesystem.c index 9e3cce687d6e..b4c09768235c 100644 --- a/cmds/filesystem.c +++ b/cmds/filesystem.c @@ -1158,7 +1158,10 @@ static int check_resize_args(const char *amount, const char *path) { } old_size = di_args[dev_idx].total_bytes; - if (mod < 0) { + /* For target sizes without '+'/'-' sign prefix(e.g. 1:150g) */ + if (mod == 0) { + new_size = diff; + } else if (mod < 0) { if (diff > old_size) { error("current size is %s which is smaller than %s", pretty_size_mode(old_size, UNITS_DEFAULT),
Resize to nums without sign prefix makes false output: btrfs fi resize 1:150g /srv/extra Resize device id 1 (/dev/sdb1) from 298.09GiB to 0.00B The resize operation would take effect though. check_resize_args() does not handle the mod 0 case and new_size is 0. Simply assigning @diff to @new_size to fix this. Issue: #307 Reported-by: Chris Murphy <lists@colorremedies.com> Signed-off-by: Su Yue <l@damenly.su> --- Changelog: v3: Just assign @diff to @new_size. (Boris Burkov) v2: Calculate u64 diff using max() and min(). Calculate mod by comparing new and old size. --- cmds/filesystem.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)