aboutsummaryrefslogtreecommitdiff
path: root/util-linux/mkfs_minix.c
diff options
context:
space:
mode:
authorJames Byrne <james.byrne@origamienergy.com>2019-07-02 11:35:03 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2019-07-02 11:35:03 +0200
commit6937487be73cd4563b876413277a295a5fe2f32c (patch)
treef16cc9999a7c827891e6ec8d99c699fc791008ee /util-linux/mkfs_minix.c
parentcaecfdc20d450686cd1f7e9b5f650322f894b3c2 (diff)
downloadbusybox-w32-6937487be73cd4563b876413277a295a5fe2f32c.tar.gz
busybox-w32-6937487be73cd4563b876413277a295a5fe2f32c.tar.bz2
busybox-w32-6937487be73cd4563b876413277a295a5fe2f32c.zip
libbb: reduce the overhead of single parameter bb_error_msg() calls
Back in 2007, commit 0c97c9d43707 ("'simple' error message functions by Loic Grenie") introduced bb_simple_perror_msg() to allow for a lower overhead call to bb_perror_msg() when only a string was being printed with no parameters. This saves space for some CPU architectures because it avoids the overhead of a call to a variadic function. However there has never been a simple version of bb_error_msg(), and since 2007 many new calls to bb_perror_msg() have been added that only take a single parameter and so could have been using bb_simple_perror_message(). This changeset introduces 'simple' versions of bb_info_msg(), bb_error_msg(), bb_error_msg_and_die(), bb_herror_msg() and bb_herror_msg_and_die(), and replaces all calls that only take a single parameter, or use something like ("%s", arg), with calls to the corresponding 'simple' version. Since it is likely that single parameter calls to the variadic functions may be accidentally reintroduced in the future a new debugging config option WARN_SIMPLE_MSG has been introduced. This uses some macro magic which will cause any such calls to generate a warning, but this is turned off by default to avoid use of the unpleasant macros in normal circumstances. This is a large changeset due to the number of calls that have been replaced. The only files that contain changes other than simple substitution of function calls are libbb.h, libbb/herror_msg.c, libbb/verror_msg.c and libbb/xfuncs_printf.c. In miscutils/devfsd.c, networking/udhcp/common.h and util-linux/mdev.c additonal macros have been added for logging so that single parameter and multiple parameter logging variants exist. The amount of space saved varies considerably by architecture, and was found to be as follows (for 'defconfig' using GCC 7.4): Arm: -92 bytes MIPS: -52 bytes PPC: -1836 bytes x86_64: -938 bytes Note that for the MIPS architecture only an exception had to be made disabling the 'simple' calls for 'udhcp' (in networking/udhcp/common.h) because it made these files larger on MIPS. Signed-off-by: James Byrne <james.byrne@origamienergy.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'util-linux/mkfs_minix.c')
-rw-r--r--util-linux/mkfs_minix.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c
index e191acbd0..8f791cf66 100644
--- a/util-linux/mkfs_minix.c
+++ b/util-linux/mkfs_minix.c
@@ -262,7 +262,7 @@ static int get_free_block(void)
262 int blk; 262 int blk;
263 263
264 if (G.used_good_blocks + 1 >= MAX_GOOD_BLOCKS) 264 if (G.used_good_blocks + 1 >= MAX_GOOD_BLOCKS)
265 bb_error_msg_and_die("too many bad blocks"); 265 bb_simple_error_msg_and_die("too many bad blocks");
266 if (G.used_good_blocks) 266 if (G.used_good_blocks)
267 blk = G.good_blocks_table[G.used_good_blocks - 1] + 1; 267 blk = G.good_blocks_table[G.used_good_blocks - 1] + 1;
268 else 268 else
@@ -270,7 +270,7 @@ static int get_free_block(void)
270 while (blk < SB_ZONES && zone_in_use(blk)) 270 while (blk < SB_ZONES && zone_in_use(blk))
271 blk++; 271 blk++;
272 if (blk >= SB_ZONES) 272 if (blk >= SB_ZONES)
273 bb_error_msg_and_die("not enough good blocks"); 273 bb_simple_error_msg_and_die("not enough good blocks");
274 G.good_blocks_table[G.used_good_blocks] = blk; 274 G.good_blocks_table[G.used_good_blocks] = blk;
275 G.used_good_blocks++; 275 G.used_good_blocks++;
276 return blk; 276 return blk;
@@ -342,7 +342,7 @@ static void make_bad_inode(void)
342 goto end_bad; 342 goto end_bad;
343 } 343 }
344 } 344 }
345 bb_error_msg_and_die("too many bad blocks"); 345 bb_simple_error_msg_and_die("too many bad blocks");
346 end_bad: 346 end_bad:
347 if (ind) 347 if (ind)
348 write_block(ind, (char *) ind_block); 348 write_block(ind, (char *) ind_block);
@@ -398,7 +398,7 @@ static void make_bad_inode2(void)
398 } 398 }
399 } 399 }
400 /* Could make triple indirect block here */ 400 /* Could make triple indirect block here */
401 bb_error_msg_and_die("too many bad blocks"); 401 bb_simple_error_msg_and_die("too many bad blocks");
402 end_bad: 402 end_bad:
403 if (ind) 403 if (ind)
404 write_block(ind, (char *) ind_block); 404 write_block(ind, (char *) ind_block);
@@ -514,7 +514,7 @@ static void check_blocks(void)
514 if (got == try) 514 if (got == try)
515 continue; 515 continue;
516 if (G.currently_testing < SB_FIRSTZONE) 516 if (G.currently_testing < SB_FIRSTZONE)
517 bb_error_msg_and_die("bad blocks before data-area: cannot make fs"); 517 bb_simple_error_msg_and_die("bad blocks before data-area: cannot make fs");
518 mark_zone(G.currently_testing); 518 mark_zone(G.currently_testing);
519 G.badblocks++; 519 G.badblocks++;
520 G.currently_testing++; 520 G.currently_testing++;
@@ -588,7 +588,7 @@ static void setup_tables(void)
588 SB_ZMAPS = sb_zmaps; 588 SB_ZMAPS = sb_zmaps;
589 /* new SB_ZMAPS, need to recalc NORM_FIRSTZONE */ 589 /* new SB_ZMAPS, need to recalc NORM_FIRSTZONE */
590 } while (--i); 590 } while (--i);
591 bb_error_msg_and_die("incompatible size/inode count, try different -i N"); 591 bb_simple_error_msg_and_die("incompatible size/inode count, try different -i N");
592 got_it: 592 got_it:
593 593
594 SB_FIRSTZONE = norm_firstzone; 594 SB_FIRSTZONE = norm_firstzone;
@@ -623,10 +623,10 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
623 G.magic = MINIX1_SUPER_MAGIC2; 623 G.magic = MINIX1_SUPER_MAGIC2;
624 624
625 if (INODE_SIZE1 * MINIX1_INODES_PER_BLOCK != BLOCK_SIZE) 625 if (INODE_SIZE1 * MINIX1_INODES_PER_BLOCK != BLOCK_SIZE)
626 bb_error_msg_and_die("bad inode size"); 626 bb_simple_error_msg_and_die("bad inode size");
627#if ENABLE_FEATURE_MINIX2 627#if ENABLE_FEATURE_MINIX2
628 if (INODE_SIZE2 * MINIX2_INODES_PER_BLOCK != BLOCK_SIZE) 628 if (INODE_SIZE2 * MINIX2_INODES_PER_BLOCK != BLOCK_SIZE)
629 bb_error_msg_and_die("bad inode size"); 629 bb_simple_error_msg_and_die("bad inode size");
630#endif 630#endif
631 631
632 opt = getopt32(argv, "ci:l:n:+v", &str_i, &listfile, &G.namelen); 632 opt = getopt32(argv, "ci:l:n:+v", &str_i, &listfile, &G.namelen);
@@ -644,7 +644,7 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
644#if ENABLE_FEATURE_MINIX2 644#if ENABLE_FEATURE_MINIX2
645 version2 = 1; 645 version2 = 1;
646#else 646#else
647 bb_error_msg_and_die("not compiled with minix v2 support"); 647 bb_simple_error_msg_and_die("not compiled with minix v2 support");
648#endif 648#endif
649 } 649 }
650 650
@@ -654,14 +654,14 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
654 654
655 /* Check if it is mounted */ 655 /* Check if it is mounted */
656 if (find_mount_point(G.device_name, 0)) 656 if (find_mount_point(G.device_name, 0))
657 bb_error_msg_and_die("can't format mounted filesystem"); 657 bb_simple_error_msg_and_die("can't format mounted filesystem");
658 658
659 xmove_fd(xopen(G.device_name, O_RDWR), dev_fd); 659 xmove_fd(xopen(G.device_name, O_RDWR), dev_fd);
660 660
661 G.total_blocks = get_volume_size_in_bytes(dev_fd, argv[1], 1024, /*extend:*/ 1) / 1024; 661 G.total_blocks = get_volume_size_in_bytes(dev_fd, argv[1], 1024, /*extend:*/ 1) / 1024;
662 662
663 if (G.total_blocks < 10) 663 if (G.total_blocks < 10)
664 bb_error_msg_and_die("must have at least 10 blocks"); 664 bb_simple_error_msg_and_die("must have at least 10 blocks");
665 665
666 if (version2) { 666 if (version2) {
667 G.magic = MINIX2_SUPER_MAGIC2; 667 G.magic = MINIX2_SUPER_MAGIC2;