On 2023/5/23 18:40, Chunhai Guo wrote:
find_fsync_inode() detect the looped node chain by comparing the loop
counter with free blocks. While it may take tens of seconds to quit when
the free blocks are large enough. We can use Floyd's cycle detection
algorithm to make the detection more efficient, and fix the issue by
filling a NULL address in the last node of the chain.
Below is the log we encounter on a 256GB UFS storage and it takes about
25 seconds to detect looped node chain. After changing the algorithm, it
takes about 20ms to finish the same job.
[ 10.822904] fsck.f2fs: Info: version timestamp cur: 17, prev: 430
[ 10.822949] fsck.f2fs: [update_superblock: 762] Info: Done to
update superblock
[ 10.822953] fsck.f2fs: Info: superblock features = 1499 :
encrypt verity extra_attr project_quota quota_ino casefold
[ 10.822956] fsck.f2fs: Info: superblock encrypt level = 0, salt =
00000000000000000000000000000000
[ 10.822960] fsck.f2fs: Info: total FS sectors = 59249811 (231444
MB)
[ 35.852827] fsck.f2fs: detect looped node chain,
blkaddr:1114802, next:1114803
[ 35.852842] fsck.f2fs: [f2fs_do_mount:3846] record_fsync_data
failed
[ 35.856106] fsck.f2fs: fsck.f2fs terminated by exit(255)
Signed-off-by: Chunhai Guo <guochun...@vivo.com>
Reviewed-by: Chao Yu <c...@kernel.org>
Thanks,
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel