On Fri, Sep 22, 2023 at 01:39:15PM +0800, zhangshida wrote: > From: Shida Zhang <zhangshida@xxxxxxxxxx> > > [ Upstream commit 7fda67e8c3ab6069f75888f67958a6d30454a9f6 ] > > With the configuration PAGE_SIZE 64k and filesystem blocksize 64k, > a problem occurred when more than 13 million files were directly created > under a directory: > > EXT4-fs error (device xx): ext4_dx_csum_set:492: inode #xxxx: comm xxxxx: dir seems corrupt? Run e2fsck -D. > EXT4-fs error (device xx): ext4_dx_csum_verify:463: inode #xxxx: comm xxxxx: dir seems corrupt? Run e2fsck -D. > EXT4-fs error (device xx): dx_probe:856: inode #xxxx: block 8188: comm xxxxx: Directory index failed checksum > > When enough files are created, the fake_dirent->reclen will be 0xffff. > it doesn't equal to the blocksize 65536, i.e. 0x10000. > > But it is not the same condition when blocksize equals to 4k. > when enough files are created, the fake_dirent->reclen will be 0x1000. > it equals to the blocksize 4k, i.e. 0x1000. > > The problem seems to be related to the limitation of the 16-bit field > when the blocksize is set to 64k. > To address this, helpers like ext4_rec_len_{from,to}_disk has already > been introduced to complete the conversion between the encoded and the > plain form of rec_len. > > So fix this one by using the helper, and all the other in this file too. > > Cc: stable@xxxxxxxxxx > Fixes: dbe89444042a ("ext4: Calculate and verify checksums for htree nodes") > Suggested-by: Andreas Dilger <adilger@xxxxxxxxx> > Suggested-by: Darrick J. Wong <djwong@xxxxxxxxxx> > Signed-off-by: Shida Zhang <zhangshida@xxxxxxxxxx> > Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx> > Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> > Link: https://lore.kernel.org/r/20230803060938.1929759-1-zhangshida@xxxxxxxxxx > Signed-off-by: Theodore Ts'o <tytso@xxxxxxx> > Signed-off-by: Shida Zhang <zhangshida@xxxxxxxxxx> > --- > fs/ext4/namei.c | 26 +++++++++++++++----------- > 1 file changed, 15 insertions(+), 11 deletions(-) What stable tree(s) are you asking this to be backported to? thanks, greg k-h