On Fri, Jul 26, 2024 at 11:33:42AM +0800, Ma Xinjian wrote: > Hi > > Using upstream kernel, the symlink does not get corrupted in the test of generic/754 on xfs. > But the check of xfs_repair still fails with "mismatch between format (2) and size (297) in symlink ino 139". > Does xfs_repair need to make corresponding modifications to the upstream kernel fix commit? > Could anyone help take a look? https://lore.kernel.org/linux-xfs/171988123583.2012930.12584359346392356391.stgit@frogsfrogsfrogs/ > Package Version: > kernel: 6.10.0 > xfs_repair: 6.9.0 > > Results: > ``` > # ./check generic/754 > FSTYP -- xfs (non-debug) > PLATFORM -- Linux/x86_64 localhost 6.10.0 #2 SMP PREEMPT_DYNAMIC Wed Jul 24 05:36:54 EDT 2024 > MKFS_OPTIONS -- -f /dev/loop1 > MOUNT_OPTIONS -- -o context=system_u:object_r:root_t:s0 /dev/loop1 /mnt/xfstests/scratch > > generic/754 _check_xfs_filesystem: filesystem on /dev/loop1 is inconsistent (r) > (see /root/xfstests-dev/results//generic/754.full for details) > > > HINT: You _MAY_ be missing kernel fix: > XXXXXXXXXXXXX xfs: allow symlinks with short remote targets I guess it's time to fix the kernel commit id and add a placeholder for the xfs_repair patch too. --D > Ran: generic/754 > Failures: generic/754 > Failed 1 of 1 tests > ``` > > Output of "xfs_repair -n": > ``` > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > - found root inode chunk > Phase 3 - for each AG... > - scan (but don't clear) agi unlinked lists... > - process known inodes and perform inode discovery... > - agno = 0 > mismatch between format (2) and size (297) in symlink ino 139 > bad data fork in symlink 139 > would have cleared inode 139 > mismatch between format (2) and size (330) in symlink ino 140 > bad data fork in symlink 140 > would have cleared inode 140 > - agno = 1 > - agno = 2 > - agno = 3 > - process newly discovered inodes... > Phase 4 - check for duplicate blocks... > - setting up duplicate extent list... > unknown block state, ag 0, blocks 14-15 > - check for inodes claiming duplicate blocks... > - agno = 1 > - agno = 0 > entry "symlink.288" at block 0 offset 288 in directory inode 128 references free inode 139 > would clear inode number in entry at offset 288... > - agno = 2 > - agno = 3 > entry "symlink.320" at block 0 offset 312 in directory inode 128 references free inode 140 > would clear inode number in entry at offset 312... > mismatch between format (2) and size (297) in symlink ino 139 > bad data fork in symlink 139 > would have cleared inode 139 > mismatch between format (2) and size (330) in symlink ino 140 > bad data fork in symlink 140 > would have cleared inode 140 > No modify flag set, skipping phase 5 > Phase 6 - check inode connectivity... > - traversing filesystem ... > entry "symlink.288" in directory inode 128 points to free inode 139, would junk entry > entry "symlink.320" in directory inode 128 points to free inode 140, would junk entry > bad hash table for directory inode 128 (no data entry): would rebuild > would rebuild directory inode 128 > - traversal finished ... > - moving disconnected inodes to lost+found ... > Phase 7 - verify link counts... > No modify flag set, skipping filesystem flush and exiting. > ``` >