On Sun, Nov 15, 2020 at 10:15:14AM +0000, Rui Salvaterra wrote: > From the beginning, the zram block device always enabled CRYPTO_LZO, since > lzo-rle is hardcoded as the fallback compression algorithm. As a consequence, on > systems where another compression algorithm is chosen (e.g. CRYPTO_ZSTD), the > lzo kernel module becomes unused, while still having to be built/loaded. > > This patch removes the hardcoded lzo-rle dependency and allows the user to > select the default compression algorithm for zram at build time. The previous > behaviour is kept, as the default algorithm is still lzo-rle. > > Suggested-by: Sergey Senozhatsky <sergey.senozhatsky.work@xxxxxxxxx> > Suggested-by: Minchan Kim <minchan@xxxxxxxxxx> > Signed-off-by: Rui Salvaterra <rsalvaterra@xxxxxxxxx> > --- > v5: incorporate Minchan's feedback. Allow the user to choose a default algorithm. > v4: incorporate Sergey's feedback and fix a small typo. > v3: fix the default selection when lzo isn't present. Rebase against 5.10-rc1. > v2: fix the dependency on CRYPTO. > > I believe this is the final version, but it does deserve some comment. Given the > choice of having more preprocessor #if/#endif directives in C files or making > the kconfig a bit more complex, I went for the latter. However, since kconfig > choices can only be boolean, I had to devise a way to make a string selection > based on the boolean choice, hence the ZRAM_DEF_COMP symbol. > I also tried to make the ZRAM_AUTOSEL_ALGO definition a bit less painful to the > eye, while still allowing for the compression algorithms to be selected as > modules, as per Sergey's suggestion. > > drivers/block/zram/Kconfig | 49 ++++++++++++++++++++++++++++++++++- > drivers/block/zram/zcomp.c | 2 ++ > drivers/block/zram/zram_drv.c | 2 +- > 3 files changed, 51 insertions(+), 2 deletions(-) > > diff --git a/drivers/block/zram/Kconfig b/drivers/block/zram/Kconfig > index fe7a4b7d30cf..cde089c30ffb 100644 > --- a/drivers/block/zram/Kconfig > +++ b/drivers/block/zram/Kconfig > @@ -2,7 +2,6 @@ > config ZRAM > tristate "Compressed RAM block device support" > depends on BLOCK && SYSFS && ZSMALLOC && CRYPTO > - select CRYPTO_LZO > help > Creates virtual block devices called /dev/zramX (X = 0, 1, ...). > Pages written to these disks are compressed and stored in memory > @@ -14,6 +13,54 @@ config ZRAM > > See Documentation/admin-guide/blockdev/zram.rst for more information. > > +choice > + prompt "Default zram compression algorithm" > + depends on ZRAM > + > +config ZRAM_DEF_COMP_LZORLE > + bool "lzo-rle" > + depends on CRYPTO_LZO > + > +config ZRAM_DEF_COMP_ZSTD > + bool "zstd" > + depends on CRYPTO_ZSTD > + > +config ZRAM_DEF_COMP_LZ4 > + bool "lz4" > + depends on CRYPTO_LZ4 > + > +config ZRAM_DEF_COMP_LZO > + bool "lzo" > + depends on CRYPTO_LZO > + > +config ZRAM_DEF_COMP_LZ4HC > + bool "lz4hc" > + depends on CRYPTO_LZ4HC > + > +config ZRAM_DEF_COMP_842 > + bool "842" > + depends on CRYPTO_842 > + > +endchoice > + > +config ZRAM_DEF_COMP > + string > + default "lzo-rle" if ZRAM_DEF_COMP_LZORLE > + default "zstd" if ZRAM_DEF_COMP_ZSTD > + default "lz4" if ZRAM_DEF_COMP_LZ4 > + default "lzo" if ZRAM_DEF_COMP_LZO > + default "lz4hc" if ZRAM_DEF_COMP_LZ4HC > + default "842" if ZRAM_DEF_COMP_842 > + > +config ZRAM_AUTOSEL_ALGO > + def_bool y > + depends on ZRAM && \ > + !(CRYPTO_LZ4=m || CRYPTO_LZ4=y || \ > + CRYPTO_LZ4HC=m || CRYPTO_LZ4HC=y || \ > + CRYPTO_842=m || CRYPTO_842=y || \ > + CRYPTO_ZSTD=m || CRYPTO_ZSTD=y) > + select CRYPTO_LZO > + Hi Rui, What's the purpose of ZRAM_AUTOSEL_ALGO? If you and Sergey already discussed, sorry about the missing it. Below doesn't work for your goal? diff --git a/drivers/block/zram/Kconfig b/drivers/block/zram/Kconfig index fe7a4b7d30cf..7f3c50f5f87e 100644 --- a/drivers/block/zram/Kconfig +++ b/drivers/block/zram/Kconfig @@ -2,7 +2,6 @@ config ZRAM tristate "Compressed RAM block device support" depends on BLOCK && SYSFS && ZSMALLOC && CRYPTO - select CRYPTO_LZO help Creates virtual block devices called /dev/zramX (X = 0, 1, ...). Pages written to these disks are compressed and stored in memory @@ -14,6 +13,32 @@ config ZRAM See Documentation/admin-guide/blockdev/zram.rst for more information. + +choice + prompt "zram default compressor" + default ZRAM_COMP_LZO_DEF + depends on ZRAM || CRYPTO_LZ4 + help + a + +config ZRAM_COMP_LZO_DEF + bool "lzo" + select CRYPTO_LZO + help + b + +config ZRAM_COMP_LZ4_DEF + bool "lz4" + depends on CRYPTO_LZ4 + help + c +endchoice + +config ZRAM_DEF_COMP + string + default "lzo" if ZRAM_COMP_LZO_DEF + default "lz4" if ZRAM_COMP_LZ4_DEF