diff mbox series

[v3] btrfs-progs: fi resize: fix false 0.00B sized output

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

Commit Message

Su Yue April 20, 2021, 4:58 a.m. UTC
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(-)

Comments

Boris Burkov May 3, 2021, 5:19 p.m. UTC | #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>

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
>
David Sterba May 6, 2021, 2:21 p.m. UTC | #2
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 mbox series

Patch

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),