e2fsck.h revision 8bf191e8660939687ef35c013066d2082cb16722
13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * e2fsck.h 33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Copyright (C) 1993, 1994 Theodore Ts'o. This file may be 53839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * redistributed under the terms of the GNU Public License. 63839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 73839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 83839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 93839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <stdio.h> 103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <string.h> 113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <unistd.h> 123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <stdlib.h> 13b2da22d14b6ac5aa5080c39cab46b4aa4178f90fTheodore Ts'o#ifdef HAVE_SYS_TYPES_H 143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/types.h> 15b2da22d14b6ac5aa5080c39cab46b4aa4178f90fTheodore Ts'o#endif 16b2da22d14b6ac5aa5080c39cab46b4aa4178f90fTheodore Ts'o#ifdef HAVE_SYS_TIME_H 173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/time.h> 18b2da22d14b6ac5aa5080c39cab46b4aa4178f90fTheodore Ts'o#endif 193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef HAVE_LINUX_FS_H 213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <linux/fs.h> 2250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif 233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <linux/ext2_fs.h> 243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include "ext2fs/ext2fs.h" 263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#ifdef __STDC__ 283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define NOARGS void 293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#else 303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define NOARGS 313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define const 323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif 333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Exit codes used by fsck-type programs 363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_OK 0 /* No errors */ 383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_NONDESTRUCT 1 /* File system errors corrected */ 393839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_REBOOT 2 /* System should be rebooted */ 403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_UNCORRECTED 4 /* File system errors left uncorrected */ 413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_ERROR 8 /* Operational error */ 423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_USAGE 16 /* Usage or syntax error */ 433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define FSCK_LIBRARY 128 /* Shared library error */ 443839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 453839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 46f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o * The last ext2fs revision level that this version of e2fsck is able to 47f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o * support 48f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o */ 491e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#define E2FSCK_CURRENT_REV 1 50f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 51f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o/* 523839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * The directory information structure; stores directory information 533839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * collected in earlier passes, to avoid disk i/o in fetching the 5421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * directory information. 553839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 563839e65723771b85975f4263102dd3ceec4523cTheodore Ts'ostruct dir_info { 573839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o ino_t ino; /* Inode number */ 583839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o ino_t dotdot; /* Parent according to '..' */ 593839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o ino_t parent; /* Parent according to treewalk */ 603839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}; 613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 628bf191e8660939687ef35c013066d2082cb16722Theodore Ts'o#ifdef RESOURCE_TRACK 633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 643839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * This structure is used for keeping track of how much resources have 653839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * been used for a particular pass of e2fsck. 663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 673839e65723771b85975f4263102dd3ceec4523cTheodore Ts'ostruct resource_track { 683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct timeval time_start; 693839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct timeval user_start; 703839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o struct timeval system_start; 713839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o void *brk_start; 723839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}; 738bf191e8660939687ef35c013066d2082cb16722Theodore Ts'o#endif 743839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 753839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 761b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * E2fsck options 773839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 781b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_READONLY 0x0001 791b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_PREEN 0x0002 801b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_YES 0x0004 811b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_NO 0x0008 821b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_TIME 0x0010 831b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_TIME2 0x0020 841b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_CHECKBLOCKS 0x0040 851b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o#define E2F_OPT_DEBUG 0x0080 863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 871b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o/* 881b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * This is the global e2fsck structure. 891b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o */ 901b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'ostruct e2fsck_struct { 911b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2_filsys fs; 921b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o const char *program_name; 931b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o const char *filesystem_name; 941b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o const char *device_name; 951b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int options; 961b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o blk_t use_superblock; /* sb requested by user */ 971b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o blk_t superblock; /* sb used to open fs */ 981b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 991b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_inode_bitmap inode_used_map; /* Inodes which are in use */ 1001b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_inode_bitmap inode_bad_map; /* Inodes which are bad somehow */ 1011b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_inode_bitmap inode_dir_map; /* Inodes which are directories */ 1021b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_inode_bitmap inode_bb_map; /* Inodes which are in bad blocks */ 1031b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1041b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_block_bitmap block_found_map; /* Blocks which are in use */ 1051b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_block_bitmap block_dup_map; /* Blks referenced more than once */ 1061b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2fs_block_bitmap block_illegal_map; /* Meta-data blocks */ 1071b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1081b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o /* 1091b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * Inode count arrays 1101b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o */ 1111b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2_icount_t inode_count; 1121b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ext2_icount_t inode_link_info; 1131b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1141b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o /* 1151b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * Array of flags indicating whether an inode bitmap, block 1161b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * bitmap, or inode table is invalid 1171b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o */ 1181b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int *invalid_inode_bitmap_flag; 1191b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int *invalid_block_bitmap_flag; 1201b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int *invalid_inode_table_flag; 1211b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int invalid_bitmaps; /* There are invalid bitmaps/itable */ 1221b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1231b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o /* 1241b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * For pass1_check_directory and pass1_get_blocks 1251b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o */ 1261b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o ino_t stashed_ino; 1271b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o struct ext2_inode *stashed_inode; 1281b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1291b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o /* 1301b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * Tuning parameters 1311b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o */ 1321b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int process_inode_size; 1331b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int inode_buffer_blocks; 1341b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1358bf191e8660939687ef35c013066d2082cb16722Theodore Ts'o#ifdef RESOURCE_TRACK 1361b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o /* 1371b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * For timing purposes 1381b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o */ 1391b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o struct resource_track global_rtrack; 1408bf191e8660939687ef35c013066d2082cb16722Theodore Ts'o#endif 1411b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1421b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o /* File counts */ 1431b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_directory_count; 1441b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_regular_count; 1451b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_blockdev_count; 1461b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_chardev_count; 1471b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_links_count; 1481b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_symlinks_count; 1491b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_fast_symlinks_count; 1501b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_fifo_count; 1511b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_total_count; 1521b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_badblocks_count; 1531b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_sockets_count; 1541b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_ind_count; 1551b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_dind_count; 1561b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_tind_count; 1571b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o int fs_fragmented; 1581b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o}; 159f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 1601b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'otypedef struct e2fsck_struct *e2fsck_t; 161f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o 1623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 1631b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o * Variables 1641e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o */ 1651b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern int restart_e2fsck; 1661e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 1671e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* 1683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Procedure declarations 1693839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 1703839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1711b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void pass1(e2fsck_t ctx); 1721b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void pass1_dupblocks(e2fsck_t ctx, char *block_buf); 1731b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void pass2(e2fsck_t ctx); 1741b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void pass3(e2fsck_t ctx); 1751b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void pass4(e2fsck_t ctx); 1761b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void pass5(e2fsck_t ctx); 1771b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 1781b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o/* e2fsck.c */ 1791b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oerrcode_t e2fsck_allocate_context(e2fsck_t *ret); 1801b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oerrcode_t e2fsck_reset_context(e2fsck_t ctx); 1811b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'ovoid e2fsck_free_context(e2fsck_t ctx); 1823839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1831e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* pass1.c */ 1841e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern errcode_t pass1_check_directory(ext2_filsys fs, ino_t ino); 1851e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern errcode_t pass1_get_blocks(ext2_filsys fs, ino_t ino, blk_t *blocks); 1861e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern errcode_t pass1_read_inode(ext2_filsys fs, ino_t ino, 1871e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o struct ext2_inode *inode); 1881e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern errcode_t pass1_write_inode(ext2_filsys fs, ino_t ino, 1891e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o struct ext2_inode *inode); 1907cf73dcd3d173d88ceab26d381f4abac362d8518Theodore Ts'oextern int e2fsck_pass1_check_device_inode(struct ext2_inode *inode); 1911e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 1923839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* badblock.c */ 1931b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void read_bad_blocks_file(e2fsck_t ctx, const char *bad_blocks_file, 1943839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o int replace_bad_blocks); 1951b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void test_disk(e2fsck_t ctx); 1963839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1973839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* dirinfo.c */ 19821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void add_dir_info(ext2_filsys fs, ino_t ino, ino_t parent); 1993839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern struct dir_info *get_dir_info(ino_t ino); 2003839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void free_dir_info(ext2_filsys fs); 2013839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int get_num_dirs(ext2_filsys fs); 20221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern struct dir_info *dir_info_iter(int *control); 2033839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2043839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* ehandler.c */ 2053839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ehandler_operation(const char *op); 2063839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void ehandler_init(io_channel channel); 2073839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2081b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o/* super.c */ 2091b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'ovoid check_super_block(e2fsck_t ctx); 2101b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o 2111e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* swapfs.c */ 2121b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'ovoid swap_filesys(e2fsck_t ctx); 2131e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 2143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* util.c */ 2153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void *allocate_memory(int size, const char *description); 2161b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern int ask(e2fsck_t ctx, const char * string, int def); 2173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int ask_yn(const char * string, int def); 2183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void fatal_error (const char * fmt_string); 2191b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void read_bitmaps(e2fsck_t ctx); 2201b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void write_bitmaps(e2fsck_t ctx); 2211b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void preenhalt(e2fsck_t ctx); 2228bf191e8660939687ef35c013066d2082cb16722Theodore Ts'o#ifdef RESOURCE_TRACK 2231b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern void print_resource_track(const char *desc, 2241b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'o struct resource_track *track); 2253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void init_resource_track(struct resource_track *track); 2268bf191e8660939687ef35c013066d2082cb16722Theodore Ts'o#endif 2273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int inode_has_valid_blocks(struct ext2_inode *inode); 228f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern void e2fsck_read_inode(ext2_filsys fs, unsigned long ino, 229f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o struct ext2_inode * inode, const char * proc); 230f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern void e2fsck_write_inode(ext2_filsys fs, unsigned long ino, 231f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o struct ext2_inode * inode, const char * proc); 2323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#ifdef MTRACE 2333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void mtrace_print(char *mesg); 2343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif 2351b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern blk_t get_backup_sb(ext2_filsys fs); 2363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define die(str) fatal_error(str) 2383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 2393839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 2403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * pass3.c 2413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 2421b6bf1759af884957234b7dce768b785f792abd0Theodore Ts'oextern int reconnect_file(e2fsck_t ctx, ino_t inode); 243