From a4fdf09414e04e9ecb995aa0af2f525d335987ae Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 22 Dec 2010 13:53:02 -0500 Subject: [PATCH] libext2fs: Don't use the extended rec_len encoding for standard file systems If the file system has a blocksize less than 64k, then don't use the extended rec_len encoding, to be consistent with what the kernel will do. Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/dir_iterate.c | 4 +++- tests/f_dup3/expect.1 | 4 ++-- tests/f_dupfsblks/expect.1 | 11 +++++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/ext2fs/dir_iterate.c b/lib/ext2fs/dir_iterate.c index 3b9c57c4..124862ea 100644 --- a/lib/ext2fs/dir_iterate.c +++ b/lib/ext2fs/dir_iterate.c @@ -29,7 +29,9 @@ errcode_t ext2fs_get_rec_len(ext2_filsys fs, { unsigned int len = dirent->rec_len; - if (len == EXT4_MAX_REC_LEN || len == 0) + if (fs->blocksize < 65536) + *rec_len = len; + else if (len == EXT4_MAX_REC_LEN || len == 0) *rec_len = fs->blocksize; else *rec_len = (len & 65532) | ((len & 3) << 16); diff --git a/tests/f_dup3/expect.1 b/tests/f_dup3/expect.1 index 9b1a28fa..eab75a8d 100644 --- a/tests/f_dup3/expect.1 +++ b/tests/f_dup3/expect.1 @@ -24,8 +24,8 @@ File /e2fsck (inode #16, mod time Tue Sep 21 04:32:22 1993) Clone multiply-claimed blocks? yes Pass 2: Checking directory structure -Entry '' in /lost+found (11) has invalid inode #: 24. -Clear? yes +Directory inode 11, block #12, offset 0: directory corrupted +Salvage? yes Pass 3: Checking directory connectivity Pass 4: Checking reference counts diff --git a/tests/f_dupfsblks/expect.1 b/tests/f_dupfsblks/expect.1 index aba2f523..3f701091 100644 --- a/tests/f_dupfsblks/expect.1 +++ b/tests/f_dupfsblks/expect.1 @@ -35,11 +35,14 @@ File /quux (inode #14, mod time Thu Aug 5 07:18:09 1999) Clone multiply-claimed blocks? yes Pass 2: Checking directory structure -Entry '' in ??? (12) has invalid inode #: 4194303. -Clear? yes +Directory inode 12, block #1, offset 0: directory corrupted +Salvage? yes -Entry 'M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?M-^?' in ??? (12) has invalid inode #: 16383. -Clear? yes +Directory inode 12, block #2, offset 0: directory corrupted +Salvage? yes + +Directory inode 12, block #3, offset 0: directory corrupted +Salvage? yes Entry '' in ??? (12) has a zero-length name. Clear? yes