On Sat, Mar 1, 2014 at 9:20 PM, WorMzy Tykashi <wormzy.tyka...@gmail.com> wrote: > On 27 February 2014 12:43, Filipe David Manana <fdman...@gmail.com> wrote: >> On Wed, Feb 26, 2014 at 11:26 PM, WorMzy Tykashi >> <wormzy.tyka...@gmail.com> wrote: >>> >>> Hi, >> >> Hi >> > > Hi again, > > Sorry for the delay in replying, I've not had the time to gather my > thoughts and write a coherent reply. >>> >>> Ever since this patch was committed (git ref >>> 0b947aff1599afbbd2ec07ada87b05af0f94cf10), the btrfs module >>> (presumably intentionally) no longer depends on the crc32c module. >> >> To be more clear, it no longer depends on LIBCRC32C (which is just a >> convenience library to access crypto's crc32c). >> It still depends on CRYPTO and CRYPTO_CRC32C (which is what LIBCRC32C uses). >> > > Thanks for clarifying this, I assumed that libcrc32c and crc32c were > aliases of the same module. I can see from the modinfo input that > they're not. > >>> However, this means that this module is not pulled in during initrd >>> creation (at least using mkinitcpio on Arch Linux), and as a result, >>> the btrfs module cannot be loaded. Instead modprobe complains with: >>> "Unknown symbol in module, or unknown parameter (see dmesg)". > > I've found that mkinitcpio automatically adds crc32c to the initrd if > lib32crc is needed, so before, even though libcrc32c wasn't actually > needed, btrfs' dependency on it caused mkinitcpio to include the > actual dependency (crc32c) in the image. > > https://projects.archlinux.org/mkinitcpio.git/tree/functions?id=v16#n398 > > Now that the dependency is gone, and nothing else necessary to mount > my root filesystem depends on libcrc32c, crc32c is no longer being > added to the initrd. > >> >> That is weird. On debian creating the initrd via kernel's makefile >> (make modules_install && make install) works for me (don't know if it >> uses mkinitcpio or something else). >> > > Debian uses a different tool, but has a similar workaround to the > problem. I found this in the comments... > > /usr/share/initramfs-tools/hook-functions: line 507: > --- > # 'depmod' only looks at symbol dependencies; there is no way for > # modules to declare explicit dependencies through module information, > # so dependencies on e.g. crypto providers are hidden. Until this is > # fixed, we need to handle those hidden dependencies. > hidden_dep_add_modules() > { > local modules= > for dep in "lib/libcrc32c crc32c" "fs/ubifs/ubifs deflate zlib lzo"; do > set -- $dep > if [ -f "${DESTDIR}/lib/modules/${version}/kernel/$1.ko" ]; then > shift > modules="$modules $@" > fi > done > manual_add_modules $modules > } > --- > > This makes sure that, if libcrc32c is needed, crc32c is added too.
You've made great progress finding this. > > Presumably, one or more of the modules being added to your initrd > still needs libcrc32c, which is why you don't experience this problem. Possibly, since libcrc32c is used by xfs and ceph, both of which I have built as modules. Just remembered now, that ext4 for example depends on crypto's crc32c as well but not on libcrc32c (just like btrfs in 3.14) - https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/ext4/Kconfig So it sounds like you could get into the same issue if you build crypto's crc32c as a module and ext4 as a module too. > > >> So crc32c.ko isn't libcrc32c (which is libcrc32c.ko). It's crypto's >> crc32c, and that's a correct module dependency: >> >> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/btrfs/Kconfig?id=refs/tags/v3.14-rc4 >> > > Right, so the problem is actually that btrfs module doesn't depend on > the crc32c module. The crc32c module doesn't export any symbols, so > it's impossible (?) to explicitly depend on it, so initrd creation > tools have had to hack around the problem to make sure that the crc32c > module is still added to initrds when it's needed. > >>> >>> I hope that this information is enough to help you discover the >>> problem. I've tried adding back in the linux/crc32c.h include >>> statements in the affected files, but this hasn't changed the >>> situation, so I guess a full revert would be necessary. Unfortunately >>> I have to sleep now, so I can't do any further investigation tonight. >>> I'll try to find time tomorrow to investigate further. >>> >>> Please let me know if any parts of this message don't make sense, or >>> require further investigation. >> >> So the intention of this patch was to remove calls to libcrc32c, which >> isn't a dependency anymore. Without this patch, you would get linker >> errors when building btrfs unless libcrc32c is built-in (i.e. only >> compiled if CONFIG_LIBCRC32C=y). Several people reported this issue >> and this patch fixed the problem for them, e.g. >> https://lkml.org/lkml/2014/2/1/165 >> >> Another issue that got fixed in 3.14-rc2, but possibly unrelated to >> your issue, is http://www.spinics.net/lists/linux-btrfs/msg31276.html >> >> Can you try 3.14-rc4? Maybe it's some arch specific issue, but >> crc32c.ko (or crc32c-intel.ko) isn't definitely the same as >> libcrc32c.ko. >> >> Hope it helps, thanks. >> > > Thanks. I think I've learnt a lot in the past few days. And I've typed > crc32c so many times that I see it when I close my eyes. > > It's clear that the removal of the libcrc32c module wasn't the direct > cause of this bug, but it did remove the crutch that was stopping > things falling over. > > I guess that initrd creation tools have to adapt to this change, and > include crc32c when btrfs is necessary. > > Unless you can see any flaws in my logic, I'll write a patch for > mkinitcpio and see if the maintainer will include it before 3.14 > proper goes stable, so that not too many Arch users get bitten by this > problem. I guess someone should do the same for debian's > initramfs-tools. Seems ok, but I don't have much expertise in using mkinitcpio and similar tools directly, as I always rely on the kernel's "make install" to figure out everything for me (on debian and ubuntu). Let me know how it goes. Thanks. > >>> Cheers, >>> >>> >>> WorMzy >> >> -- >> Filipe David Manana, >> >> "Reasonable men adapt themselves to the world. >> Unreasonable men adapt the world to themselves. >> That's why all progress depends on unreasonable men." > > Cheers again, > > > WorMzy -- Filipe David Manana, "Reasonable men adapt themselves to the world. Unreasonable men adapt the world to themselves. That's why all progress depends on unreasonable men." -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html