ext4: fix extent status tree regression for file systems > 512GB
This fixes a regression introduced by commit f7fec032. 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: NMarkus Trippelsdorf <markus@trippelsdorf.de> Verified-by: NMarkus Trippelsdorf <markus@trippelsdorf.de> Reported-by: NDave Jones <davej@redhat.com> Verified-by: NDave Jones <davej@redhat.com> Cc: Zheng Liu <gnehzuil.liu@gmail.com> Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
Showing
想要评论请 注册 或 登录