Hi Sheng, Can we have a list of tests to check the expected behavior of given inject.f2fs followed by fsck.f2fs?
Thanks, On 07/04, Sheng Yong wrote: > 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. The available members of each part can be listed by > executing command like: > inject.f2fs --sb 0 --help > > [...] > [mb]: > magic: inject magic number > s_stop_reason: inject s_stop_reason array selected by --idx <index> > s_errors: inject s_errors array selected by --idx <index> > devs.path: inject path in devs array selected by --idx <index> specified > by --str <string> > > More injection fields are still work-in-progress. The TODO list includes: > * sb: features > * cp: fsync dnodes > * inode: extent, extra attrs, xattr > * data: fsverify? > * other fields which is needed to verify fsck > > v3: > * patch 3, fix error handling of inject sb->devs.path > * patch 3, do not ASSERT devs.path when inject is executed > * patch 3, allow inject to execute if image is umounted unclean > * patch 9, check whether blkaddr is valid before reading dentry block > * add is_digits and strtol entptr check when parsing numeric options > > v2: > * change print format of s_errors > * add write_raw_cp_blocks to write the first & last cp blocks directly > to avoid updating ckpt_flags by write_checkpoint > * call update_block if i_inode_checksum is injected to avoid updating > i_inode_checksum by update_inode > * go through all dentry blocks to find the target dir entry > > Examples: > > 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:1 > > 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 | 6 + > fsck/inject.c | 1104 +++++++++++++++++++++++++++++++++++++++++++++ > fsck/inject.h | 41 ++ > fsck/main.c | 38 +- > fsck/mount.c | 30 +- > include/f2fs_fs.h | 2 + > man/Makefile.am | 2 +- > man/inject.f2fs.8 | 225 +++++++++ > 9 files changed, 1447 insertions(+), 6 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