And this one should limit the checks to freshly-read block only. Signed-off-by: Thiemo Nagel <thiemo.nagel@xxxxxxxxx>
--- download/linux-2.6.29-rc7-vanilla-extcheck/fs/ext4/inode.c 2009-03-12 16:44:19.000000000 +0100 +++ linux-2.6.29-rc7/fs/ext4/inode.c 2009-03-12 16:40:28.000000000 +0100 @@ -443,12 +443,20 @@ if (!p->key) goto no_block; while (--depth) { - bh = sb_bread(sb, le32_to_cpu(p->key)); - if (!bh) - goto failure; - if (ext4_check_indirect_blockref(inode, bh)) + bh = sb_getblk(sb, le32_to_cpu(p->key)); + if (unlikely(!bh)) goto failure; + if (!bh_uptodate_or_lock(bh)) { + if (bh_submit_read(bh) < 0) { + put_bh(bh); + goto failure; + } + /* validate the extent entries */ + if (ext4_check_indirect_blockref(inode, bh)) + goto failure; + } + add_chain(++p, bh, (__le32 *)bh->b_data + *++offsets); /* Reader: end */ if (!p->key)