aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaeho Jeong <daehojeong@google.com>2023-10-09 13:29:17 -0700
committerJaegeuk Kim <jaegeuk@kernel.org>2023-10-11 17:30:40 -0700
commitb6e5183f4bf071f9c1e857765c5ca019b43cb82f (patch)
tree6e5bc0f4386939c38e23ce9e42ccf33593044995
parent4d811ae0c1f1cb49b388addd56b71cbd44e2e53c (diff)
downloadf2fs-tools-b6e5183f4bf071f9c1e857765c5ca019b43cb82f.tar.gz
f2fs-tools: use proper address entry count for direct nodes
For direct nodes, we have to use DEF_ADDRS_PER_BLOCK. Signed-off-by: Daeho Jeong <daehojeong@google.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fsck/fsck.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/fsck/fsck.c b/fsck/fsck.c
index 1406aa5..99cface 100644
--- a/fsck/fsck.c
+++ b/fsck/fsck.c
@@ -2875,7 +2875,7 @@ static int fsck_do_reconnect_file(struct f2fs_sb_info *sbi,
}
static void fsck_failed_reconnect_file_dnode(struct f2fs_sb_info *sbi,
- nid_t nid)
+ struct f2fs_inode *inode, nid_t nid)
{
struct f2fs_fsck *fsck = F2FS_FSCK(sbi);
struct f2fs_node *node;
@@ -2894,12 +2894,12 @@ static void fsck_failed_reconnect_file_dnode(struct f2fs_sb_info *sbi,
fsck->chk.valid_blk_cnt--;
f2fs_clear_main_bitmap(sbi, ni.blk_addr);
- for (i = 0; i < ADDRS_PER_BLOCK(&node->i); i++) {
+ for (i = 0; i < ADDRS_PER_BLOCK(inode); i++) {
addr = le32_to_cpu(node->dn.addr[i]);
if (!addr)
continue;
fsck->chk.valid_blk_cnt--;
- if (addr == NEW_ADDR)
+ if (addr == NEW_ADDR || addr == COMPRESS_ADDR)
continue;
f2fs_clear_main_bitmap(sbi, addr);
}
@@ -2908,7 +2908,7 @@ static void fsck_failed_reconnect_file_dnode(struct f2fs_sb_info *sbi,
}
static void fsck_failed_reconnect_file_idnode(struct f2fs_sb_info *sbi,
- nid_t nid)
+ struct f2fs_inode *inode, nid_t nid)
{
struct f2fs_fsck *fsck = F2FS_FSCK(sbi);
struct f2fs_node *node;
@@ -2931,14 +2931,14 @@ static void fsck_failed_reconnect_file_idnode(struct f2fs_sb_info *sbi,
tmp = le32_to_cpu(node->in.nid[i]);
if (!tmp)
continue;
- fsck_failed_reconnect_file_dnode(sbi, tmp);
+ fsck_failed_reconnect_file_dnode(sbi, inode, tmp);
}
free(node);
}
static void fsck_failed_reconnect_file_didnode(struct f2fs_sb_info *sbi,
- nid_t nid)
+ struct f2fs_inode *inode, nid_t nid)
{
struct f2fs_fsck *fsck = F2FS_FSCK(sbi);
struct f2fs_node *node;
@@ -2961,7 +2961,7 @@ static void fsck_failed_reconnect_file_didnode(struct f2fs_sb_info *sbi,
tmp = le32_to_cpu(node->in.nid[i]);
if (!tmp)
continue;
- fsck_failed_reconnect_file_idnode(sbi, tmp);
+ fsck_failed_reconnect_file_idnode(sbi, inode, tmp);
}
free(node);
@@ -3010,7 +3010,7 @@ static void fsck_failed_reconnect_file(struct f2fs_sb_info *sbi, nid_t ino)
if (!addr)
continue;
fsck->chk.valid_blk_cnt--;
- if (addr == NEW_ADDR)
+ if (addr == NEW_ADDR || addr == COMPRESS_ADDR)
continue;
f2fs_clear_main_bitmap(sbi, addr);
}
@@ -3024,14 +3024,14 @@ static void fsck_failed_reconnect_file(struct f2fs_sb_info *sbi, nid_t ino)
switch (i) {
case 0: /* direct node */
case 1:
- fsck_failed_reconnect_file_dnode(sbi, nid);
+ fsck_failed_reconnect_file_dnode(sbi, &node->i, nid);
break;
case 2: /* indirect node */
case 3:
- fsck_failed_reconnect_file_idnode(sbi, nid);
+ fsck_failed_reconnect_file_idnode(sbi, &node->i, nid);
break;
case 4: /* double indirect node */
- fsck_failed_reconnect_file_didnode(sbi, nid);
+ fsck_failed_reconnect_file_didnode(sbi, &node->i, nid);
break;
}
}