Previously, only data blocks locating in its inode block could be fixed.
This patch investigates direct node blocks to fix indices too.

Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org>
---
 fsck/fsck.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/fsck/fsck.c b/fsck/fsck.c
index 9d6fc42..1b27ae0 100644
--- a/fsck/fsck.c
+++ b/fsck/fsck.c
@@ -556,6 +556,7 @@ int fsck_chk_dnode_blk(struct f2fs_sb_info *sbi, struct 
f2fs_inode *inode,
 {
        int idx, ret;
        u32 child_cnt = 0, child_files = 0;
+       int need_fix = 0;
 
        for (idx = 0; idx < ADDRS_PER_BLOCK; idx++) {
                if (le32_to_cpu(node_blk->dn.addr[idx]) == 0x0)
@@ -565,8 +566,17 @@ int fsck_chk_dnode_blk(struct f2fs_sb_info *sbi, struct 
f2fs_inode *inode,
                        &child_cnt, &child_files,
                        le64_to_cpu(inode->i_blocks) == *blk_cnt, ftype,
                        nid, idx, ni->version);
-               if (!ret)
+               if (!ret) {
                        *blk_cnt = *blk_cnt + 1;
+               } else if (config.fix_on) {
+                       node_blk->dn.addr[idx] = 0;
+                       need_fix = 1;
+                       FIX_MSG("[0x%x] dn.addr[%d] = 0", nid, idx);
+               }
+       }
+       if (need_fix) {
+               ret = dev_write_block(node_blk, ni->blk_addr);
+               ASSERT(ret >= 0);
        }
        return 0;
 }
-- 
2.1.1


------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to