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 8efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore 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" 34de8f3a76218255e443ba57dec5d74850180fa75dAndreas Dilger#include "e2p.h" 35ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#else 3654c637d4d29af3e6365779f8b12976abe95a4753Theodore Ts'o#include "ext2fs/ext2_fs.h" 3724b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o#include "ext2fs/ext2fs.h" 38de8f3a76218255e443ba57dec5d74850180fa75dAndreas Dilger#include "e2p/e2p.h" 39ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o#endif 40ca8abba7e0970fd1702db53e3f89ceb68c70768cTheodore Ts'o 41a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#ifdef ENABLE_NLS 42a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#include <libintl.h> 43a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#include <locale.h> 44a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define _(a) (gettext (a)) 45a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#ifdef gettext_noop 46a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define N_(a) gettext_noop (a) 47a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#else 48a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define N_(a) (a) 49a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#endif 50a04eba3f8868af1d9b7b504d3d430c55ed3dc777Theodore Ts'o#ifndef NLS_CAT_NAME 51a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define NLS_CAT_NAME "e2fsprogs" 52a04eba3f8868af1d9b7b504d3d430c55ed3dc777Theodore Ts'o#endif 53a04eba3f8868af1d9b7b504d3d430c55ed3dc777Theodore Ts'o#ifndef LOCALEDIR 54a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define LOCALEDIR "/usr/share/locale" 55a04eba3f8868af1d9b7b504d3d430c55ed3dc777Theodore Ts'o#endif 56a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#else 57a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define _(a) (a) 58a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#define N_(a) a 59a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o#endif 60a13575f4d29a908add19ea27baa102bc6944ee30Theodore Ts'o 6124b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 6224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o/* 63c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o * For the extent map 64c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o */ 65c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'otypedef struct _ext2_extent *ext2_extent; 66c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 67c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* 68c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o * For the simple progress meter 69c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o */ 70c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'otypedef struct ext2_sim_progress *ext2_sim_progmeter; 71c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 72c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* 7305e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o * Flags for the resizer; most are debugging flags only 7405e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o */ 7505e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_IO 0x0001 7605e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_BMOVE 0x0002 7705e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_INODEMAP 0x0004 7805e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_DEBUG_ITABLEMOVE 0x0008 79e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#define RESIZE_DEBUG_RTRACK 0x0010 80e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#define RESIZE_DEBUG_MIN_CALC 0x0020 8105e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o 8205e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_PERCENT_COMPLETE 0x0100 83c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o#define RESIZE_VERBOSE 0x0200 8405e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o 8505e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o/* 86e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * This structure is used for keeping track of how much resources have 87e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * been used for a particular resize2fs pass. 88e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall */ 89e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstruct resource_track { 90e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall const char *desc; 91e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct timeval time_start; 92e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct timeval user_start; 93e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct timeval system_start; 94e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall void *brk_start; 95e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall unsigned long long bytes_read; 96e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall unsigned long long bytes_written; 97e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 98e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 99e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* 10024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * The core state structure for the ext2 resizer 10124b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o */ 10263b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'otypedef struct ext2_resize_struct *ext2_resize_t; 10324b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 10424b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'ostruct ext2_resize_struct { 10524b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o ext2_filsys old_fs; 10624b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o ext2_filsys new_fs; 1071e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o ext2fs_block_bitmap reserve_blocks; 108c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o ext2fs_block_bitmap move_blocks; 109a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o ext2_extent bmap; 110a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o ext2_extent imap; 111e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t needed_blocks; 11205e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o int flags; 11305e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o char *itable_buf; 114a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o 115a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o /* 116a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o * For the block allocator 117a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o */ 118e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t new_blk; 119a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o int alloc_state; 120a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o 121a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o /* 122a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o * For the progress meter 123a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o */ 1243b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o errcode_t (*progress)(ext2_resize_t rfs, int pass, 12563b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long cur, 12663b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long max); 12763b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o void *prog_data; 12824b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o}; 12924b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 13063b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o/* 13163b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o * Progress pass numbers... 13263b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o */ 133a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_EXTEND_ITABLE_PASS 1 13463b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o#define E2_RSZ_BLOCK_RELOC_PASS 2 135a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_INODE_SCAN_PASS 3 136a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_INODE_REF_UPD_PASS 4 137a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_MOVE_ITABLE_PASS 5 13863b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o 13924b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 14024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o/* prototypes */ 141e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags, 1423b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o errcode_t (*progress)(ext2_resize_t rfs, 1433b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o int pass, unsigned long cur, 14463b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long max)); 14563b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o 146efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, 147c09043f1abb99c73d681e630ee0a4b142e4abf6bTheodore Ts'o ext2fs_block_bitmap reserve_blocks, 148e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t new_size); 149e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags); 150bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o 151bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o 152c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* extent.c */ 153c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent, 154e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall __u64 size); 155c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_free_extent_table(ext2_extent extent); 156c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_add_extent_entry(ext2_extent extent, 157e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall __u64 old_loc, __u64 new_loc); 158e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern __u64 ext2fs_extent_translate(ext2_extent extent, __u64 old_loc); 159c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_extent_dump(ext2_extent extent, FILE *out); 160e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u64 *old_loc, 161e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall __u64 *new_loc, __u64 *size); 162e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 163e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* main.c */ 164e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern char *program_name; 165f404167dda29a59d2be2882328aeb074b9899669Theodore Ts'o 166bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o/* online.c */ 167efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt, 168e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t *new_size, int flags); 169e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 170e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* resource_track.c */ 171e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void init_resource_track(struct resource_track *track, const char *desc, 172e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall io_channel channel); 173e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void print_resource_track(ext2_resize_t rfs, 174e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct resource_track *track, 175e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall io_channel channel); 1761eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o 177c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* sim_progress.c */ 178c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog, 179c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o const char *label, 180c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o int labelwidth, int barwidth, 181c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o __u32 maxdone, int flags); 182c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_progress_update(ext2_sim_progmeter prog, 183c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o __u32 current); 184c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_progress_close(ext2_sim_progmeter prog); 185c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 186c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 187