resize2fs.h revision 1eb31c4885156b595e6ceb4516cb1e1fb2d251fd
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 791eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o#define RESIZE_DEBUG_RTRACK 0x0010 8005e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o 8105e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o#define RESIZE_PERCENT_COMPLETE 0x0100 82c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o#define RESIZE_VERBOSE 0x0200 8305e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o 8405e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o/* 851eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o * This structure is used for keeping track of how much resources have 861eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o * been used for a particular resize2fs pass. 871eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o */ 881eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'ostruct resource_track { 891eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o const char *desc; 901eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o struct timeval time_start; 911eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o struct timeval user_start; 921eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o struct timeval system_start; 931eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o void *brk_start; 941eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o unsigned long long bytes_read; 951eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o unsigned long long bytes_written; 961eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o}; 971eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o 981eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o/* 9924b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o * The core state structure for the ext2 resizer 10024b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o */ 10163b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'otypedef struct ext2_resize_struct *ext2_resize_t; 10224b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 10324b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'ostruct ext2_resize_struct { 10424b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o ext2_filsys old_fs; 10524b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o ext2_filsys new_fs; 1061e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o ext2fs_block_bitmap reserve_blocks; 107c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o ext2fs_block_bitmap move_blocks; 108a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o ext2_extent bmap; 109a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o ext2_extent imap; 1108728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson blk64_t needed_blocks; 11105e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o int flags; 11205e112a11b6508c2b12d5d4ee0c322171db9b538Theodore Ts'o char *itable_buf; 113a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o 114a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o /* 115a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o * For the block allocator 116a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o */ 1178728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson blk64_t new_blk; 118a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o int alloc_state; 119a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o 120a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o /* 121a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o * For the progress meter 122a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o */ 1233b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o errcode_t (*progress)(ext2_resize_t rfs, int pass, 12463b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long cur, 12563b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long max); 12663b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o void *prog_data; 12724b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o}; 12824b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 12963b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o/* 13063b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o * Progress pass numbers... 13163b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o */ 132a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_EXTEND_ITABLE_PASS 1 13363b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o#define E2_RSZ_BLOCK_RELOC_PASS 2 134a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_INODE_SCAN_PASS 3 135a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_INODE_REF_UPD_PASS 4 136a8519a2dbec429846d89fee581a2ecb829904cd2Theodore Ts'o#define E2_RSZ_MOVE_ITABLE_PASS 5 13763b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o 13824b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o 13924b2c7a7a14cec8480a75af7d535cf267e6abe1fTheodore Ts'o/* prototypes */ 1408728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Hensonextern errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags, 1413b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o errcode_t (*progress)(ext2_resize_t rfs, 1423b627e8d6735fd81906117d580ee70292b2cfaafTheodore Ts'o int pass, unsigned long cur, 14363b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o unsigned long max)); 14463b44fbe303ea00118cbe24cbbcde351a9bc0aacTheodore Ts'o 145efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs, 146c09043f1abb99c73d681e630ee0a4b142e4abf6bTheodore Ts'o ext2fs_block_bitmap reserve_blocks, 1478728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson blk64_t new_size); 1488728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Hensonextern blk64_t calculate_minimum_resize_size(ext2_filsys fs); 149bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o 150bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o 151c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* extent.c */ 152c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent, 1538728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson __u64 size); 154c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_free_extent_table(ext2_extent extent); 155c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_add_extent_entry(ext2_extent extent, 1568728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson __u64 old_loc, __u64 new_loc); 1578728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Hensonextern __u64 ext2fs_extent_translate(ext2_extent extent, __u64 old_loc); 158c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_extent_dump(ext2_extent extent, FILE *out); 1598728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Hensonextern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u64 *old_loc, 1608728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson __u64 *new_loc, __u64 *size); 161c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 162bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o/* online.c */ 163efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt, 1648728d50657e90e0ca39981106ad617d600b9acadValerie Aurora Henson blk64_t *new_size, int flags); 165bf69235ad0073c80386b70caba0e1b58e5f85697Theodore Ts'o 1661eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o/* resource_track.c */ 1671eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'oextern void init_resource_track(struct resource_track *track, const char *desc, 1681eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o io_channel channel); 1691eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'oextern void print_resource_track(ext2_resize_t rfs, 1701eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o struct resource_track *track, 1711eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o io_channel channel); 1721eb31c4885156b595e6ceb4516cb1e1fb2d251fdTheodore Ts'o 173c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o/* sim_progress.c */ 174c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog, 175c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o const char *label, 176c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o int labelwidth, int barwidth, 177c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o __u32 maxdone, int flags); 178c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_progress_update(ext2_sim_progmeter prog, 179c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o __u32 current); 180c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'oextern void ext2fs_progress_close(ext2_sim_progmeter prog); 181c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 182c762c8e63216a301c9de7d24c6136d8370378a08Theodore Ts'o 183