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. Fix it by handling the case if mod is 0 in check_resize_args(). Issue: #307 Reported-by: Chris Murphy <li...@colorremedies.com> Signed-off-by: Su Yue <l...@damenly.su> --- cmds/filesystem.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- Changelog: v2: Calculate u64 diff using max() and min(). Calculate mod by comparing new and old size. diff --git a/cmds/filesystem.c b/cmds/filesystem.c index 9e3cce687d6e..54d46470c53f 100644 --- a/cmds/filesystem.c +++ b/cmds/filesystem.c @@ -1158,6 +1158,16 @@ 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 = max(old_size, new_size) - min(old_size, new_size); + if (new_size > old_size) + mod = 1; + else if (new_size < old_size) + mod = -1; + } + if (mod < 0) { if (diff > old_size) { error("current size is %s which is smaller than %s", -- 2.30.1