On 2025/6/10 20:37, Sheng Yong wrote:
From: Sheng Yong <shengyo...@xiaomi.com>

This patch adds new members in inject_node to inject inode:
  * i_ext.fofs: extent fofs
  * i_ext.blk_addr: extent blk_addr
  * i_ext.len: extent len
  * i_inline_xattr_size: inline xattr size
  * i_compr_blocks: compression blocks

Signed-off-by: Sheng Yong <shengyo...@xiaomi.com>
---
  fsck/inject.c     | 28 ++++++++++++++++++++++++++++
  man/inject.f2fs.8 | 17 ++++++++++++++++-
  2 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/fsck/inject.c b/fsck/inject.c
index 0b5aecbf8061..8c2f8c5dc332 100644
--- a/fsck/inject.c
+++ b/fsck/inject.c
@@ -198,8 +198,13 @@ static void inject_node_usage(void)
        MSG(0, "  i_links: inject inode i_links\n");
        MSG(0, "  i_size: inject inode i_size\n");
        MSG(0, "  i_blocks: inject inode i_blocks\n");
+       MSG(0, "  i_ext.fofs: inject inode i_ext.fofs\n");
+       MSG(0, "  i_ext.blk_addr: inject inode i_ext.blk_addr\n");
+       MSG(0, "  i_ext.len: inject inode i_ext.len\n");
        MSG(0, "  i_extra_isize: inject inode i_extra_isize\n");
+       MSG(0, "  i_inline_xattr_size: inject inode i_inline_xattr_size\n");
        MSG(0, "  i_inode_checksum: inject inode i_inode_checksum\n");
+       MSG(0, "  i_compr_blocks: inject inode i_compr_blocks\n");
        MSG(0, "  i_addr: inject inode i_addr array selected by --idx 
<index>\n");
        MSG(0, "  i_nid: inject inode i_nid array selected by --idx <index>\n");
        MSG(0, "  addr: inject {in}direct node nid/addr array selected by --idx 
<index>\n");
@@ -967,16 +972,39 @@ static int inject_inode(struct f2fs_sb_info *sbi, struct 
f2fs_node *node,
                MSG(0, "Info: inject inode i_blocks of nid %u: %"PRIu64" -> 
%"PRIu64"\n",
                    opt->nid, le64_to_cpu(inode->i_blocks), (u64)opt->val);
                inode->i_blocks = cpu_to_le64((u64)opt->val);
+       } else if (!strcmp(opt->mb, "i_ext.fofs")) {
+               MSG(0, "Info: inject inode i_ext.fofs of nid %u: %u -> %u\n",
+                   opt->nid, le32_to_cpu(inode->i_ext.fofs), (u32)opt->val);
+               inode->i_ext.fofs = cpu_to_le32((u32)opt->val);
+       } else if (!strcmp(opt->mb, "i_ext.blk_addr")) {
+               MSG(0, "Info: inject inode i_ext.blk_addr of nid %u: "
+                   "0x%x -> 0x%x\n", opt->nid,
+                   le32_to_cpu(inode->i_ext.blk_addr), (u32)opt->val);
+               inode->i_ext.blk_addr = cpu_to_le32((u32)opt->val);
+       } else if (!strcmp(opt->mb, "i_ext.len")) {
+               MSG(0, "Info: inject inode i_ext.len of nid %u: %u -> %u\n",
+                   opt->nid, le32_to_cpu(inode->i_ext.len), (u32)opt->val);
+               inode->i_ext.len = cpu_to_le32((u32)opt->val);
        } else if (!strcmp(opt->mb, "i_extra_isize")) {
                /* do not care if F2FS_EXTRA_ATTR is enabled */
                MSG(0, "Info: inject inode i_extra_isize of nid %u: %d -> %d\n",
                    opt->nid, le16_to_cpu(inode->i_extra_isize), (u16)opt->val);
                inode->i_extra_isize = cpu_to_le16((u16)opt->val);
+       } else if (!strcmp(opt->mb, "i_inline_xattr_size")) {
+               MSG(0, "Info: inject inode i_inline_xattr_size of nid %u: "
+                   "%d -> %d\n", opt->nid,
+                   le16_to_cpu(inode->i_inline_xattr_size), (u16)opt->val);
+               inode->i_inline_xattr_size = cpu_to_le16((u16)opt->val);
        } else if (!strcmp(opt->mb, "i_inode_checksum")) {
                MSG(0, "Info: inject inode i_inode_checksum of nid %u: "
                    "0x%x -> 0x%x\n", opt->nid,
                    le32_to_cpu(inode->i_inode_checksum), (u32)opt->val);
                inode->i_inode_checksum = cpu_to_le32((u32)opt->val);
+       } else if (!strcmp(opt->mb, "i_compr_blocks")) {
+               MSG(0, "Info: inject inode i_compr_blocks of nid %u: "
+                   "%lu -> %lu\n", opt->nid,

%llu -> %llu

+                   le64_to_cpu(inode->i_compr_blocks), (u64)opt->val);
+               inode->i_compr_blocks = cpu_to_le64((u64)opt->val);
        } else if (!strcmp(opt->mb, "i_addr")) {
                /* do not care if it is inline data */
                if (opt->idx >= DEF_ADDRS_PER_INODE) {
diff --git a/man/inject.f2fs.8 b/man/inject.f2fs.8
index 5ae556015a79..72d1c90f7ce4 100644
--- a/man/inject.f2fs.8
+++ b/man/inject.f2fs.8
@@ -145,7 +145,7 @@ summary entry ofs_in_node.
  .RE
  .TP
  .BI \-\-node
-Inject node block specified by \fInid\P.
+Inject node block specified by \fInid\fP.
  The available \fImb\fP of \fInode\fP are:
  .RS 1.2i
  .TP
@@ -182,12 +182,27 @@ inode i_size.
  .BI i_blocks
  inode i_blocks.
  .TP
+.BI i_ext.fofs
+inode i_ext.fofs.
+.TP
+.BI i_ext.blk_addr
+inode i_ext.blk_addr.
+.TP
+.BI i_ext.len
+inode i_ext.len.
+.TP
  .BI i_extra_isize
  inode i_extra_isize.
  .TP
+.BI i_inline_xattr_size
+inode i_inline_xattr_size.
+.TP
  .BI i_inode_checksum
  inode i_inode_checksum.
  .TP
+.BI i_compr_blocks
+inode i_compr_blocks.
+.TP
  .BI i_addr
  inode i_addr array specified by \fIidx\fP.
  .TP



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to