rpdom wrote: ↑
Sat Dec 16, 2017 9:29 am
The Pi bootloader doesn't read ext at all. It reads vfat, then loads the Linux kernel which has the full ext4 driver included.
Somewhere else I believe you mentioned the uboot bootloader, which would be an issue with uboot, not the Raspberry Pi.
Issue may have been shared with another boot loader as they usually implement simplified FS drivers (readers). And this can cause problems with journalized ones but mostly after an upgrade of one of the few files needed for boot (those read by the boot loader): Always more reliable than an unjournalized FS like FAT, even with this common boot loaders flaw, but this can be quite surprising.
Other issues on boot loader side can also be linked to how LBA accesses are tuned: To avoid latencies, under OSes, they are usually split in short consecutive LBAs sequences even for files with low fragmentation (this have long been 140 LBAs for Linux usb-storage, always 128 for Windows, for instance ; 1024 for the usual SCSI layer). With block nb very far from what is allowed by a read/write_10 command (accepts up to a u16, so 65535 blocks).
This is where issues can occur with devices like SD/USB whose use-case is to be removable (i.e. only read/written from already started OSes, not some boot loaders): You may thus see problems that managed to pass manufacturers testing if your boot loader can read much more blocks at once because it's FS reader is tuned for boot time performance.
And you'll only see problems when you have files fragments big enough to reach internal device limits (that can be linked to device buffering limits or even firmware mistakes! I've seen a device unable to boot when linux kernel+init rootfs file had fragments over 16MB. With 512b block size, this was a half u16 size... The bug was a s16 bad cast on read_10 parameter in storage controller firmware, thus seing block nb values over 32767 as negative & hanging FW immediately).
The problem is that a storage manufacturer will only clean his own mess if you're able to provide a test able to reproduce the problem, preferably on a standard platform like a Linux PC.