diff options
Diffstat (limited to 'e2fsck/pass1b.c')
-rw-r--r-- | e2fsck/pass1b.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/e2fsck/pass1b.c b/e2fsck/pass1b.c index 93fb630d..13bd9e98 100644 --- a/e2fsck/pass1b.c +++ b/e2fsck/pass1b.c @@ -88,8 +88,8 @@ static int process_pass1b_block(ext2_filsys fs, blk64_t *blocknr, int ref_offset, void *priv_data); static void delete_file(e2fsck_t ctx, ext2_ino_t ino, struct dup_inode *dp, char *block_buf); -static int clone_file(e2fsck_t ctx, ext2_ino_t ino, - struct dup_inode *dp, char* block_buf); +static errcode_t clone_file(e2fsck_t ctx, ext2_ino_t ino, + struct dup_inode *dp, char* block_buf); static int check_if_fs_block(e2fsck_t ctx, blk64_t test_block); static int check_if_fs_cluster(e2fsck_t ctx, blk64_t cluster); @@ -624,7 +624,6 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino, { ext2_filsys fs = ctx->fs; struct process_block_struct pb; - struct ext2_inode inode; struct problem_context pctx; unsigned int count; @@ -635,33 +634,35 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino, pctx.str = "delete_file"; pb.cur_cluster = ~0; - e2fsck_read_inode(ctx, ino, &inode, "delete_file"); - if (ext2fs_inode_has_valid_blocks2(fs, &inode)) - pctx.errcode = ext2fs_block_iterate3(fs, ino, BLOCK_FLAG_READ_ONLY, - block_buf, delete_file_block, &pb); + if (ext2fs_inode_has_valid_blocks2(fs, &dp->inode)) + pctx.errcode = ext2fs_block_iterate3(fs, ino, + BLOCK_FLAG_READ_ONLY, + block_buf, + delete_file_block, &pb); if (pctx.errcode) fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx); if (ctx->inode_bad_map) ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino); - ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(inode.i_mode)); - quota_data_sub(ctx->qctx, &inode, ino, pb.dup_blocks * fs->blocksize); - quota_data_inodes(ctx->qctx, &inode, ino, -1); + ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(dp->inode.i_mode)); + quota_data_sub(ctx->qctx, &dp->inode, ino, + pb.dup_blocks * fs->blocksize); + quota_data_inodes(ctx->qctx, &dp->inode, ino, -1); /* Inode may have changed by block_iterate, so reread it */ - e2fsck_read_inode(ctx, ino, &inode, "delete_file"); - e2fsck_clear_inode(ctx, ino, &inode, 0, "delete_file"); - if (ext2fs_file_acl_block(fs, &inode) && + e2fsck_read_inode(ctx, ino, &dp->inode, "delete_file"); + e2fsck_clear_inode(ctx, ino, &dp->inode, 0, "delete_file"); + if (ext2fs_file_acl_block(fs, &dp->inode) && (fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_EXT_ATTR)) { count = 1; pctx.errcode = ext2fs_adjust_ea_refcount2(fs, - ext2fs_file_acl_block(fs, &inode), + ext2fs_file_acl_block(fs, &dp->inode), block_buf, -1, &count); if (pctx.errcode == EXT2_ET_BAD_EA_BLOCK_NUM) { pctx.errcode = 0; count = 1; } if (pctx.errcode) { - pctx.blk = ext2fs_file_acl_block(fs, &inode); + pctx.blk = ext2fs_file_acl_block(fs, &dp->inode); fix_problem(ctx, PR_1B_ADJ_EA_REFCOUNT, &pctx); } /* @@ -672,12 +673,12 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino, */ if ((count == 0) || ext2fs_test_block_bitmap2(ctx->block_dup_map, - ext2fs_file_acl_block(fs, &inode))) { - blk64_t blk = ext2fs_file_acl_block(fs, &inode); + ext2fs_file_acl_block(fs, &dp->inode))) { + blk64_t blk = ext2fs_file_acl_block(fs, &dp->inode); delete_file_block(fs, &blk, BLOCK_COUNT_EXTATTR, 0, 0, &pb); - ext2fs_file_acl_block_set(fs, &inode, blk); - quota_data_sub(ctx->qctx, &inode, ino, fs->blocksize); + ext2fs_file_acl_block_set(fs, &dp->inode, blk); + quota_data_sub(ctx->qctx, &dp->inode, ino, fs->blocksize); } } } @@ -778,8 +779,8 @@ static int clone_file_block(ext2_filsys fs, return 0; } -static int clone_file(e2fsck_t ctx, ext2_ino_t ino, - struct dup_inode *dp, char* block_buf) +static errcode_t clone_file(e2fsck_t ctx, ext2_ino_t ino, + struct dup_inode *dp, char* block_buf) { ext2_filsys fs = ctx->fs; errcode_t retval; @@ -816,7 +817,7 @@ static int clone_file(e2fsck_t ctx, ext2_ino_t ino, goto errout; } if (cs.errcode) { - com_err("clone_file", cs.errcode, + com_err("clone_file", cs.errcode, "%s", _("returned from clone_file_block")); retval = cs.errcode; goto errout; |