Calculate inode checksum and writeback when processing
sload or resize.

Signed-off-by: Xue Liu <liuxueliu....@huawei.com>
---
 fsck/fsck.h    | 1 +
 fsck/mount.c   | 6 ++++--
 fsck/segment.c | 2 +-
 fsck/xattr.c   | 3 +--
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/fsck/fsck.h b/fsck/fsck.h
index cbe7fc4..f90bcf9 100644
--- a/fsck/fsck.h
+++ b/fsck/fsck.h
@@ -221,6 +221,7 @@ int f2fs_resize(struct f2fs_sb_info *);
 int f2fs_sload(struct f2fs_sb_info *);
 
 /* segment.c */
+void write_inode(u64, struct f2fs_node *);
 void reserve_new_block(struct f2fs_sb_info *, block_t *,
                                        struct f2fs_summary *, int);
 void new_data_block(struct f2fs_sb_info *, void *,
diff --git a/fsck/mount.c b/fsck/mount.c
index 0a30adb..87b6295 100644
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -1551,6 +1551,9 @@ void update_data_blkaddr(struct f2fs_sb_info *sbi, nid_t 
nid,
 
                oldaddr = le32_to_cpu(node_blk->i.i_addr[ofs + ofs_in_node]);
                node_blk->i.i_addr[ofs + ofs_in_node] = cpu_to_le32(newaddr);
+               if (c.feature & cpu_to_le32(F2FS_FEATURE_INODE_CHKSUM))
+                       node_blk->i.i_inode_checksum =
+                               cpu_to_le32(f2fs_inode_chksum(node_blk));
        } else {
                oldaddr = le32_to_cpu(node_blk->dn.addr[ofs_in_node]);
                node_blk->dn.addr[ofs_in_node] = cpu_to_le32(newaddr);
@@ -1574,8 +1577,7 @@ void update_data_blkaddr(struct f2fs_sb_info *sbi, nid_t 
nid,
                node_blk->i.i_ext.len = 0;
 
                /* update inode block */
-               ret = dev_write_block(node_blk, ni.blk_addr);
-               ASSERT(ret >= 0);
+               write_inode(ni.blk_addr, node_blk);
        }
        free(node_blk);
 }
diff --git a/fsck/segment.c b/fsck/segment.c
index 4f8bdb4..50f0d73 100644
--- a/fsck/segment.c
+++ b/fsck/segment.c
@@ -16,7 +16,7 @@
 #include "fsck.h"
 #include "node.h"
 
-static void write_inode(u64 blkaddr, struct f2fs_node *inode)
+void write_inode(u64 blkaddr, struct f2fs_node *inode)
 {
        if (c.feature & cpu_to_le32(F2FS_FEATURE_INODE_CHKSUM))
                inode->i.i_inode_checksum =
diff --git a/fsck/xattr.c b/fsck/xattr.c
index 1d15d1b..7144a83 100644
--- a/fsck/xattr.c
+++ b/fsck/xattr.c
@@ -220,8 +220,7 @@ int f2fs_setxattr(struct f2fs_sb_info *sbi, nid_t ino, int 
index, const char *na
        write_all_xattrs(sbi, inode, new_hsize, base_addr);
 
        /* inode need update */
-       ret = dev_write_block(inode, ni.blk_addr);
-       ASSERT(ret >= 0);
+       write_inode(ni.blk_addr, inode);
 exit:
        free(base_addr);
        return error;
-- 
1.8.5.2


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to