resize2fs.h revision 0cee8a5c423c2a1054c7366e74870592ec8db95e
124b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o/* 224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * resize2fs.h --- ext2 resizer header file 324b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * 40cee8a5c423c2a1054c7366e74870592ec8db95eTheodore Ts'o * Copyright (C) 1997, 1998 by Theodore Ts'o and 50cee8a5c423c2a1054c7366e74870592ec8db95eTheodore Ts'o * PowerQuest, Inc. 60cee8a5c423c2a1054c7366e74870592ec8db95eTheodore Ts'o * 70cee8a5c423c2a1054c7366e74870592ec8db95eTheodore Ts'o * Copyright (C) 1999, 2000 by Theosore Ts'o 824b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * 924b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * %Begin-Header% 100cee8a5c423c2a1054c7366e74870592ec8db95eTheodore Ts'o * This file may be redistributed under the terms of the GNU Public 110cee8a5c423c2a1054c7366e74870592ec8db95eTheodore Ts'o * License. 1224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * %End-Header% 1324b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o */ 1424b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 1524b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include <stdio.h> 1624b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include <string.h> 17169cb54646e2d6f9f6e554bba80dd4d262a3744eTheodore Ts'o#ifdef HAVE_UNISTD_H 1824b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include <unistd.h> 19169cb54646e2d6f9f6e554bba80dd4d262a3744eTheodore Ts'o#endif 2024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include <stdlib.h> 21d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o#ifdef HAVE_SYS_TYPES_H 2224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include <sys/types.h> 23d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o#endif 24d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o#ifdef HAVE_SYS_TIME_H 2524b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include <sys/time.h> 26d40259fd552d942903f2fd0b426c75a5c2516017Theodore Ts'o#endif 27bc75f2a1eb805538b2313185526a549d126c275dTheodore Ts'o#if HAVE_ERRNO_H 28bc75f2a1eb805538b2313185526a549d126c275dTheodore Ts'o#include <errno.h> 29bc75f2a1eb805538b2313185526a549d126c275dTheodore Ts'o#endif 3024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 31ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#if EXT2_FLAT_INCLUDES 32ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#include "ext2_fs.h" 33ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#include "ext2fs.h" 34ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#else 35ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#include <linux/ext2_fs.h> 3624b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include "ext2fs/ext2fs.h" 37ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#endif 38ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o 3924b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 4024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o/* 41c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o * For the extent map 42c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o */ 43c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'otypedef struct _ext2_extent *ext2_extent; 44c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 45c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* 46c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o * For the simple progress meter 47c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o */ 48c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'otypedef struct ext2_sim_progress *ext2_sim_progmeter; 49c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 50c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* 5105e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o * Flags for the resizer; most are debugging flags only 5205e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o */ 5305e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_IO 0x0001 5405e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_BMOVE 0x0002 5505e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_INODEMAP 0x0004 5605e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_ITABLEMOVE 0x0008 5705e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o 5805e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_PERCENT_COMPLETE 0x0100 59c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o#define RESIZE_VERBOSE 0x0200 6005e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o 6105e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o/* 6224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * The core state structure for the ext2 resizer 6324b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o */ 6463b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'otypedef struct ext2_resize_struct *ext2_resize_t; 6524b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 6624b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'ostruct ext2_resize_struct { 6724b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o ext2_filsys old_fs; 6824b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o ext2_filsys new_fs; 691e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o ext2fs_block_bitmap reserve_blocks; 70c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o ext2fs_block_bitmap move_blocks; 71a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o ext2_extent bmap; 72a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o ext2_extent imap; 731e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o int needed_blocks; 7405e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o int flags; 7505e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o char *itable_buf; 76a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o 77a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o /* 78a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o * For the block allocator 79a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o */ 80a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o blk_t new_blk; 81a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o int alloc_state; 82a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o 83a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o /* 84a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o * For the progress meter 85a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o */ 863b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o errcode_t (*progress)(ext2_resize_t rfs, int pass, 8763b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long cur, 8863b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long max); 8963b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o void *prog_data; 9024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o}; 9124b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 9263b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o/* 9363b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o * Progress pass numbers... 9463b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o */ 95a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_EXTEND_ITABLE_PASS 1 9663b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o#define E2_RSZ_BLOCK_RELOC_PASS 2 97a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_INODE_SCAN_PASS 3 98a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_INODE_REF_UPD_PASS 4 99a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_MOVE_ITABLE_PASS 5 10063b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o 10124b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 10224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o/* prototypes */ 10363b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'oextern errcode_t resize_fs(ext2_filsys fs, blk_t new_size, int flags, 1043b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o errcode_t (*progress)(ext2_resize_t rfs, 1053b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o int pass, unsigned long cur, 10663b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long max)); 10763b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o 108c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* extent.c */ 109c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent, 110c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o int size); 111c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_free_extent_table(ext2_extent extent); 112c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_add_extent_entry(ext2_extent extent, 113ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o __u32 old_loc, __u32 new_loc); 114ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'oextern __u32 ext2fs_extent_translate(ext2_extent extent, __u32 old_loc); 115c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_extent_dump(ext2_extent extent, FILE *out); 116ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'oextern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u32 *old_loc, 117ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o __u32 *new_loc, int *size); 118c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 119c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* sim_progress.c */ 120c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog, 121c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o const char *label, 122c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o int labelwidth, int barwidth, 123c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o __u32 maxdone, int flags); 124c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_progress_update(ext2_sim_progmeter prog, 125c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o __u32 current); 126c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_progress_close(ext2_sim_progmeter prog); 127c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 128c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 129