Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ext4: align max orphan file size with e2fsprogs limit

Kernel commit 0a6ce20c1564 ("ext4: verify orphan file size is not too big")
limits the maximum supported orphan file size to 8 << 20.

However, in e2fsprogs, the orphan file size is set to 32–512 filesystem
blocks when creating a filesystem.

With 64k block size, formatting an ext4 fs >32G gives an orphan file bigger
than the kernel allows, so mount prints an error and fails:

EXT4-fs (vdb): orphan file too big: 8650752
EXT4-fs (vdb): mount failed

To prevent this issue and allow previously created 64KB filesystems to
mount, we updates the maximum allowed orphan file size in the kernel to
512 filesystem blocks.

Fixes: 0a6ce20c1564 ("ext4: verify orphan file size is not too big")
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Message-ID: <20251120134233.2994147-1-libaokun@huaweicloud.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@kernel.org

authored by

Baokun Li and committed by
Theodore Ts'o
7c11c56e 39fc6d4d

+3 -1
+3 -1
fs/ext4/orphan.c
··· 8 8 #include "ext4.h" 9 9 #include "ext4_jbd2.h" 10 10 11 + #define EXT4_MAX_ORPHAN_FILE_BLOCKS 512 12 + 11 13 static int ext4_orphan_file_add(handle_t *handle, struct inode *inode) 12 14 { 13 15 int i, j, start; ··· 590 588 * consuming absurd amounts of memory when pinning blocks of orphan 591 589 * file in memory. 592 590 */ 593 - if (inode->i_size > 8 << 20) { 591 + if (inode->i_size > (EXT4_MAX_ORPHAN_FILE_BLOCKS << inode->i_blkbits)) { 594 592 ext4_msg(sb, KERN_ERR, "orphan file too big: %llu", 595 593 (unsigned long long)inode->i_size); 596 594 ret = -EFSCORRUPTED;