Subject: bug#34162: linux-libre 4.20+ fails to mount ext4 on aarch64

From: Ludovic Courtès <[email-masked]>
Date: Fri, 25 Jan 2019 09:59:09 +0100

Hi,

Vagrant Cascadian <[email-masked]> skribis:

> On 2019-01-23, Ludovic Courtès wrote:
>> Vagrant Cascadian <[email-masked]> skribis:
>>> After upgrading to linux-libre 4.20, and again tested with 4.20.3, an
>>> aarch64 system failed to boot (using 4.19.10 worked fine):
>>>
>>> [    3.692351] device-mapper: ioctl: 4.39.0-ioctl (2018-04-03) initialised: [email-masked]
>>> ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file while determining whether /dev/sda6 is mounted.
>>> /dev/sda6: clean, 596262/6553600 files, 7663147/26214400 blocks
>>> [    3.948786] EXT4-fs (sda6): Cannot load crc32c driver.
>>> ERROR: In procedure mount:
>>> In procedure mount: No such file or directory
> ...
>>> Workaround or fix was to add to config.scm:
>>>
>>> (initrd (append (list "crc32c_generic" ... ) %base-initrd-modules))
>>
>> There are potentially two issues here:
>>
>>   1. Why wasn’t crc32c_generic.ko automatically pulled in by the initrd
>>      build code?  Isn’t it a dependency of ext4.ko?
>
> It is not a hard dependency, no. It's an optional feature only needed if
> certain ext4 features are enabled on the filesystem (maybe metadata_csum
> in this case?). So it's listed as a MODULE_SOFTDEP of ext4:
>
>   fs/ext4/super.c:MODULE_SOFTDEP("pre: crc32c");

Interesting.  Should we add support for soft dependencies in (gnu build
linux-modules), and pull in soft dependencies in the initrd?  Currently
we only do that for hard dependencies.

That wouldn’t help in this case since ext4 is built-in.  So my guess is
that for this particular case we should probably just change the AArch64
kernel config so it matches the x86 ones.

Thoughts?

Thanks,
Ludo’.