mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-26 16:12:34 +00:00
f3353a5e85
[BUG] Since e2fsprog 1.47, even with a newly created empty ext4 filesystem, btrfs-convert would result an fs that btrfs-check would complain: # mkfs.ext4 -F test.img # btrfs-convert test.img # btrfs-check test.img Opening filesystem to check... Checking filesystem on test.img UUID: e45da158-8967-4e4d-9c9f-66b0d127dbce [1/7] checking root items [2/7] checking extents [3/7] checking free space cache [4/7] checking fs roots root 5 inode 266 errors 2000, link count wrong ERROR: errors found in fs roots found 26333184 bytes used, error(s) found <<< total csum bytes: 25540 total tree bytes: 180224 total fs tree bytes: 49152 total extent tree bytes: 16384 btree space waste bytes: 145423 file data blocks allocated: 33947648 referenced 26284032 [CAUSE] Ext4 has a new compat feature, COMPAT_ORPHAN_FILE, as a better way to track all the orphan inodes. This new feature would create a new special inode for this purpose, and such orphan file inode would not be reachable from any other inode, but only from super block. Unfortunately btrfs-convert only skip ext2 known special inodes, not the newer one. [FIX] According to the kernel document, we can locate the orphan file inode using ext2 super block s_orphan_file_inum, and skip it for btrfs-convert. And such skip would only happen if we have the definition of EXT4_FEATURE_COMPAT_ORPHAN_FILE, to be compatible with older e2fsprogs. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> |
||
---|---|---|
.. | ||
common.c | ||
common.h | ||
main.c | ||
Makefile | ||
source-ext2.c | ||
source-ext2.h | ||
source-fs.c | ||
source-fs.h | ||
source-reiserfs.c | ||
source-reiserfs.h |