blob: 3cf21b95940802f8f17016bc616b64a5939731b8 [file] [log] [blame]
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +00001/*
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>
Theodore Ts'od40259f1997-10-20 00:44:26 +000015#ifdef HAVE_SYS_TYPES_H
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000016#include <sys/types.h>
Theodore Ts'od40259f1997-10-20 00:44:26 +000017#endif
18#ifdef HAVE_SYS_TIME_H
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000019#include <sys/time.h>
Theodore Ts'od40259f1997-10-20 00:44:26 +000020#endif
Theodore Ts'obc75f2a1997-09-04 00:43:10 +000021#if HAVE_ERRNO_H
22#include <errno.h>
23#endif
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000024
25#ifdef HAVE_LINUX_FS_H
26#include <linux/fs.h>
27#endif
28#include <linux/ext2_fs.h>
29
30#include "ext2fs/ext2fs.h"
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000031
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000032/*
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000033 * For the extent map
34 */
35typedef struct _ext2_extent *ext2_extent;
36
37/*
38 * For the simple progress meter
39 */
40typedef struct ext2_sim_progress *ext2_sim_progmeter;
41
42/*
Theodore Ts'o05e112a1997-06-14 07:28:44 +000043 * Flags for the resizer; most are debugging flags only
44 */
45#define RESIZE_DEBUG_IO 0x0001
46#define RESIZE_DEBUG_BMOVE 0x0002
47#define RESIZE_DEBUG_INODEMAP 0x0004
48#define RESIZE_DEBUG_ITABLEMOVE 0x0008
49
50#define RESIZE_PERCENT_COMPLETE 0x0100
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000051#define RESIZE_VERBOSE 0x0200
Theodore Ts'o05e112a1997-06-14 07:28:44 +000052
53/*
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000054 * The core state structure for the ext2 resizer
55 */
56
57struct ext2_resize_struct {
58 ext2_filsys old_fs;
59 ext2_filsys new_fs;
Theodore Ts'o1e1da291997-06-09 14:51:29 +000060 ext2fs_block_bitmap reserve_blocks;
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000061 ext2fs_block_bitmap move_blocks;
Theodore Ts'o1e1da291997-06-09 14:51:29 +000062 int needed_blocks;
Theodore Ts'o05e112a1997-06-14 07:28:44 +000063 int flags;
64 char *itable_buf;
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000065};
66
67typedef struct ext2_resize_struct *ext2_resize_t;
68
69/* prototypes */
Theodore Ts'o05e112a1997-06-14 07:28:44 +000070extern errcode_t resize_fs(ext2_filsys fs, blk_t new_size, int flags);
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000071extern errcode_t ext2fs_inode_move(ext2_resize_t rfs);
72extern errcode_t ext2fs_block_move(ext2_resize_t rfs);
73
74/* extent.c */
75extern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent,
76 int size);
77extern void ext2fs_free_extent_table(ext2_extent extent);
78extern errcode_t ext2fs_add_extent_entry(ext2_extent extent,
79 __u32 old, __u32 new);
80extern __u32 ext2fs_extent_translate(ext2_extent extent, __u32 old);
81extern void ext2fs_extent_dump(ext2_extent extent, FILE *out);
82extern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u32 *old,
83 __u32 *new, int *size);
84
85/* sim_progress.c */
86extern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
87 const char *label,
88 int labelwidth, int barwidth,
89 __u32 maxdone, int flags);
90extern void ext2fs_progress_update(ext2_sim_progmeter prog,
91 __u32 current);
92extern void ext2fs_progress_close(ext2_sim_progmeter prog);
93
94