
Hi all,
It looks like after a certain amount of data has been written that all hell breaks loose with the ext4 filesystem.
In my case, I have the following files on a 64G USB thumb drive with two partitions, a small FAT partition with the rest of the space dedicated to ext4 created using mkfs.ext4 /dev/sdg2
total 477632 -rwxr-xr-x 1 root root 152777216 Jul 23 18:11 Image drwx------ 2 root root 16384 Jul 23 18:10 lost+found -rwxr-xr-x 1 root root 90706976 Dec 31 1969 test.64 -rwxr-xr-x 1 root root 152777216 Dec 31 1969 test.img -rwxr-xr-x 1 root root 50 Dec 31 1969 test.txt -rwxr-xr-x 1 root root 1841408 Jul 23 18:12 u-boot-octeon_ebb7304.bin -rwxr-xr-x 1 root root 90706976 Jul 23 18:11 vmlinux.64
Everything is fine until I wrote the file test.64, which is basically a copy of vmlinux.64.
The first few files were written using my host Linux system, namely Image, u- boot-octeon_ebb7304.bin and vmlinux.64.
From within U-Boot I performed the following commands:
# ext4load usb 0:2 $loadaddr Image # ext4write usb 0:2 $fileaddr /test.img $filesize # tftpboot $loadaddr test.txt # ext4write usb 0:2 $fileaddr /test.txt $filesize # ext4load usb 0:2 $loadaddr vmlinux.64 # ext4write usb 0:2 $fileaddr /test.64 $filesize
Everything is fine on the drive until I write test.64. At this point, I get a huge list of errors:
# fsck.ext4 -v -n /dev/sdg2 e2fsck 1.42.11 (09-Jul-2014) Group descriptor 0 has invalid unused inodes count 57374. Fix? no
/dev/sdg2 contains a file system with errors, check forced. Pass 1: Checking inodes, blocks, and sizes Deleted inode 130913 has zero dtime. Fix? no
Inode 130915 is in use, but has dtime set. Fix? no
Inode 130915 has imagic flag set. Clear? no
Inode 130915 has a extra size (8223) which is invalid Fix? no
Inode 130916 is in use, but has dtime set. Fix? no
Inode 130916 has imagic flag set. Clear? no
Inode 130916 has a extra size (8223) which is invalid Fix? no
... Illegal block #11 (2435760161) in inode 131070. IGNORED. Illegal indirect block (4026556192) in inode 131070. IGNORED. Illegal double indirect block (2433138721) in inode 131070. IGNORED. Illegal triple indirect block (2434195456) in inode 131070. IGNORED. Error while iterating over blocks in inode 131070: Illegal triply indirect block found
and many many more errors.
Note that I am using the very latest ext4 code from the master branch. This is not a USB problem because I can reproduce this problem with an SD card. This problem also occurs on two different platforms, one being aarch64 little endian and the other being MIPS64 big endian. The filesystem code is identical since the latest code has been backported to our older MIPS bootloader.
My guess is that all hell is breaking loose when a file spans multiple block groups.
-Aaron Williams
On Thursday, July 19, 2018 7:35:46 PM PDT Aaron Williams wrote:
Hi all,
I am sometimes seeing issues when using ext4write where fsck later complains
that the group descriptor has an invalid number of unused
inodes. Is this a known problem?
Also, I think the assert(offset == sizeof(*desc)); in ext4fs_checksum_update()
is invalid since with ext4 the descriptor is
larger than the offset. When debugging was enabled I'd always hit this assert.
Also, in ext4fs_write, the debug statement should say blocks and not bytes.
-Aaron
-- Aaron Williams Senior Software Engineer Cavium, Inc. (408) 943-7198 (510) 789-8988 (cell) _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot