diff mbox series

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

Message ID 20210419124541.148269-1-l@damenly.su (mailing list archive)
State New, archived
Headers show
Series btrfs-progs: fi resize: fix false 0.00B sized output | expand

Commit Message

Su Yue April 19, 2021, 12:45 p.m. UTC
Resize to nums without sign prefix makes false output:
Resize device id 1 (/dev/sdb1) from 298.09GiB to 0.00B

The resize operation would take effect though.

Fix it by handling the case if mod is 0 in check_resize_args().

Issue: #307
Reported-by: Chris Murphy <lists@colorremedies.com>
Signed-off-by: Su Yue <l@damenly.su>
---
 cmds/filesystem.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Su Yue April 19, 2021, 12:49 p.m. UTC | #1
On Mon 19 Apr 2021 at 20:45, Su Yue <l@damenly.su> wrote:

> Resize to nums without sign prefix makes false output:
> Resize device id 1 (/dev/sdb1) from 298.09GiB to 0.00B
>
> The resize operation would take effect though.
>
> Fix it by handling the case if mod is 0 in check_resize_args().
>
> Issue: #307
> Reported-by: Chris Murphy <lists@colorremedies.com>
> Signed-off-by: Su Yue <l@damenly.su>
> ---
>  cmds/filesystem.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/cmds/filesystem.c b/cmds/filesystem.c
> index 9e3cce687d6e..607c85a0bccc 100644
> --- a/cmds/filesystem.c
> +++ b/cmds/filesystem.c
> @@ -1158,6 +1158,13 @@ static int check_resize_args(const char 
> *amount, const char *path) {
>  		}
>  		old_size = di_args[dev_idx].total_bytes;
>
> +		/* For target sizes without '+'/'-' sign prefix(e.g. 
> 1:150g) */
> +		if (mod == 0) {
> +			new_size = diff;
> +			diff = new_size - old_size;
>

> +			mod = diff;
>
Hmmm.. diff is a u64... will send v2.
> +		}
> +
>  		if (mod < 0) {
>  			if (diff > old_size) {
>  				error("current size is %s which is smaller than 
>  %s",
diff mbox series

Patch

diff --git a/cmds/filesystem.c b/cmds/filesystem.c
index 9e3cce687d6e..607c85a0bccc 100644
--- a/cmds/filesystem.c
+++ b/cmds/filesystem.c
@@ -1158,6 +1158,13 @@  static int check_resize_args(const char *amount, const char *path) {
 		}
 		old_size = di_args[dev_idx].total_bytes;
 
+		/* For target sizes without '+'/'-' sign prefix(e.g. 1:150g) */
+		if (mod == 0) {
+			new_size = diff;
+			diff = new_size - old_size;
+			mod = diff;
+		}
+
 		if (mod < 0) {
 			if (diff > old_size) {
 				error("current size is %s which is smaller than %s",