From ce9af251af5fca08ea206ef980005853a4dac36e Mon Sep 17 00:00:00 2001 From: Mikhail Novosyolov Date: Tue, 4 May 2021 12:28:46 +0300 Subject: [PATCH] feat: support ZSTD-compressed kernel modules Modern Linux kernels support zstd-compressed modules, which was added by commit 73f3d1b48f50 ("lib: Add zstd modules"). Commit c3d7ef377eb ("kbuild: add support for zstd compressed modules") added support of compressing modules with zstd to kernel Makefiles. libkmod >= 28 built with libzstd is also required. --- dracut-init.sh | 1 + dracut.sh | 1 + install/dracut-install.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/dracut-init.sh b/dracut-init.sh index 93ea8404..b6e3714a 100644 --- a/dracut-init.sh +++ b/dracut-init.sh @@ -625,6 +625,7 @@ get_decompress_cmd() { *.gz) echo 'gzip -f -d' ;; *.bz2) echo 'bzip2 -d' ;; *.xz) echo 'xz -f -d' ;; + *.zst) echo 'zstd -f -d ' ;; esac } diff --git a/dracut.sh b/dracut.sh index 580b0826..a7d66edb 100755 --- a/dracut.sh +++ b/dracut.sh @@ -1271,6 +1271,7 @@ if [[ $no_kernel != yes ]] && [[ -d $srcmods ]]; then case "$_mod" in *.ko.gz) kcompress=gzip ;; *.ko.xz) kcompress=xz ;; + *.ko.zst) kcompress=zstd ;; esac if [[ $kcompress ]]; then if ! command -v "$kcompress" &> /dev/null; then diff --git a/install/dracut-install.c b/install/dracut-install.c index 495ed2f1..b4eec363 100644 --- a/install/dracut-install.c +++ b/install/dracut-install.c @@ -1937,6 +1937,10 @@ static int install_modules(int argc, char **argv) int len = strlen(modname); modname[len - 6] = 0; } + if (endswith(modname, ".ko.zst")) { + int len = strlen(modname); + modname[len - 7] = 0; + } r = kmod_module_new_from_lookup(ctx, modname, &modlist); if (r < 0) { if (!arg_optional) {