Got the root cause. There are in fact two problems involved: 1) Your initramfs has inline extent mixed with regular extent This is not recommended behavior, but kernel can handle it without problem, thus it's not a big deal either. If you defrag the range [0, 4K) of the initramfs, grub should be able to handle it without problem. But normally, one file should only have one inline extent and no more other extents. Or all regular extents and no inline. 2) GRUB's bug In grub's inline extent handling. After reading one inline extent, it doesn't jump to next sector aligned position. This makes next iteration to try to read non-exist extent. This means it can't handle the following cases: - Mixed inline + regular extents - NO_HOLES feature I'll craft a hot fix for the bug, hoping to address the bug with minimal code change. As the btrfs infrastructure of GRUB is really a mess, I don't want to waste any of my time to fix codes which may be fully reworked.