Re: [GIT PULL] bcachefs

Nathan Chancellor
2023-09-06T22:28:55Z

Hi Kent,

On Sat, Sep 02, 2023 at 11:25:55PM -0400, Kent Overstreet wrote:
> here's the bcachefs pull request, for 6.6. Hopefully everything
> outstanding from the previous PR thread has been resolved; the block
> layer prereqs are in now via Jens's tree and the dcache helper has a
> reviewed-by from Christain.

I pulled this into mainline locally and did an LLVM build, which found
an immediate issue. It appears the bcachefs codes uses zero length
arrays for flexible arrays instead of the C99 syntax that the kernel is
moving to, which will cause issues with -fstrict-flex-arrays=3 (clang
16+, gcc 13+), see commit df8fc4e934c1 ("kbuild: Enable
-fstrict-flex-arrays=3"). Currently, building x86_64 defconfig + the
bcachefs configs with clang warns (or errors with CONFIG_WERROR):

In file included from fs/bcachefs/replicas.c:6:
fs/bcachefs/replicas.h:46:2: error: array index 0 is past the end of the array (that has type '__u8[0]' (aka 'unsigned char[0]')) [-Werror,-Warray-bounds]
46 | e->devs[0] = dev;
| ^ ~
fs/bcachefs/bcachefs_format.h:1392:2: note: array 'devs' declared here
1392 | __u8 devs[0];
| ^
1 error generated.

GCC would warn in the same manner if -Warray-bounds was not disabled for
it... :(

In file included from fs/bcachefs/buckets.c:22:
In function 'bch2_replicas_entry_cached',
inlined from 'update_cached_sectors' at fs/bcachefs/buckets.c:409:2,
inlined from 'bch2_mark_alloc' at fs/bcachefs/buckets.c:590:9:
fs/bcachefs/replicas.h:46:16: error: array subscript 0 is outside array bounds of '__u8[0]' {aka 'unsigned char[]'} [-Werror=array-bounds=]
46 | e->devs[0] = dev;
| ~~~~~~~^~~
In file included from fs/bcachefs/bcachefs.h:206,
from fs/bcachefs/buckets.c:8:
fs/bcachefs/bcachefs_format.h: In function 'bch2_mark_alloc':
fs/bcachefs/bcachefs_format.h:1392:33: note: while referencing 'devs'
1392 | __u8 devs[0];
| ^~~~

GCC shows many other instances of this problem for the same reason (I
can send a build log if you'd like), such as 'struct snapshot_table' in
subvolume_types.h and several other structures in bcachefs_format.h.

Cheers,
Nathan