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