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