mbox series

[f2fs-dev,RFC,00/10] f2fs-tools: introduce inject.f2fs

Message ID 20240624135532.3330136-1-shengyong@oppo.com (mailing list archive)
Headers show
Series f2fs-tools: introduce inject.f2fs | expand

Message

Sheng Yong June 24, 2024, 1:55 p.m. UTC
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