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