Hi Yamada-san, On Tue, Feb 23, 2021 at 7:31 AM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote: > On Mon, Feb 22, 2021 at 9:59 PM Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: > > If F2FS_FS is modular, enabling the compressions options > > F2FS_FS_{LZ4,LZ4HZ,LZO,LZORLE,ZSTD} will make the (de)compression > > algorithms {LZ4,LZ4HC,LZO,ZSTD}_{,DE}COMPRESS builtin instead of > > modular, as the former depend on an intermediate boolean > > F2FS_FS_COMPRESSION, which in-turn depends on tristate F2FS_FS. > > > > Indeed, if a boolean symbol A depends directly on a tristate symbol B > > and selects another tristate symbol C: > > > > tristate B > > > > tristate C > > > > bool A > > depends on B > > select C > > > > and B is modular, then C will also be modular. > > > > However, if there is an intermediate boolean D in the dependency chain > > between A and B: > > > > tristate B > > > > tristate C > > > > bool D > > depends on B > > > > bool A > > depends on D > > select C > > > > then the modular state won't propagate from B to C, and C will be > > builtin instead of modular. > > > > Fix this by making the various compression options depend directly on > > F2FS_FS using a big if/endif block. Drop the now superfluous > > dependencies on F2FS_FS from individual symbols. > > > > Signed-off-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> > > --- > > Perhaps the propagation logic in Kconfig should be fixed instead? > > Else people may reintroduce this issue when removing seemingly-unneeded > > dependencies. > > I checked the code in menu_finalize(), and this seems to work like this. > > I discussed the oddity of the select behavior before > (https://lore.kernel.org/linux-kbuild/e1a6228d-1341-6264-d97a-e2bd52a65c82@xxxxxxxxxxxxx/), > but I was not confident about what the right direction was. > > > Anyway, the behavior is obscure from the current code. > > If you want to make this more robust, > you can write as follows: > > config F2FS_FS > tristate "F2FS filesystem support" > depends on BLOCK > select NLS > select CRYPTO > select CRYPTO_CRC32 > select F2FS_FS_XATTR if FS_ENCRYPTION > select FS_ENCRYPTION_ALGS if FS_ENCRYPTION > select LZO_COMPRESS if F2FS_FS_LZO > select LZO_DECOMPRESS if F2FS_FS_LZO > select LZ4_COMPRESS if F2FS_FS_LZ4 > select LZ4_DECOMPRESS if F2FS_FS_LZ4 > select LZ4HC_COMPRESS if F2FS_FS_LZ4HC > select ZSTD_COMPRESS if F2FS_FS_ZSTD > select ZSTD_DECOMPRESS if F2FS_FS_ZSTD > > The code is a bit clumsy, but it is clear > that the module (F2FS_FS) is selecting the > compress/decompress libraries. Actually the above is what I tried first ;-) Works fine. Then I started to look for similar cases in other file systems (e.g. EROFS_FS_ZIP), and discovered the issue doesn't happen there, which sparked my investigation. So I settled on the direct dependency, because it keeps all compression-related logic together. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds