[SOLVED] Proxmox 9 - BTRFS - crc32c-intel vs crc32c-lib checksum algorithm

piknew

Member
Sep 2, 2022
5
1
8
Hello, I would like to describe issue with crc32c algorithm. I will be clear - I am not sure if this is Proxmox kernel issue or generally upstream for distro (Debian 13?).

The case is about kernel 6.17.9-1-pve. When BTRFS filesystem is mounted there is a basic information about parameters printed in kernel log, one of them is crc32c algorithm/engine. I am using only Intel processors on my machines.

So, I see:

Feb 17 22:40:46 pve kernel: [ 9.011260] BTRFS info (device nvme0n1p2): using crc32c (crc32c-lib) checksum algorithm
Feb 17 22:40:46 pve kernel: [ 10.439427] BTRFS info (device sda): using crc32c (crc32c-lib) checksum algorithm
Feb 19 00:10:47 pve kernel: [ 8.987190] BTRFS info (device nvme0n1p2): using crc32c (crc32c-lib) checksum algorithm
Feb 19 00:10:47 pve kernel: [ 10.401910] BTRFS info (device sda): using crc32c (crc32c-lib) checksum algorithm
Feb 20 19:15:48 pve kernel: [ 9.258162] BTRFS info (device nvme0n1p2): using crc32c (crc32c-lib) checksum algorithm
Feb 20 19:15:48 pve kernel: [ 10.680600] BTRFS info (device sda): using crc32c (crc32c-lib) checksum algorithm

So, it is not using HW crc32c-intel.

But... I had the same issue with "pure debian" (13). On kernel 6.17.13+deb13-amd64 which was provided as trixie-backports - there was exactly the same issue:

[root@PKCHECKER ~]# cat /var/log/kernel_2026-02-*.log | grep crc32c
Feb 17 20:44:52 PKCHECKER kernel: [ 11.894434] BTRFS info (device mmcblk0p2): using crc32c (crc32c-lib) checksum algorithm
Feb 19 00:17:57 PKCHECKER kernel: [ 11.864156] BTRFS info (device mmcblk0p2): using crc32c (crc32c-lib) checksum algorithm
Feb 20 22:16:22 PKCHECKER kernel: [ 11.855141] BTRFS info (device mmcblk0p2): using crc32c (crc32c-intel) checksum algorithm

Today (20th of February) I have set "classic" kernel (native for Debian trixie): 6.12.63+deb13-amd64. As you can see BTRFS started using crc32c-intel again. With a little help of AI... - it seems module is not available due to some changes in build parameters (defaults?).
 
The fix should be straightforward — just enabling CONFIG_CRC_OPTIMIZATIONS=y in the kernel config. This affects not just BTRFS but also ext4, f2fs, and iSCSI, all of which were https://patchwork.kernel.org/project/linux-crypto/cover/20241025191454.72616-1-ebiggers@kernel.org/.

On your 6.17 system, run:

Code:
grep CRC_OPTIMIZATIONS /boot/config-$(uname -r)

my system shows :
Code:
Linux proxmox01 6.17.9-1-pve #1 SMP PREEMPT_DYNAMIC PMX 6.17.9-1 (2026-01-12T16:25Z) x86_64

root@proxmox01:~# grep CRC_OPTIMIZATIONS /boot/config-$(uname -r)
CONFIG_CRC_OPTIMIZATIONS=y
root@proxmox01:~#

If the output is # CONFIG_CRC_OPTIMIZATIONS is not set or empty, that confirms the root cause. Share that output in your bug report, it makes the fix obvious for the maintainers.

My recommendation: stick with kernel 6.12/6.14 and file the bug. This is a packaging oversight that the kernel maintainers should fix in their next build.

If you really want to do it yourself, the rough process on Debian/Proxmox is:

# Install build dependencies
apt install build-essential libncurses-dev flex bison libssl-dev libelf-dev bc dwarves

# Get the kernel source matching your version
apt source linux

# Copy the current (broken) config as a starting point
cp /boot/config-$(uname -r) .config

# Enable the missing option
scripts/config --enable CRC_OPTIMIZATIONS

# Update config consistency
make olddefconfig

# Build (this takes a long time)
make -j$(nproc) bindeb-pkg

# Install the resulting .deb packages
dpkg -i ../linux-image-*.deb ../linux-headers-*.deb

For Proxmox specifically, they have their own kernel build system in a git repo (pve-kernel), so the "proper" way would be to patch their config and rebuild using their tooling.

Before you do any of that, verify the issue first.

The Proxmox/Debian kernel maintainers need to add CONFIG_CRC_OPTIMIZATIONS=y to their kernel config. This is a one-line fix on their side. File bugs at:
- Proxmox: https://bugzilla.proxmox.com/ (component: kernel)
- Debian: reportbug linux against the trixie-backports kernel
This is the correct long-term fix, you shouldn't have to recompile the kernel yourself for a missing config default.
 
Last edited:
Actually my system also shows:

Code:
[root@pve ~]# grep CRC_OPTIMIZATIONS /boot/config-$(uname -r)
CONFIG_CRC_OPTIMIZATIONS=y
[root@pve ~]#

But the BTRFS is still not loading crc32c-intel. Which is not availble with 6.17 on proxmox (and was also not available on 6.17 from trixie-backports).

1771629297219.png