On Wed, Jan 17, 2018 at 01:17:07PM +0800, Qu Wenruo wrote: > Sebastian reported a filesystem corruption where DIR_INDEX has wrong > filetype against INODE_ITEM. > > Lowmem mode normally handles such problem by checking DIR_INDEX, > DIR_ITEM and INODE_REF/INODE_ITEM to determine the correct file type. > In such case, lowmem mode fsck can get the correct filetype. > > When fixing the problem, lowmem mode will try to re-insert correct > (DIR_INDEX, DIR_ITEM, INODE_REF) tuple, and if existing correct > DIR_ITEM and INODE_REF is found, btrfs_link() will just skip and only > insert correct DIR_INDEX. > > However, when inserting correct DIR_INDEX, due to extra DIR_INDEX > validation, incorrect one will be skiped and correct one will be > inserted after invalid one. > > This leads to lowmem mode repair to create duplicated DIR_INDEX. > > This patch will fix it by removing the whole (DIR_INDEX, DIR_ITEM, > INODE_REF) tuple before inserting correct tuple. > And the removing part, btrfs_unlink(), will be enhanced to handle > incorrect tuple member more robust. > > Please note that, due a bug in lowmem mode repair, btrfs check will > still show "error(s) found in fs tree" even repair is done successfully. > > And test case for this repair still needs extra work for original mode > to support such repair, or test case won't pass original mode test. > > Qu Wenruo (3): > btrfs-progs: lowmem fsck: Remove corupted link before re-add correct > link > btrfs-progs: dir-item: Allow dir item and dir index lookup to ignore > found problem > btrfs-progs: dir-item: Make btrfs_delete_one_dir_name more robust to > handle corrupted name len Added to devel, thanks. The code has moved so I applied some diff hunks manually. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
