On 7/10/24 20:17, Kees Cook wrote: > On Wed, Jul 10, 2024 at 08:09:27PM +0200, Mirsad Todorovac wrote: >> Dear all, >> >> On the linux-next vanilla next-20240709 tree, I have attempted the seed KCONFIG_SEED=0xEE7AB52F >> which was known from before to trigger various errors in compile and build process. >> >> Though this might seem as contributing to channel noise, Linux refuses to build this config, >> treating warnings as errors, using this build line: >> >> $ time nice make W=1 -k -j 36 |& tee ../err-next-20230709-01a.log; date >> >> As I know that the Chief Penguin doesn't like warnings, but I am also aware that there are plenty >> left, there seems to be more tedious work ahead to make the compilers happy. >> >> The compiler output is: >> >> --------------------------------------------------------------------------------------------------------- >> fs/reiserfs/do_balan.c: In function ‘balance_leaf_new_nodes_paste_whole’: >> fs/reiserfs/do_balan.c:1147:13: error: variable ‘leaf_mi’ set but not used [-Werror=unused-but-set-variable] >> 1147 | int leaf_mi; >> | ^~~~~~~ >> CC fs/reiserfs/lbalance.o >> fs/reiserfs/fix_node.c: In function ‘dc_check_balance_leaf’: >> fs/reiserfs/fix_node.c:1938:13: error: variable ‘maxsize’ set but not used [-Werror=unused-but-set-variable] >> 1938 | int maxsize, ret; >> | ^~~~~~~ >> fs/reiserfs/fix_node.c:1935:13: error: variable ‘levbytes’ set but not used [-Werror=unused-but-set-variable] >> 1935 | int levbytes; >> | ^~~~~~~~ >> fs/reiserfs/prints.c: In function ‘prepare_error_buf’: >> fs/reiserfs/prints.c:221:17: error: function ‘prepare_error_buf’ might be a candidate for ‘gnu_printf’ format attribute [-Werror=suggest-attribute=format] >> 221 | p += vscnprintf(p, end - p, fmt1, args); >> | ^ >> fs/reiserfs/prints.c:260:9: error: function ‘prepare_error_buf’ might be a candidate for ‘gnu_printf’ format attribute [-Werror=suggest-attribute=format] >> 260 | p += vscnprintf(p, end - p, fmt1, args); >> | ^ >> make[4]: Target 'arch/x86/kernel/' not remade because of errors. >> make[3]: *** [scripts/Makefile.build:485: arch/x86/kernel] Error 2 >> make[3]: Target 'arch/x86/' not remade because of errors. >> make[2]: *** [scripts/Makefile.build:485: arch/x86] Error 2 >> fs/reiserfs/lbalance.c: In function ‘leaf_copy_items’: >> fs/reiserfs/lbalance.c:524:29: error: variable ‘dest’ set but not used [-Werror=unused-but-set-variable] >> 524 | struct buffer_head *dest; >> | ^~~~ >> cc1: all warnings being treated as errors >> make[4]: *** [scripts/Makefile.build:244: fs/reiserfs/do_balan.o] Error 1 >> cc1: all warnings being treated as errors >> make[4]: *** [scripts/Makefile.build:244: fs/reiserfs/prints.o] Error 1 >> cc1: all warnings being treated as errors >> make[4]: *** [scripts/Makefile.build:244: fs/reiserfs/fix_node.o] Error 1 >> --------------------------------------------------------------------------------------------------------- >> >> In fs/reiserfs/fix_node.c:1938:13, fs/reiserfs/fix_node.c:1935:13, and fs/reiserfs/lbalance.c:524:29, >> the problem seem to lie within the construct RFALSE(), like >> >> 521 static int leaf_copy_items(struct buffer_info *dest_bi, struct buffer_head *src, >> 522 int last_first, int cpy_num, int cpy_bytes) >> 523 { >> 524 struct buffer_head *dest; >> 525 int pos, i, src_nr_item, bytes; >> 526 >> 527 dest = dest_bi->bi_bh; >> 528 RFALSE(!dest || !src, "vs-10210: !dest || !src"); >> 529 RFALSE(last_first != FIRST_TO_LAST && last_first != LAST_TO_FIRST, >> 530 "vs-10220:last_first != FIRST_TO_LAST && last_first != LAST_TO_FIRST"); >> 531 RFALSE(B_NR_ITEMS(src) < cpy_num, >> 532 "vs-10230: No enough items: %d, req. %d", B_NR_ITEMS(src), >> 533 cpy_num); >> 534 RFALSE(cpy_num < 0, "vs-10240: cpy_num < 0 (%d)", cpy_num); > > Can you prepare a patch to solve these? It should be possible to just > wrap the offending variables as done for RFALSE itself: > > #ifdef CONFIG_REISERFS_CHECK > struct buffer_head *dest; > #endif > > etc... Hi, Mr. Kees, Well, i sort fo did it but I am not happy with it (it is not elegant like the original code): -----><------------------ $ git diff fs/reiserfs diff --git a/fs/reiserfs/do_balan.c b/fs/reiserfs/do_balan.c index 5129efc6f2e6..fbe73f267853 100644 --- a/fs/reiserfs/do_balan.c +++ b/fs/reiserfs/do_balan.c @@ -1144,7 +1144,9 @@ static void balance_leaf_new_nodes_paste_whole(struct tree_balance *tb, { struct buffer_head *tbS0 = PATH_PLAST_BUFFER(tb->tb_path); int n = B_NR_ITEMS(tbS0); +#ifdef CONFIG_REISERFS_CHECK int leaf_mi; +#endif struct item_head *pasted; struct buffer_info bi; @@ -1157,7 +1159,6 @@ static void balance_leaf_new_nodes_paste_whole(struct tree_balance *tb, reiserfs_panic(tb->tb_sb, "PAP-12235", "pos_in_item must be equal to ih_item_len"); -#endif leaf_mi = leaf_move_items(LEAF_FROM_S_TO_SNEW, tb, tb->snum[i], tb->sbytes[i], tb->S_new[i]); @@ -1165,6 +1166,7 @@ static void balance_leaf_new_nodes_paste_whole(struct tree_balance *tb, RFALSE(leaf_mi, "PAP-12240: unexpected value returned by leaf_move_items (%d)", leaf_mi); +#endif /* paste into item */ buffer_info_init_bh(tb, &bi, tb->S_new[i]); diff --git a/fs/reiserfs/fix_node.c b/fs/reiserfs/fix_node.c index 6c13a8d9a73c..0ad41751eca5 100644 --- a/fs/reiserfs/fix_node.c +++ b/fs/reiserfs/fix_node.c @@ -1926,6 +1926,7 @@ static int dc_check_balance_leaf(struct tree_balance *tb, int h) { struct virtual_node *vn = tb->tb_vn; +#ifdef CONFIG_REISERFS_CHECK /* * Number of bytes that must be deleted from * (value is negative if bytes are deleted) buffer which @@ -1935,21 +1936,32 @@ static int dc_check_balance_leaf(struct tree_balance *tb, int h) int levbytes; /* the maximal item size */ - int maxsize, ret; + int maxsize; +#endif /* * S0 is the node whose balance is currently being checked, * and F0 is its father. */ - struct buffer_head *S0, *F0; + +#ifdef CONFIG_REISERFS_CHECK + struct buffer_head *S0; +#endif + struct buffer_head *F0; + int lfree, rfree /* free space in L and R */ ; + int ret; +#ifdef CONFIG_REISERFS_CHECK S0 = PATH_H_PBUFFER(tb->tb_path, 0); +#endif F0 = PATH_H_PPARENT(tb->tb_path, 0); +#ifdef CONFIG_REISERFS_CHECK levbytes = tb->insert_size[h]; maxsize = MAX_CHILD_SIZE(S0); /* maximal possible size of an item */ +#endif if (!F0) { /* S[0] is the root now. */ diff --git a/fs/reiserfs/lbalance.c b/fs/reiserfs/lbalance.c index 7f868569d4d0..aa8d897368da 100644 --- a/fs/reiserfs/lbalance.c +++ b/fs/reiserfs/lbalance.c @@ -521,10 +521,14 @@ static void leaf_item_bottle(struct buffer_info *dest_bi, static int leaf_copy_items(struct buffer_info *dest_bi, struct buffer_head *src, int last_first, int cpy_num, int cpy_bytes) { +#ifdef CONFIG_REISERFS_CHECK struct buffer_head *dest; +#endif int pos, i, src_nr_item, bytes; +#ifdef CONFIG_REISERFS_CHECK dest = dest_bi->bi_bh; +#endif RFALSE(!dest || !src, "vs-10210: !dest || !src"); RFALSE(last_first != FIRST_TO_LAST && last_first != LAST_TO_FIRST, "vs-10220:last_first != FIRST_TO_LAST && last_first != LAST_TO_FIRST"); -- P.S. I could not find a mitigation for these: fs/reiserfs/prints.c: In function ‘prepare_error_buf’: fs/reiserfs/prints.c:221:17: error: function ‘prepare_error_buf’ might be a candidate for ‘gnu_printf’ format attribute [-Werror=suggest-attribute=format] 221 | p += vscnprintf(p, end - p, fmt1, args); | ^ fs/reiserfs/prints.c:260:9: error: function ‘prepare_error_buf’ might be a candidate for ‘gnu_printf’ format attribute [-Werror=suggest-attribute=format] 260 | p += vscnprintf(p, end - p, fmt1, args); | ^ 221 p += vscnprintf(p, end - p, fmt1, args); Hope this helps. Best regards, Mirsad Todorovac