From 1ba89c391e032aba5d4be3842a1682ed897b921a Mon Sep 17 00:00:00 2001 From: Gleb Chesnokov Date: Mon, 18 Aug 2025 12:10:15 +0300 Subject: [PATCH] iscsi-scst: Accept CRC32 or LIBCRC32C for crc32c() across kernels Kernel v6.15+ removed LIBCRC32C and switched in-tree users to CRC32. Keep older kernels working by accepting either CRC32 or LIBCRC32C in Kconfig and preprocessor guards, so crc32c() usage compiles and links on both old and new kernels. --- iscsi-scst/kernel/Kconfig | 2 +- iscsi-scst/kernel/digest.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/iscsi-scst/kernel/Kconfig b/iscsi-scst/kernel/Kconfig index c7651bcad..4c6939dd3 100644 --- a/iscsi-scst/kernel/Kconfig +++ b/iscsi-scst/kernel/Kconfig @@ -1,6 +1,6 @@ config SCST_ISCSI tristate "ISCSI Target" - depends on SCST && INET && LIBCRC32C + depends on SCST && INET && (LIBCRC32C || CRC32) default SCST help ISCSI target driver for SCST. The iSCSI protocol has been defined in diff --git a/iscsi-scst/kernel/digest.c b/iscsi-scst/kernel/digest.c index 37796b577..577605194 100644 --- a/iscsi-scst/kernel/digest.c +++ b/iscsi-scst/kernel/digest.c @@ -26,7 +26,8 @@ void digest_alg_available(int *val) { -#if defined(CONFIG_LIBCRC32C_MODULE) || defined(CONFIG_LIBCRC32C) +#if defined(CONFIG_LIBCRC32C_MODULE) || defined(CONFIG_LIBCRC32C) || \ + defined(CONFIG_CRC32_MODULE) || defined(CONFIG_CRC32) int crc32c = 1; #else int crc32c = 0; @@ -34,7 +35,7 @@ void digest_alg_available(int *val) if ((*val & DIGEST_CRC32C) && !crc32c) { PRINT_ERROR("CRC32C digest algorithm not available in kernel"); - *val |= ~DIGEST_CRC32C; + *val &= ~DIGEST_CRC32C; } } @@ -65,7 +66,8 @@ static __be32 evaluate_crc32_from_sg(struct scatterlist *sg, int nbytes, uint32_ } #endif -#if defined(CONFIG_LIBCRC32C_MODULE) || defined(CONFIG_LIBCRC32C) +#if defined(CONFIG_LIBCRC32C_MODULE) || defined(CONFIG_LIBCRC32C) || \ + defined(CONFIG_CRC32_MODULE) || defined(CONFIG_CRC32) { int pad_bytes = ((nbytes + 3) & -4) - nbytes;