adilger@clusterfs.com
2007-Feb-06 16:51 UTC
[Lustre-devel] [Bug 11324] LDISKFS-fs error (device sdc): ldiskfs_free_blocks
Please don''t reply to lustre-devel. Instead, comment in Bugzilla by using the following link: https://bugzilla.lustre.org/show_bug.cgi?id=11324 (From update of attachment 9373)>+static int __ext4_ext_check_header(const char *function, struct inode *inode, >+ struct ext4_extent_header *eh, >+ int depth) >+{ >+ const char *error_msg = NULL; >+ int max = 0; >+ >+ if (unlikely(eh->eh_magic != EXT4_EXT_MAGIC)) { >+ error_msg = "invalid magic"; >+ goto corrupted; >+ } >+ if (unlikely(le16_to_cpu(eh->eh_depth) != depth)) { >+ error_msg = "unexpected eh_depth"; >+ goto corrupted; >+ }Could we change this to allow eh->eh_depth <= depth? That would allow e2fsck more leeway in fixing up extent corruptions, instead of having to do a full tree rebalance.>+ max = ext4_ext_max_entries(inode, depth); >+ if (unlikely(le16_to_cpu(eh->eh_max) > max)) { >+ error_msg = "too large eh_max"; >+ goto corrupted; >+ }In e2fsck I also check if eh->eh_max < max - 2. This allows up to 2 items at the end of the block for e.g. ext3_extent_tail to hold inum+gen+checksum, and possibly another extension.