This patchset introduces a new tool inject.f2fs to modify metadata or data (directory entry) of f2fs image offline flexibly.
With inject.f2fs, it is easier to generate a corrupted f2fs image, which can help verify fsck or reproduce userspace behaviors of some a fault. If option `--dry-run' is used, nothing really gets changed, and that could be used to get the value of a specified field. inject.f2fs allows injecting some members in sb, cp, nat, sit, ssa, node and dentry for now. For example, Inject sb's magic ================= inject.f2fs --sb 0 --mb magic --val 0x12345 $DEV Info: inject sb auto Info: inject member magic Info: inject value 74565 : 0x12345 [...] Info: inject magic of sb 1: 0xf2f52010 -> 0x12345 [update_superblock: 890] Info: Done to update superblock Inject cp's cur_data_segno ========================== inject.f2fs --cp 0 --mb cur_data_segno --idx 1 --val 0x12345 $DEV Info: inject cp pack auto Info: inject member cur_data_segno Info: inject slot index 1 Info: inject value 74565 : 0x12345 [...] Info: inject cur_data_segno[1] of cp 1: 0x4 -> 0x12345 Info: write_checkpoint() cur_cp:2 Inject nat's ino ================ inject.f2fs --nat 0 --mb ino --nid $INO --val 0x12345 $DEV Info: inject nat pack auto Info: inject nid 4 : 0x4 Info: inject member ino Info: inject value 74565 : 0x12345 [...] Info: inject nat entry ino of nid 4 in pack 1: 4 -> 74565 Inject ssa's nid ================ inject.f2fs --ssa --blk $BLK --mb nid --val 0x12345 $DEV Info: inject ssa Info: inject blkaddr 7511 : 0x1d57 Info: inject member nid Info: inject value 74565 : 0x12345 [...] Info: auto idx = 343 Info: inject summary entry nid of block 0x1d57: 0x4 -> 0x12345 Inject inode's i_addr ===================== inject.f2fs --node --nid $INO --mb i_addr --idx 100 --val 0x12345 $DEV Info: inject node Info: inject nid 4 : 0x4 Info: inject member i_addr Info: inject slot index 100 Info: inject value 74565 : 0x12345 [...] Info: inject inode i_addr[100] of nid 4: 0x20864 -> 0x12345 Inject inode's dentry hash ========================== inject.f2fs --dent --nid $INO --mb d_hash --val 0x12345 $DEV Info: inject dentry Info: inject nid 4 : 0x4 Info: inject member d_hash Info: inject value 74565 : 0x12345 [..] Info: inject dentry d_hash of nid 4: 0xc77b804e -> 0x12345 Sheng Yong (10): f2fs-tools: export is_digits inject.f2fs: introduce inject.f2fs inject.f2fs: add sb injection inject.f2fs: add cp injection inject.f2fs: add nat injection inject.f2fs: add sit injection inject.f2fs: add ssa injection inject.f2fs: add node injection inject.f2fs: add dentry injection man: add inject.f2fs man page fsck/Makefile.am | 5 +- fsck/fsck.h | 5 + fsck/inject.c | 1049 +++++++++++++++++++++++++++++++++++++++++++++ fsck/inject.h | 41 ++ fsck/main.c | 38 +- fsck/mount.c | 6 + include/f2fs_fs.h | 2 + man/Makefile.am | 2 +- man/inject.f2fs.8 | 225 ++++++++++ 9 files changed, 1369 insertions(+), 4 deletions(-) create mode 100644 fsck/inject.c create mode 100644 fsck/inject.h create mode 100644 man/inject.f2fs.8 -- 2.40.1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel