ext4: Avoid -Wflex-array-member-not-at-end warning
PATCH 1/1 ext4: Avoid -Wflex-array-member-not-at-end warning
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the DEFINE_RAW_FLEX() helper for an on-stack definition of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.
So, with these changes, fix the following warning:
fs/ext4/mballoc.c:3041:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
--- fs/ext4/mballoc.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
fs/ext4/mballoc.c +8 -10
@@ -3037,10 +3037,8 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v) unsigned char blocksize_bits = min_t(unsigned char, sb->s_blocksize_bits,EXT4_MAX_BLOCK_LOG_SIZE ); -struct sg { -struct ext4_group_info info; -ext4_grpblk_t counters[EXT4_MAX_BLOCK_LOG_SIZE +2 ]; - } sg; + DEFINE_RAW_FLEX(struct ext4_group_info, sg, bb_counters, + EXT4_MAX_BLOCK_LOG_SIZE + 2); group--;if (group ==0 )
@@ -3048,7 +3046,7 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)" 2^0 2^1 2^2 2^3 2^4 2^5 2^6 " " 2^7 2^8 2^9 2^10 2^11 2^12 2^13 ]\n"); - i = (blocksize_bits +2 ) *sizeof (sg.info.bb_counters[0 ]) + + i = (blocksize_bits +2 ) *sizeof (sg->bb_counters[0 ]) +sizeof (struct ext4_group_info ); grinfo =ext4_get_group_info (sb, group);
@@ -3068,14 +3066,14 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)* We care only about free space counters in the group info and * these are safe to access even after the buddy has been unloaded */ -memcpy (&sg, grinfo, i); -seq_printf (seq,"#%-5u: %-5u %-5u %-5u [" , group, sg.info.bb_free, - sg.info.bb_fragments, sg.info.bb_first_free); +memcpy (sg, grinfo, i); +seq_printf (seq,"#%-5u: %-5u %-5u %-5u [" , group, sg->bb_free, + sg->bb_fragments, sg->bb_first_free);for (i =0 ; i <=13 ; i++)seq_printf (seq," %-5u" , i <= blocksize_bits +1 ? - sg.info.bb_counters[i] :0 ); + sg->bb_counters[i] :0 );seq_puts (seq," ]" ); -if (EXT4_MB_GRP_BBITMAP_CORRUPT (&sg.info)) +if (EXT4_MB_GRP_BBITMAP_CORRUPT (sg))seq_puts (seq," Block bitmap corrupted!" );seq_putc (seq,'\n' );return 0 ;
Signature · 1 line
2.43.0
Quoted 22 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the
DEFINE_RAW_FLEX()helper for an on-stack definition of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.So, with these changes, fix the following warning:
fs/ext4/mballoc.c:3041:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]Signed-off-by Gustavo A. R. Silva <[email protected]>--- fs/ext4/mballoc.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)fs/ext4/mballoc.c +0
-0
fs/ext4/mballoc.c static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v) · line 3041
Quoted 9 lines
fs/ext4/mballoc.c +2
-4@@ -3037,10 +3037,8 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v) unsigned char blocksize_bits = min_t(unsigned char, sb->s_blocksize_bits,EXT4_MAX_BLOCK_LOG_SIZE ); -struct sg { -struct ext4_group_info info; -ext4_grpblk_t counters[EXT4_MAX_BLOCK_LOG_SIZE +2 ]; - } sg; + DEFINE_RAW_FLEX(struct ext4_group_info, sg, bb_counters, + EXT4_MAX_BLOCK_LOG_SIZE + 2);
Yup, struct ext4_group_info::bb_counters is ext4_grpblk_t, so everything matches up.
Quoted 22 lines
fs/ext4/mballoc.c +4
-4group--;if (group ==0 )@@ -3048,7 +3046,7 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)" 2^0 2^1 2^2 2^3 2^4 2^5 2^6 " " 2^7 2^8 2^9 2^10 2^11 2^12 2^13 ]\n"); - i = (blocksize_bits +2 ) *sizeof (sg.info.bb_counters[0 ]) + + i = (blocksize_bits +2 ) *sizeof (sg->bb_counters[0 ]) +sizeof (struct ext4_group_info ); grinfo =ext4_get_group_info (sb, group);@@ -3068,14 +3066,14 @@ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)* We care only about free space counters in the group info and * these are safe to access even after the buddy has been unloaded */ -memcpy (&sg, grinfo, i); -seq_printf (seq,"#%-5u: %-5u %-5u %-5u [" , group, sg.info.bb_free, - sg.info.bb_fragments, sg.info.bb_first_free); +memcpy (sg, grinfo, i); +seq_printf (seq,"#%-5u: %-5u %-5u %-5u [" , group, sg->bb_free, + sg->bb_fragments, sg->bb_first_free);
fs/ext4/mballoc.c static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v) · line 3079
Quoted 10 lines
fs/ext4/mballoc.c +2
-2for (i =0 ; i <=13 ; i++)seq_printf (seq," %-5u" , i <= blocksize_bits +1 ? - sg.info.bb_counters[i] :0 ); + sg->bb_counters[i] :0 );seq_puts (seq," ]" ); -if (EXT4_MB_GRP_BBITMAP_CORRUPT (&sg.info)) +if (EXT4_MB_GRP_BBITMAP_CORRUPT (sg))seq_puts (seq," Block bitmap corrupted!" );seq_putc (seq,'\n' );return 0 ;
Replacements looks good.
Signature · 1 line
Kees Cook
Quoted 9 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the
DEFINE_RAW_FLEX()helper for an on-stack definition of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.[...]
Applied, thanks!
[1/1] ext4: Avoid -Wflex-array-member-not-at-end warning
commit: 7e50bbb134aba1df0854f171b596b3a42d35605a
(Apologies for sending this late; I've been dealing with a family medical emergency. In any case, the patch landed in v6.16-rc2.)
Best regards,
Signature · 1 line
Theodore Ts'o <[email protected]>