mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-25 23:52:17 +00:00
517ba2d9e5
[BUG] There is a report about failed btrfs-convert, which shows the following error: Create btrfs metadata corrupt leaf: root=5 block=5001931145216 slot=1 ino=89911763, invalid previous key objectid, have 89911762 expect 89911763 leaf 5001931145216 items 336 free space 7 generation 90 owner FS_TREE leaf 5001931145216 flags 0x1(WRITTEN) backref revision 1 fs uuid 8b69f018-37c3-4b30-b859-42ccfcbe2449 chunk uuid 448ce78c-ea41-49f6-99dc-46ad80b93da9 item 0 key (89911762 INODE_REF 3858733) itemoff 16222 itemsize 61 index 171 namelen 51 name: [FILENAME1] item 1 key (89911763 INODE_REF 3858733) itemoff 16161 itemsize 61 index 103 namelen 51 name: [FILENAME2] [CAUSE] When iterating a directory, btrfs-convert would insert the DIR_ITEMs, along with the INODE_REF of that inode. This leads to above stray INODE_REFs, and trigger the tree-checker. This can only happen for large fs, as for most cases we have all these modified tree blocks cached, thus tree-checker won't be triggered. But when the tree block cache is not hit, and we have to read from disk, then such behavior can lead to above tree-checker error. [FIX] Insert a dummy INODE_ITEM for the INODE_REF first, the inode items would be updated when iterating the child inode of the directory. Issue: #731 Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> |
||
---|---|---|
.. | ||
common.h | ||
main.c | ||
mode-common.c | ||
mode-common.h | ||
mode-lowmem.c | ||
mode-lowmem.h | ||
mode-original.h | ||
qgroup-verify.c | ||
qgroup-verify.h | ||
repair.c | ||
repair.h |