Whamcloud - gitweb
Many files:
[tools/e2fsprogs.git] / resize / resize2fs.h
1 /*
2  * resize2fs.h --- ext2 resizer header file
3  *
4  * Copyright (C) 1997 Theodore Ts'o
5  * 
6  * %Begin-Header%
7  * All rights reserved.
8  * %End-Header%
9  */
10
11 #include <stdio.h>
12 #include <string.h>
13 #include <unistd.h>
14 #include <stdlib.h>
15 #ifdef HAVE_SYS_TYPES_H
16 #include <sys/types.h>
17 #endif
18 #ifdef HAVE_SYS_TIME_H
19 #include <sys/time.h>
20 #endif
21 #if HAVE_ERRNO_H
22 #include <errno.h>
23 #endif
24
25 #ifdef HAVE_LINUX_FS_H
26 #include <linux/fs.h>
27 #endif
28
29 #if EXT2_FLAT_INCLUDES
30 #include "ext2_fs.h"
31 #include "ext2fs.h"
32 #else
33 #include <linux/ext2_fs.h>
34 #include "ext2fs/ext2fs.h"
35 #endif
36
37
38 /*
39  * For the extent map
40  */
41 typedef struct _ext2_extent *ext2_extent;
42
43 /*
44  * For the simple progress meter
45  */
46 typedef struct ext2_sim_progress *ext2_sim_progmeter;
47
48 /*
49  * Flags for the resizer; most are debugging flags only
50  */
51 #define RESIZE_DEBUG_IO                 0x0001
52 #define RESIZE_DEBUG_BMOVE              0x0002
53 #define RESIZE_DEBUG_INODEMAP           0x0004
54 #define RESIZE_DEBUG_ITABLEMOVE         0x0008
55
56 #define RESIZE_PERCENT_COMPLETE         0x0100
57 #define RESIZE_VERBOSE                  0x0200
58
59 /*
60  * The core state structure for the ext2 resizer
61  */
62 typedef struct ext2_resize_struct *ext2_resize_t;
63
64 struct ext2_resize_struct {
65         ext2_filsys     old_fs;
66         ext2_filsys     new_fs;
67         ext2fs_block_bitmap reserve_blocks;
68         ext2fs_block_bitmap move_blocks;
69         int             needed_blocks;
70         int             flags;
71         char            *itable_buf;
72         void            (*progress)(ext2_resize_t rfs, int pass,
73                                     unsigned long cur,
74                                     unsigned long max);
75         void            *prog_data;
76 };
77
78 /*
79  * Progress pass numbers...
80  */
81 #define E2_RSZ_ADJUST_SUPERBLOCK_PASS   1
82 #define E2_RSZ_BLOCK_RELOC_PASS         2
83 #define E2_RSZ_BLOCK_REF_UPD_PASS       3
84 #define E2_RSZ_INODE_FIND_DIR_PASS      4
85 #define E2_RSZ_INODE_RELOC_PASS         5
86 #define E2_RSZ_INODE_REF_UPD_PASS       6
87 #define E2_RSZ_MOVE_ITABLE_PASS         7
88
89
90 /* prototypes */
91 extern errcode_t resize_fs(ext2_filsys fs, blk_t new_size, int flags,
92                            void (*progress)(ext2_resize_t rfs, int pass,
93                                             unsigned long cur,
94                                             unsigned long max));
95
96 extern errcode_t ext2fs_inode_move(ext2_resize_t rfs);
97 extern errcode_t ext2fs_block_move(ext2_resize_t rfs);
98
99 /* extent.c */
100 extern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent,
101                                             int size);
102 extern void ext2fs_free_extent_table(ext2_extent extent);
103 extern errcode_t ext2fs_add_extent_entry(ext2_extent extent,
104                                          __u32 old_loc, __u32 new_loc);
105 extern __u32 ext2fs_extent_translate(ext2_extent extent, __u32 old_loc);
106 extern void ext2fs_extent_dump(ext2_extent extent, FILE *out);
107 extern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u32 *old_loc,
108                                        __u32 *new_loc, int *size);
109
110 /* sim_progress.c */
111 extern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
112                                       const char *label,
113                                       int labelwidth, int barwidth,
114                                       __u32 maxdone, int flags);
115 extern void ext2fs_progress_update(ext2_sim_progmeter prog,
116                                         __u32 current);
117 extern void ext2fs_progress_close(ext2_sim_progmeter prog);
118
119