Don't assume that a special device is bogus just because i_blocks is
non-zero. The i_blocks field could get adjusted later, and if this
happens it will confuse the e2fsck_process_bad_inode() in pass 2. In
practice true garbage inodes will have random non-zero in
i_blocks[4..15], so there's no point doing the check for an illegal
i_blocks value.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+2007-03-31 Theodore Tso <tytso@mit.edu>
+
+ * pass1.c (e2fsck_pass1_check_device_inode): Don't assume that a
+ special device is bogus just because i_blocks is non-zero.
+ The i_blocks field could get adjusted later, and if this
+ happens it will confuse the e2fsck_process_bad_inode() in
+ pass 2. In practice true garbage inodes will have random
+ non-zero values in i_blocks[4..15], so there's no point
+ doing the check for an illegal i_blocks value.
+
2007-03-28 Theodore Tso <tytso@mit.edu>
* pass1.c (e2fsck_pass1, check_ext_attr),
int i;
/*
- * If i_blocks is non-zero, or the index flag is set, then
- * this is a bogus device/fifo/socket
+ * If the index flag is set, then this is a bogus
+ * device/fifo/socket
*/
- if ((ext2fs_inode_data_blocks(fs, inode) != 0) ||
- (inode->i_flags & EXT2_INDEX_FL))
+ if (inode->i_flags & EXT2_INDEX_FL)
return 0;
/*