From: Yue Hu <[email protected]> Add a check to packed inode for fsck.erofs.
Signed-off-by: Yue Hu <[email protected]> --- fsck/main.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/fsck/main.c b/fsck/main.c index a01ca76..6b42252 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -450,7 +450,8 @@ static int erofs_verify_inode_data(struct erofs_inode *inode, int outfd) } if (fsckcfg.print_comp_ratio) { - fsckcfg.logical_blocks += BLK_ROUND_UP(inode->i_size); + if (!erofs_is_packed_inode(inode)) + fsckcfg.logical_blocks += BLK_ROUND_UP(inode->i_size); fsckcfg.physical_blocks += BLK_ROUND_UP(pchunk_len); } out: @@ -696,6 +697,8 @@ static int erofsfsck_check_inode(erofs_nid_t pnid, erofs_nid_t nid) ret = erofs_extract_dir(&inode); break; case S_IFREG: + if (erofs_is_packed_inode(&inode)) + goto verify; ret = erofs_extract_file(&inode); break; case S_IFLNK: @@ -731,7 +734,7 @@ verify: ret = erofs_iterate_dir(&ctx, true); } - if (!ret) + if (!ret && !erofs_is_packed_inode(&inode)) erofsfsck_set_attributes(&inode, fsckcfg.extract_path); if (ret == -ECANCELED) @@ -786,6 +789,14 @@ int main(int argc, char **argv) goto exit_put_super; } + if (erofs_sb_has_fragments()) { + err = erofsfsck_check_inode(sbi.packed_nid, sbi.packed_nid); + if (err) { + erofs_err("failed to verify packed file"); + goto exit_put_super; + } + } + err = erofsfsck_check_inode(sbi.root_nid, sbi.root_nid); if (fsckcfg.corrupted) { if (!fsckcfg.extract_path) -- 2.17.1
