119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * e2fsck.c - a consistency checker for the new extended file system. 33984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt * 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright (C) 1993, 1994, 1995, 1996, 1997 Theodore Ts'o. 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %Begin-Header% 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This file may be redistributed under the terms of the GNU Public 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * License. 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %End-Header% 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <errno.h> 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "e2fsck.h" 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "problem.h" 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 183984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt * This function allocates an e2fsck context 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecterrcode_t e2fsck_allocate_context(e2fsck_t *ret) 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_t context; 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project errcode_t retval; 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char *time_env; 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project retval = ext2fs_get_mem(sizeof(struct e2fsck_struct), &context); 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (retval) 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return retval; 293984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project memset(context, 0, sizeof(struct e2fsck_struct)); 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project context->process_inode_size = 256; 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project context->ext_attr_ver = 2; 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project context->blocks_per_page = 1; 353984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt context->htree_slack_percentage = 255; 363984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project time_env = getenv("E2FSCK_TIME"); 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (time_env) 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project context->now = strtoul(time_env, NULL, 0); 408558eab78390d1924cd6b255686ceef133f294d5Ken Sumrall else { 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project context->now = time(0); 428558eab78390d1924cd6b255686ceef133f294d5Ken Sumrall if (context->now < 1262322000) /* January 1 2010 */ 438558eab78390d1924cd6b255686ceef133f294d5Ken Sumrall context->flags |= E2F_FLAG_TIME_INSANE; 448558eab78390d1924cd6b255686ceef133f294d5Ken Sumrall } 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *ret = context; 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return 0; 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This function resets an e2fsck context; it is called when e2fsck 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * needs to be restarted. 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecterrcode_t e2fsck_reset_context(e2fsck_t ctx) 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 563984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt int i; 573984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 588558eab78390d1924cd6b255686ceef133f294d5Ken Sumrall ctx->flags &= E2F_RESET_FLAGS; 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->lost_and_found = 0; 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->bad_lost_and_found = 0; 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_used_map) { 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_inode_bitmap(ctx->inode_used_map); 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_used_map = 0; 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_dir_map) { 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_inode_bitmap(ctx->inode_dir_map); 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_dir_map = 0; 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_reg_map) { 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_inode_bitmap(ctx->inode_reg_map); 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_reg_map = 0; 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->block_found_map) { 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_block_bitmap(ctx->block_found_map); 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->block_found_map = 0; 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_link_info) { 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_icount(ctx->inode_link_info); 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_link_info = 0; 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->journal_io) { 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->fs && ctx->fs->io != ctx->journal_io) 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project io_channel_close(ctx->journal_io); 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->journal_io = 0; 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->fs && ctx->fs->dblist) { 8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_dblist(ctx->fs->dblist); 8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs->dblist = 0; 8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_free_dir_info(ctx); 9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef ENABLE_HTREE 9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_free_dx_dir_info(ctx); 9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->refcount) { 9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ea_refcount_free(ctx->refcount); 9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->refcount = 0; 9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->refcount_extra) { 9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ea_refcount_free(ctx->refcount_extra); 10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->refcount_extra = 0; 10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->block_dup_map) { 10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_block_bitmap(ctx->block_dup_map); 10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->block_dup_map = 0; 10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->block_ea_map) { 10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_block_bitmap(ctx->block_ea_map); 10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->block_ea_map = 0; 10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_bb_map) { 11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_inode_bitmap(ctx->inode_bb_map); 11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_bb_map = 0; 11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_bad_map) { 11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_inode_bitmap(ctx->inode_bad_map); 11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_bad_map = 0; 11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->inode_imagic_map) { 11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_inode_bitmap(ctx->inode_imagic_map); 12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->inode_imagic_map = 0; 12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->dirs_to_hash) { 12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_u32_list_free(ctx->dirs_to_hash); 12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->dirs_to_hash = 0; 12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* 12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Clear the array of invalid meta-data flags 12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->invalid_inode_bitmap_flag) { 13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_mem(&ctx->invalid_inode_bitmap_flag); 13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->invalid_inode_bitmap_flag = 0; 13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->invalid_block_bitmap_flag) { 13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_mem(&ctx->invalid_block_bitmap_flag); 13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->invalid_block_bitmap_flag = 0; 13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->invalid_inode_table_flag) { 13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_mem(&ctx->invalid_inode_table_flag); 14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->invalid_inode_table_flag = 0; 14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* Clear statistic counters */ 14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_directory_count = 0; 14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_regular_count = 0; 14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_blockdev_count = 0; 14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_chardev_count = 0; 14819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_links_count = 0; 14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_symlinks_count = 0; 15019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_fast_symlinks_count = 0; 15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_fifo_count = 0; 15219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_total_count = 0; 15319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_badblocks_count = 0; 15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_sockets_count = 0; 15519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_ind_count = 0; 15619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_dind_count = 0; 15719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_tind_count = 0; 15819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->fs_fragmented = 0; 1593984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt ctx->fs_fragmented_dir = 0; 16019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->large_files = 0; 16119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1623984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt for (i=0; i < MAX_EXTENT_DEPTH_COUNT; i++) 1633984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt ctx->extent_depth_count[i] = 0; 1643984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 16519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project /* Reset the superblock to the user's requested value */ 16619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->superblock = ctx->use_superblock; 1673984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 16819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return 0; 16919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 17019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 17119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid e2fsck_free_context(e2fsck_t ctx) 17219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 17319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (!ctx) 17419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return; 1753984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 17619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_reset_context(ctx); 17719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->blkid) 17819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project blkid_put_cache(ctx->blkid); 17919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 18019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->profile) 18119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project profile_release(ctx->profile); 1823984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 1833984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt if (ctx->filesystem_name) 1843984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt ext2fs_free_mem(&ctx->filesystem_name); 1853984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 1863984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt if (ctx->device_name) 1873984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt ext2fs_free_mem(&ctx->device_name); 1883984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 18919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ext2fs_free_mem(&ctx); 19019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 19119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 19219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 19319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This function runs through the e2fsck passes and calls them all, 19419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * returning restart, abort, or cancel as necessary... 19519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 19619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef void (*pass_t)(e2fsck_t ctx); 19719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 19819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectpass_t e2fsck_passes[] = { 19919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_pass1, e2fsck_pass2, e2fsck_pass3, e2fsck_pass4, 20019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_pass5, 0 }; 20119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 20219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define E2F_FLAG_RUN_RETURN (E2F_FLAG_SIGNAL_MASK|E2F_FLAG_RESTART) 20319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 20419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint e2fsck_run(e2fsck_t ctx) 20519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 20619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int i; 20719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project pass_t e2fsck_pass; 20819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 20919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_SETJMP_H 21019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (setjmp(ctx->abort_loc)) { 21119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->flags &= ~E2F_FLAG_SETJMP_OK; 21219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return (ctx->flags & E2F_FLAG_RUN_RETURN); 21319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 21419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->flags |= E2F_FLAG_SETJMP_OK; 21519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 2163984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 21719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project for (i=0; (e2fsck_pass = e2fsck_passes[i]); i++) { 21819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->flags & E2F_FLAG_RUN_RETURN) 21919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project break; 22019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project e2fsck_pass(ctx); 22119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->progress) 22219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (void) (ctx->progress)(ctx, 0, 0, 0); 22319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 22419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project ctx->flags &= ~E2F_FLAG_SETJMP_OK; 2253984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 22619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ctx->flags & E2F_FLAG_RUN_RETURN) 22719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return (ctx->flags & E2F_FLAG_RUN_RETURN); 22819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project return 0; 22919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 230