When initializing the ZRAM it has a hardcoded default of "lzo-rle" compressor. This compressor is not available in OpenWrt as only "lzo" is provided. The current behaviour make the PROCD_ZRAM_TMPFS feature failing, as procd-init is relying on the kernels default-algo, which is not present. So setting tmpfs falls back to not use ZRAM. Patch the kernel to keep the current preference to "lzo-rle" but check that it is present. If not, fall back to "lzo" or any other of the known compressors.
See also: * http://lists.openwrt.org/pipermail/openwrt-devel/2020-September/031430.html * 419f149e482641ddc520f80a7ab2038f7e2ebc8a Signed-off-by: Sven Roederer <devel-s...@geroedel.de> --- .../pending-5.4/801-zram_default-algo.patch | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 target/linux/generic/pending-5.4/801-zram_default-algo.patch diff --git a/target/linux/generic/pending-5.4/801-zram_default-algo.patch b/target/linux/generic/pending-5.4/801-zram_default-algo.patch new file mode 100644 index 0000000000..332bf24fed --- /dev/null +++ b/target/linux/generic/pending-5.4/801-zram_default-algo.patch @@ -0,0 +1,109 @@ +diff -ur linux-5.4.154.orig/drivers/block/zram/zcomp.c linux-5.4.154/drivers/block/zram/zcomp.c +--- linux-5.4.154.orig/drivers/block/zram/zcomp.c 2021-10-17 10:42:35.000000000 +0200 ++++ linux-5.4.154/drivers/block/zram/zcomp.c 2021-11-29 02:07:04.118702563 +0100 +@@ -14,24 +14,6 @@ + + #include "zcomp.h" + +-static const char * const backends[] = { +- "lzo", +- "lzo-rle", +-#if IS_ENABLED(CONFIG_CRYPTO_LZ4) +- "lz4", +-#endif +-#if IS_ENABLED(CONFIG_CRYPTO_LZ4HC) +- "lz4hc", +-#endif +-#if IS_ENABLED(CONFIG_CRYPTO_842) +- "842", +-#endif +-#if IS_ENABLED(CONFIG_CRYPTO_ZSTD) +- "zstd", +-#endif +- NULL +-}; +- + static void zcomp_strm_free(struct zcomp_strm *zstrm) + { + if (!IS_ERR_OR_NULL(zstrm->tfm)) +diff -ur linux-5.4.154.orig/drivers/block/zram/zcomp.h linux-5.4.154/drivers/block/zram/zcomp.h +--- linux-5.4.154.orig/drivers/block/zram/zcomp.h 2021-10-17 10:42:35.000000000 +0200 ++++ linux-5.4.154/drivers/block/zram/zcomp.h 2021-11-29 02:05:57.777496700 +0100 +@@ -6,6 +6,24 @@ + #ifndef _ZCOMP_H_ + #define _ZCOMP_H_ + ++static const char * const backends[] = { ++ "lzo-rle", ++ "lzo", ++#if IS_ENABLED(CONFIG_CRYPTO_LZ4) ++ "lz4", ++#endif ++#if IS_ENABLED(CONFIG_CRYPTO_LZ4HC) ++ "lz4hc", ++#endif ++#if IS_ENABLED(CONFIG_CRYPTO_842) ++ "842", ++#endif ++#if IS_ENABLED(CONFIG_CRYPTO_ZSTD) ++ "zstd", ++#endif ++ NULL ++}; ++ + struct zcomp_strm { + /* compression/decompression buffer */ + void *buffer; +diff -ur linux-5.4.154.orig/drivers/block/zram/zram_drv.c linux-5.4.154/drivers/block/zram/zram_drv.c +--- linux-5.4.154.orig/drivers/block/zram/zram_drv.c 2021-10-17 10:42:35.000000000 +0200 ++++ linux-5.4.154/drivers/block/zram/zram_drv.c 2021-11-29 02:04:57.400399244 +0100 +@@ -41,7 +41,6 @@ + static DEFINE_MUTEX(zram_index_mutex); + + static int zram_major; +-static const char *default_compressor = "lzo-rle"; + + /* Module params (documentation at end) */ + static unsigned int num_devices = 1; +@@ -1882,6 +1881,7 @@ + struct zram *zram; + struct request_queue *queue; + int ret, device_id; ++ int comp_count = 0; + + zram = kzalloc(sizeof(struct zram), GFP_KERNEL); + if (!zram) +@@ -1915,6 +1915,24 @@ + goto out_free_queue; + } + ++ /* check default compressors and select 1st available */ ++ for (; backends[comp_count]; comp_count++) { ++ if (crypto_has_alg(backends[comp_count], 0, 0)) { ++ pr_info("Using %s compressor as zram default\n", ++ backends[comp_count]); ++ strlcpy(zram->compressor, backends[comp_count], ++ sizeof(zram->compressor)); ++ } else { ++ pr_warn("%s compressor not found. Checking next ...\n", ++ backends[comp_count]); ++ } ++ } ++ if (!zram->compressor) { ++ pr_err("Error finding a default compressor\n"); ++ ret = -ENXIO; ++ goto out_free_queue; ++ } ++ + zram->disk->major = zram_major; + zram->disk->first_minor = device_id; + zram->disk->fops = &zram_devops; +@@ -1957,8 +1975,6 @@ + (BDI_CAP_STABLE_WRITES | BDI_CAP_SYNCHRONOUS_IO); + device_add_disk(NULL, zram->disk, zram_disk_attr_groups); + +- strlcpy(zram->compressor, default_compressor, sizeof(zram->compressor)); +- + zram_debugfs_register(zram); + pr_info("Added device: %s\n", zram->disk->disk_name); + return device_id; -- 2.30.2 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel