Lines Matching full:ctx
62 static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf);
66 static int allocate_dir_block(e2fsck_t ctx,
69 static void clear_htree(e2fsck_t ctx, ext2_ino_t ino);
78 e2fsck_t ctx;
81 void e2fsck_pass2(e2fsck_t ctx)
83 struct ext2_super_block *sb = ctx->fs->super;
85 ext2_filsys fs = ctx->fs;
98 init_resource_track(&rtrack, ctx->fs->io);
105 if (!(ctx->options & E2F_OPT_PREEN))
106 fix_problem(ctx, PR_2_PASS_HEADER, &cd.pctx);
108 e2fsck_setup_tdb_icount(ctx, EXT2_ICOUNT_OPT_INCREMENT,
109 &ctx->inode_count);
110 if (ctx->inode_count)
115 0, ctx->inode_link_info,
116 &ctx->inode_count);
118 fix_problem(ctx, PR_2_ALLOCATE_ICOUNT, &cd.pctx);
119 ctx->flags |= E2F_FLAG_ABORT;
122 buf = (char *) e2fsck_allocate_memory(ctx, 2*fs->blocksize,
130 (void) e2fsck_dir_info_set_parent(ctx, EXT2_ROOT_INO, EXT2_ROOT_INO);
133 cd.ctx = ctx;
137 if (ctx->progress)
138 (void) (ctx->progress)(ctx, 2, 0, cd.max);
145 if (ctx->flags & E2F_FLAG_SIGNAL_MASK || ctx->flags & E2F_FLAG_RESTART)
148 if (ctx->flags & E2F_FLAG_RESTART_LATER) {
149 ctx->flags |= E2F_FLAG_RESTART;
154 fix_problem(ctx, PR_2_DBLIST_ITERATE, &cd.pctx);
155 ctx->flags |= E2F_FLAG_ABORT;
160 for (i=0; (dx_dir = e2fsck_dx_dir_info_iter(ctx, &i)) != 0;) {
161 if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
207 fix_problem(ctx, code, &pctx);
215 fix_problem(ctx, code, &pctx);
228 fix_problem(ctx, code, &pctx);
233 fix_problem(ctx, code, &pctx);
237 fix_problem(ctx, code, &pctx);
241 if (bad_dir && fix_problem(ctx, PR_2_HTREE_CLEAR, &pctx)) {
242 clear_htree(ctx, dx_dir->ino);
246 e2fsck_free_dx_dir_info(ctx);
251 if (ctx->inode_bad_map) {
252 ext2fs_free_inode_bitmap(ctx->inode_bad_map);
253 ctx->inode_bad_map = 0;
255 if (ctx->inode_reg_map) {
256 ext2fs_free_inode_bitmap(ctx->inode_reg_map);
257 ctx->inode_reg_map = 0;
261 if (ctx->large_files) {
264 fix_problem(ctx, PR_2_FEATURE_LARGE_FILES, &pctx)) {
271 fix_problem(ctx, PR_1_FS_REV_LEVEL, &pctx)) {
277 print_resource_track(ctx, _("Pass 2"), &rtrack, fs->io);
342 static int check_dot(e2fsck_t ctx,
360 (void) ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
362 if (fix_problem(ctx, problem, pctx)) {
374 if (fix_problem(ctx, PR_2_BAD_INODE_DOT, pctx)) {
383 fix_problem(ctx, PR_2_SPLIT_DOT, pctx)) {
387 (void) ext2fs_set_rec_len(ctx->fs, new_len,
403 static int check_dotdot(e2fsck_t ctx,
418 (void) ext2fs_get_rec_len(ctx->fs, dirent, &rec_len);
420 if (fix_problem(ctx, problem, pctx)) {
437 if (e2fsck_dir_info_set_dotdot(ctx, ino, dirent->inode)) {
438 fix_problem(ctx, PR_2_NO_DIRINFO, pctx);
448 static int check_name(e2fsck_t ctx,
460 fixup = fix_problem(ctx, PR_2_BAD_NAME, pctx);
474 static _INLINE_ int check_filetype(e2fsck_t ctx,
483 if (!(ctx->fs->super->s_feature_incompat &
486 !fix_problem(ctx, PR_2_CLEAR_FILETYPE, pctx))
492 if (ext2fs_test_inode_bitmap(ctx->inode_dir_map, dirent->inode)) {
494 } else if (ext2fs_test_inode_bitmap(ctx->inode_reg_map,
497 } else if (ctx->inode_bad_map &&
498 ext2fs_test_inode_bitmap(ctx->inode_bad_map,
502 e2fsck_read_inode(ctx, dirent->inode, &inode,
510 if (fix_problem(ctx, filetype ? PR_2_BAD_FILETYPE : PR_2_SET_FILETYPE,
565 if (fix_problem(cd->ctx, PR_2_HTREE_BAD_LIMIT, &cd->pctx))
570 if (fix_problem(cd->ctx, PR_2_HTREE_BAD_COUNT, &cd->pctx))
586 if (fix_problem(cd->ctx, PR_2_HTREE_BADBLK,
592 fix_problem(cd->ctx, PR_2_HTREE_HASH_ORDER, &cd->pctx))
626 clear_htree(cd->ctx, cd->pctx.ino);
723 e2fsck_t ctx;
734 ctx = cd->ctx;
736 if (ctx->flags & E2F_FLAG_SIGNAL_MASK || ctx->flags & E2F_FLAG_RESTART)
739 if (ctx->progress && (ctx->progress)(ctx, 2, cd->count++, cd->max))
746 if (!(ext2fs_test_inode_bitmap(ctx->inode_used_map, ino)))
757 if (allocate_dir_block(ctx, db, buf, &cd->pctx))
767 if (ctx->dirs_to_hash &&
768 ext2fs_u32_list_test(ctx->dirs_to_hash, ino))
782 if (!fix_problem(ctx, PR_2_READ_DIRBLOCK, &cd->pctx)) {
783 ctx->flags |= E2F_FLAG_ABORT;
789 dx_dir = e2fsck_get_dx_dir_info(ctx, ino);
792 if (fix_problem(ctx, PR_2_UNEXPECTED_HTREE_BLOCK,
794 clear_htree(ctx, ino);
799 fatal_error(ctx, _("Can not continue."));
817 fix_problem(ctx, PR_2_HTREE_BAD_ROOT, &cd->pctx)) {
818 clear_htree(ctx, ino);
853 if (fix_problem(ctx, PR_2_DIR_CORRUPTED, &cd->pctx)) {
861 if (fix_problem(ctx, PR_2_FILENAME_LONG, &cd->pctx)) {
868 if (check_dot(ctx, dirent, ino, &cd->pctx))
871 ret = check_dotdot(ctx, dirent, ino, &cd->pctx);
878 if (fix_problem(ctx, PR_2_LINK_DOT, &cd->pctx)) {
894 } else if (ctx->inode_bb_map &&
895 (ext2fs_test_inode_bitmap(ctx->inode_bb_map,
939 if (fix_problem(ctx, problem, &cd->pctx)) {
956 if (ctx->inode_bad_map &&
957 ext2fs_test_inode_bitmap(ctx->inode_bad_map,
959 if (e2fsck_process_bad_inode(ctx, ino,
966 if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
986 if (fix_problem(ctx, PR_2_INOREF_BG_INO_UNINIT,
991 ctx->flags |= E2F_FLAG_RESTART_LATER;
999 if (fix_problem(ctx, PR_2_INOREF_IN_UNUSED, &cd->pctx)){
1002 ctx->flags |= E2F_FLAG_RESTART_LATER;
1018 if (!(ctx->flags & E2F_FLAG_RESTART_LATER) &&
1019 !(ext2fs_test_inode_bitmap(ctx->inode_used_map,
1024 if (fix_problem(ctx, problem, &cd->pctx)) {
1035 if (check_name(ctx, dirent, ino, &cd->pctx))
1038 if (check_filetype(ctx, dirent, ino, &cd->pctx))
1061 (ext2fs_test_inode_bitmap(ctx->inode_dir_map,
1063 if (e2fsck_dir_info_get_parent(ctx, dirent->inode,
1066 fix_problem(ctx, PR_2_NO_DIRINFO, &cd->pctx);
1071 if (fix_problem(ctx, PR_2_LINK_DIR,
1079 (void) e2fsck_dir_info_set_parent(ctx,
1090 fix_problem(ctx, PR_2_REPORT_DUP_DIRENT, &pctx);
1091 if (!ctx->dirs_to_hash)
1092 ext2fs_u32_list_create(&ctx->dirs_to_hash, 50);
1093 if (ctx->dirs_to_hash)
1094 ext2fs_u32_list_add(ctx->dirs_to_hash, ino);
1099 ext2fs_icount_increment(ctx->inode_count, dirent->inode,
1102 ctx->fs_links_count++;
1103 ctx->fs_total_count++;
1129 if (fix_problem(ctx, PR_2_FINAL_RECLEN, &cd->pctx)) {
1137 if (!fix_problem(ctx, PR_2_WRITE_DIRBLOCK,
1146 ctx->flags |= E2F_FLAG_ABORT;
1162 e2fsck_t ctx = (e2fsck_t) priv_data;
1169 ext2fs_unmark_block_bitmap(ctx->block_found_map, *block_nr);
1177 static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
1179 ext2_filsys fs = ctx->fs;
1184 e2fsck_read_inode(ctx, ino, &inode, "deallocate_inode");
1185 e2fsck_clear_inode(ctx, ino, &inode, 0, "deallocate_inode");
1192 e2fsck_read_bitmaps(ctx);
1205 fix_problem(ctx, PR_2_ADJ_EA_REFCOUNT, &pctx);
1206 ctx->flags |= E2F_FLAG_ABORT;
1210 ext2fs_unmark_block_bitmap(ctx->block_found_map,
1222 ctx->large_files--;
1225 deallocate_inode_block, ctx);
1227 fix_problem(ctx, PR_2_DEALLOC_INODE, &pctx);
1228 ctx->flags |= E2F_FLAG_ABORT;
1236 static void clear_htree(e2fsck_t ctx, ext2_ino_t ino)
1240 e2fsck_read_inode(ctx, ino, &inode, "clear_htree");
1242 e2fsck_write_inode(ctx, ino, &inode, "clear_htree");
1243 if (ctx->dirs_to_hash)
1244 ext2fs_u32_list_add(ctx->dirs_to_hash, ino);
1248 extern int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir,
1251 ext2_filsys fs = ctx->fs;
1259 e2fsck_read_inode(ctx, ino, &inode, "process_bad_inode");
1268 if (fix_problem(ctx, PR_2_FILE_ACL_ZERO, &pctx)) {
1298 if (fix_problem(ctx, problem, &pctx)) {
1299 deallocate_inode(ctx, ino, 0);
1300 if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
1309 if (fix_problem(ctx, PR_2_FADDR_ZERO, &pctx)) {
1326 if (fix_problem(ctx, PR_2_FRAG_ZERO, &pctx)) {
1335 if (fix_problem(ctx, PR_2_FSIZE_ZERO, &pctx)) {
1348 if (fix_problem(ctx, PR_2_BLOCKS_HI_ZERO, &pctx)) {
1358 if (fix_problem(ctx, PR_2_I_FILE_ACL_HI_ZERO, &pctx)) {
1368 if (fix_problem(ctx, PR_2_FILE_ACL_BAD, &pctx)) {
1376 if (fix_problem(ctx, PR_2_DIR_ACL_ZERO, &pctx)) {
1384 e2fsck_write_inode(ctx, ino, &inode, "process_bad_inode");
1385 if (!not_fixed && ctx->inode_bad_map)
1386 ext2fs_unmark_inode_bitmap(ctx->inode_bad_map, ino);
1397 static int allocate_dir_block(e2fsck_t ctx,
1402 ext2_filsys fs = ctx->fs;
1407 if (fix_problem(ctx, PR_2_DIRECTORY_HOLE, pctx) == 0)
1414 e2fsck_read_bitmaps(ctx);
1419 pctx->errcode = ext2fs_new_block(fs, 0, ctx->block_found_map, &blk);
1422 fix_problem(ctx, PR_2_ALLOC_DIRBOCK, pctx);
1425 ext2fs_mark_block_bitmap(ctx->block_found_map, blk);
1440 fix_problem(ctx, PR_2_ALLOC_DIRBOCK, pctx);
1448 fix_problem(ctx, PR_2_ALLOC_DIRBOCK, pctx);
1455 e2fsck_read_inode(ctx, db->ino, &inode, "allocate_dir_block");
1459 e2fsck_write_inode(ctx, db->ino, &inode, "allocate_dir_block");
1469 fix_problem(ctx, PR_2_ALLOC_DIRBOCK, pctx);