]> git.baikalelectronics.ru Git - kernel.git/commit
ext4: fix extent status tree regression for file systems > 512GB
authorTheodore Ts'o <tytso@mit.edu>
Wed, 27 Feb 2013 19:54:37 +0000 (14:54 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 27 Feb 2013 19:54:37 +0000 (14:54 -0500)
commit8367b60d05732e2f6fd4ffcc3061cacd23463eaa
tree5a13e1be2d9492aef6257c8f29a4fb8d2549a94e
parentd2141009815d04969850ea42a08a844774ab8d21
ext4: fix extent status tree regression for file systems > 512GB

This fixes a regression introduced by commit 36645727d2839.  The
problem was that the extents status flags caused us to mask out block
numbers smaller than 2**28 blocks.  Since we didn't test with file
systems smaller than 512GB, we didn't notice this during the
development cycle.

A typical failure looks like this:

EXT4-fs error (device sdb1): htree_dirblock_to_tree:919: inode #172235804: block
152052301: comm ls: bad entry in directory: rec_len is smaller than minimal -
offset=0(0), inode=0, rec_len=0, name_len=0

... where 'debugfs -R "stat <172235804>" /dev/sdb1' reports that the
inode has block number 688923213.  When viewed in hex, block number
152052301 (from the syslog) is 0x910224D, while block number 688923213
is 0x2910224D.  Note the missing "0x20000000" in the block number.

Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Verified-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Reported-by: Dave Jones <davej@redhat.com>
Verified-by: Dave Jones <davej@redhat.com>
Cc: Zheng Liu <gnehzuil.liu@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/extents_status.h