From 2ff8105b3bb2d8eff682bbbfdca1a7843c7bd524 Mon Sep 17 00:00:00 2001 From: Konstantin Menyaev Date: Sat, 24 May 2025 20:26:39 +0300 Subject: ubi-utils: ubirsvol: resize volume using all available free space useful in resizing last ubi volume, some kind of auto-resize ubinize option. Signed-off-by: Konstantin Menyaev Reviewed-by: Zhihao Cheng Signed-off-by: David Oberhollenzer --- ubi-utils/ubirsvol.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ubi-utils') diff --git a/ubi-utils/ubirsvol.c b/ubi-utils/ubirsvol.c index 73d2f68..55f6794 100644 --- a/ubi-utils/ubirsvol.c +++ b/ubi-utils/ubirsvol.c @@ -57,8 +57,10 @@ static const char optionsstr[] = "-N, --name= volume name to resize\n" "-s, --size= volume size volume size in bytes, kilobytes (KiB)\n" " or megabytes (MiB)\n" +" zero size means use all available free bytes\n" "-S, --lebs= alternative way to give volume size in logical\n" " eraseblocks\n" +" zero size means use all available free LEBs\n" "-h, -?, --help print help message\n" "-V, --version print program version"; @@ -114,13 +116,13 @@ static int parse_opt(int argc, char * const argv[]) switch (key) { case 's': args.bytes = util_get_bytes(optarg); - if (args.bytes <= 0) + if (args.bytes < 0) return errmsg("bad volume size: \"%s\"", optarg); break; case 'S': args.lebs = simple_strtoull(optarg, &error); - if (error || args.lebs <= 0) + if (error || args.lebs < 0) return errmsg("bad LEB count: \"%s\"", optarg); break; @@ -233,6 +235,9 @@ int main(int argc, char * const argv[]) if (args.lebs != -1) args.bytes = (long long)vol_info.leb_size * args.lebs; + if (args.lebs == 0 || args.bytes == 0) + args.bytes = vol_info.rsvd_bytes + dev_info.avail_bytes; + err = ubi_rsvol(libubi, args.node, args.vol_id, args.bytes); if (err) { sys_errmsg("cannot UBI resize volume"); -- cgit v1.2.3