Calculate inode checksum and writeback when processing
sload or resize.
Signed-off-by: Xue Liu <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel