Home | History | Annotate | Download | only in e2fsck

Lines Matching refs:ctx

44 static void check_root(e2fsck_t ctx);
45 static int check_directory(e2fsck_t ctx, ext2_ino_t ino,
47 static void fix_dotdot(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent);
52 void e2fsck_pass3(e2fsck_t ctx)
54 ext2_filsys fs = ctx->fs;
73 if (!(ctx->options & E2F_OPT_PREEN))
74 fix_problem(ctx, PR_3_PASS_HEADER, &pctx);
83 fix_problem(ctx, PR_3_ALLOCATE_IBITMAP_ERROR, &pctx);
84 ctx->flags |= E2F_FLAG_ABORT;
88 if (ctx->options & E2F_OPT_TIME) {
89 e2fsck_clear_progbar(ctx);
90 print_resource_track(_("Peak memory"), &ctx->global_rtrack);
94 check_root(ctx);
95 if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
100 maxdirs = e2fsck_get_num_dirinfo(ctx);
103 if (ctx->progress)
104 if ((ctx->progress)(ctx, 3, 0, maxdirs))
107 iter = e2fsck_dir_info_iter_begin(ctx);
108 while ((dir = e2fsck_dir_info_iter(ctx, iter)) != 0) {
109 if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
111 if (ctx->progress && (ctx->progress)(ctx, 3, count++, maxdirs))
113 if (ext2fs_test_inode_bitmap(ctx->inode_dir_map, dir->ino))
114 if (check_directory(ctx, dir->ino, &pctx))
117 e2fsck_dir_info_iter_end(ctx, iter);
122 if ((ctx->flags & E2F_OPT_READONLY) == 0)
123 e2fsck_get_lost_and_found(ctx, 1);
129 e2fsck_rehash_directories(ctx);
132 e2fsck_free_dir_info(ctx);
143 if (ctx->options & E2F_OPT_TIME2) {
144 e2fsck_clear_progbar(ctx);
154 static void check_root(e2fsck_t ctx)
156 ext2_filsys fs = ctx->fs;
164 if (ext2fs_test_inode_bitmap(ctx->inode_used_map, EXT2_ROOT_INO)) {
170 if (!(ext2fs_test_inode_bitmap(ctx->inode_dir_map,
172 fix_problem(ctx, PR_3_ROOT_NOT_DIR_ABORT, &pctx);
173 ctx->flags |= E2F_FLAG_ABORT;
178 if (!fix_problem(ctx, PR_3_NO_ROOT_INODE, &pctx)) {
179 fix_problem(ctx, PR_3_NO_ROOT_INODE_ABORT, &pctx);
180 ctx->flags |= E2F_FLAG_ABORT;
184 e2fsck_read_bitmaps(ctx);
189 pctx.errcode = ext2fs_new_block(fs, 0, ctx->block_found_map, &blk);
192 fix_problem(ctx, PR_3_CREATE_ROOT_ERROR, &pctx);
193 ctx->flags |= E2F_FLAG_ABORT;
196 ext2fs_mark_block_bitmap(ctx->block_found_map, blk);
207 fix_problem(ctx, PR_3_CREATE_ROOT_ERROR, &pctx);
208 ctx->flags |= E2F_FLAG_ABORT;
215 fix_problem(ctx, PR_3_CREATE_ROOT_ERROR, &pctx);
216 ctx->flags |= E2F_FLAG_ABORT;
227 inode.i_atime = inode.i_ctime = inode.i_mtime = ctx->now;
238 fix_problem(ctx, PR_3_CREATE_ROOT_ERROR, &pctx);
239 ctx->flags |= E2F_FLAG_ABORT;
246 e2fsck_add_dir_info(ctx, EXT2_ROOT_INO, EXT2_ROOT_INO);
247 ext2fs_icount_store(ctx->inode_count, EXT2_ROOT_INO, 2);
248 ext2fs_icount_store(ctx->inode_link_info, EXT2_ROOT_INO, 2);
250 ext2fs_mark_inode_bitmap(ctx->inode_used_map, EXT2_ROOT_INO);
251 ext2fs_mark_inode_bitmap(ctx->inode_dir_map, EXT2_ROOT_INO);
272 static int check_directory(e2fsck_t ctx, ext2_ino_t dir,
275 ext2_filsys fs = ctx->fs;
293 if (e2fsck_dir_info_get_parent(ctx, ino, &parent)) {
294 fix_problem(ctx, PR_3_NO_DIRINFO, pctx);
308 if (fix_problem(ctx, PR_3_UNCONNECTED_DIR, pctx)) {
309 if (e2fsck_reconnect_file(ctx, pctx->ino))
312 fix_dotdot(ctx, pctx->ino,
313 ctx->lost_and_found);
314 parent = ctx->lost_and_found;
336 fix_problem(ctx,
338 ctx->flags |= E2F_FLAG_ABORT;
351 if (e2fsck_dir_info_get_dotdot(ctx, dir, &pctx->ino2) ||
352 e2fsck_dir_info_get_parent(ctx, dir, &pctx->dir)) {
353 fix_problem(ctx, PR_3_NO_DIRINFO, pctx);
357 if (fix_problem(ctx, PR_3_BAD_DOT_DOT, pctx))
358 fix_dotdot(ctx, dir, pctx->dir);
367 ext2_ino_t e2fsck_get_lost_and_found(e2fsck_t ctx, int fix)
369 ext2_filsys fs = ctx->fs;
378 if (ctx->lost_and_found)
379 return ctx->lost_and_found;
388 if (ext2fs_test_inode_bitmap(ctx->inode_dir_map, ino)) {
389 ctx->lost_and_found = ino;
397 if (!fix_problem(ctx, PR_3_LPF_NOTDIR, &pctx))
404 fix_problem(ctx, PR_3_CREATE_LPF_ERROR, &pctx);
407 (void) e2fsck_dir_info_set_parent(ctx, ino, 0);
408 e2fsck_adjust_inode_count(ctx, ino, -1);
411 fix_problem(ctx, PR_3_ERR_FIND_LPF, &pctx);
413 if (!fix_problem(ctx, PR_3_NO_LF_DIR, 0))
420 e2fsck_read_bitmaps(ctx);
425 retval = ext2fs_new_block(fs, 0, ctx->block_found_map, &blk);
428 fix_problem(ctx, PR_3_ERR_LPF_NEW_BLOCK, &pctx);
431 ext2fs_mark_block_bitmap(ctx->block_found_map, blk);
438 ctx->inode_used_map, &ino);
441 fix_problem(ctx, PR_3_ERR_LPF_NEW_INODE, &pctx);
444 ext2fs_mark_inode_bitmap(ctx->inode_used_map, ino);
445 ext2fs_mark_inode_bitmap(ctx->inode_dir_map, ino);
454 fix_problem(ctx, PR_3_ERR_LPF_NEW_DIR_BLOCK, &pctx);
462 fix_problem(ctx, PR_3_ERR_LPF_WRITE_BLOCK, &pctx);
472 inode.i_atime = inode.i_ctime = inode.i_mtime = ctx->now;
483 fix_problem(ctx, PR_3_CREATE_LPF_ERROR, &pctx);
492 fix_problem(ctx, PR_3_CREATE_LPF_ERROR, &pctx);
499 e2fsck_add_dir_info(ctx, ino, EXT2_ROOT_INO);
500 e2fsck_adjust_inode_count(ctx, EXT2_ROOT_INO, 1);
501 ext2fs_icount_store(ctx->inode_count, ino, 2);
502 ext2fs_icount_store(ctx->inode_link_info, ino, 2);
503 ctx->lost_and_found = ino;
513 int e2fsck_reconnect_file(e2fsck_t ctx, ext2_ino_t ino)
515 ext2_filsys fs = ctx->fs;
525 if (!ctx->bad_lost_and_found && !ctx->lost_and_found) {
526 if (e2fsck_get_lost_and_found(ctx, 1) == 0)
527 ctx->bad_lost_and_found++;
529 if (ctx->bad_lost_and_found) {
530 fix_problem(ctx, PR_3_NO_LPF, &pctx);
537 retval = ext2fs_link(fs, ctx->lost_and_found, name, ino, file_type);
539 if (!fix_problem(ctx, PR_3_EXPAND_LF_DIR, &pctx))
541 retval = e2fsck_expand_directory(ctx, ctx->lost_and_found,
545 fix_problem(ctx, PR_3_CANT_EXPAND_LPF, &pctx);
548 retval = ext2fs_link(fs, ctx->lost_and_found, name,
553 fix_problem(ctx, PR_3_CANT_RECONNECT, &pctx);
556 e2fsck_adjust_inode_count(ctx, ino, 1);
564 errcode_t e2fsck_adjust_inode_count(e2fsck_t ctx, ext2_ino_t ino, int adj)
566 ext2_filsys fs = ctx->fs;
583 ext2fs_icount_increment(ctx->inode_count, ino, 0);
586 ext2fs_icount_increment(ctx->inode_link_info, ino, 0);
589 ext2fs_icount_decrement(ctx->inode_count, ino, 0);
592 ext2fs_icount_decrement(ctx->inode_link_info, ino, 0);
610 e2fsck_t ctx;
630 retval = e2fsck_adjust_inode_count(fp->ctx, dirent->inode, -1);
633 fix_problem(fp->ctx, PR_3_ADJUST_INODE, &pctx);
635 retval = e2fsck_adjust_inode_count(fp->ctx, fp->parent, 1);
638 fix_problem(fp->ctx, PR_3_ADJUST_INODE, &pctx);
641 if (fp->ctx->fs->super->s_feature_incompat &
652 static void fix_dotdot(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent)
654 ext2_filsys fs = ctx->fs;
662 fp.ctx = ctx;
674 fix_problem(ctx, retval ? PR_3_FIX_PARENT_ERR :
678 (void) e2fsck_dir_info_set_dotdot(ctx, ino, parent);
679 if (e2fsck_dir_info_set_parent(ctx, ino, ctx->lost_and_found))
680 fix_problem(ctx, PR_3_NO_DIRINFO, &pctx);
696 e2fsck_t ctx;
711 e2fsck_t ctx;
713 ctx = es->ctx;
724 retval = ext2fs_new_block(fs, last_blk, ctx->block_found_map,
753 ext2fs_mark_block_bitmap(ctx->block_found_map, new_blk);
763 errcode_t e2fsck_expand_directory(e2fsck_t ctx, ext2_ino_t dir,
766 ext2_filsys fs = ctx->fs;
778 e2fsck_read_bitmaps(ctx);
789 es.ctx = ctx;
807 e2fsck_write_inode(ctx, dir, &inode, "expand_directory");