blob: 6f262c27734cbcfbe60357989940ff21297a9515 [file] [log] [blame]
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +00001/*
2 * resize2fs.h --- ext2 resizer header file
3 *
Theodore Ts'o0cee8a52000-04-06 21:38:34 +00004 * Copyright (C) 1997, 1998 by Theodore Ts'o and
5 * PowerQuest, Inc.
6 *
7 * Copyright (C) 1999, 2000 by Theosore Ts'o
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +00008 *
9 * %Begin-Header%
Theodore Ts'o0cee8a52000-04-06 21:38:34 +000010 * This file may be redistributed under the terms of the GNU Public
11 * License.
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000012 * %End-Header%
13 */
14
15#include <stdio.h>
16#include <string.h>
Theodore Ts'o169cb541998-08-01 04:33:31 +000017#ifdef HAVE_UNISTD_H
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000018#include <unistd.h>
Theodore Ts'o169cb541998-08-01 04:33:31 +000019#endif
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000020#include <stdlib.h>
Theodore Ts'od40259f1997-10-20 00:44:26 +000021#ifdef HAVE_SYS_TYPES_H
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000022#include <sys/types.h>
Theodore Ts'od40259f1997-10-20 00:44:26 +000023#endif
24#ifdef HAVE_SYS_TIME_H
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000025#include <sys/time.h>
Theodore Ts'od40259f1997-10-20 00:44:26 +000026#endif
Theodore Ts'obc75f2a1997-09-04 00:43:10 +000027#if HAVE_ERRNO_H
28#include <errno.h>
29#endif
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000030
Theodore Ts'oca8abba1998-01-19 14:55:24 +000031#if EXT2_FLAT_INCLUDES
32#include "ext2_fs.h"
33#include "ext2fs.h"
34#else
Theodore Ts'o54c637d2001-05-14 11:45:38 +000035#include "ext2fs/ext2_fs.h"
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000036#include "ext2fs/ext2fs.h"
Theodore Ts'oca8abba1998-01-19 14:55:24 +000037#endif
38
Theodore Ts'oa13575f2000-06-12 22:06:16 +000039#ifdef ENABLE_NLS
40#include <libintl.h>
41#include <locale.h>
42#define _(a) (gettext (a))
43#ifdef gettext_noop
44#define N_(a) gettext_noop (a)
45#else
46#define N_(a) (a)
47#endif
Theodore Ts'oa04eba32003-05-03 16:35:17 -040048#ifndef NLS_CAT_NAME
Theodore Ts'oa13575f2000-06-12 22:06:16 +000049#define NLS_CAT_NAME "e2fsprogs"
Theodore Ts'oa04eba32003-05-03 16:35:17 -040050#endif
51#ifndef LOCALEDIR
Theodore Ts'oa13575f2000-06-12 22:06:16 +000052#define LOCALEDIR "/usr/share/locale"
Theodore Ts'oa04eba32003-05-03 16:35:17 -040053#endif
Theodore Ts'oa13575f2000-06-12 22:06:16 +000054#else
55#define _(a) (a)
56#define N_(a) a
57#endif
58
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000059
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000060/*
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000061 * For the extent map
62 */
63typedef struct _ext2_extent *ext2_extent;
64
65/*
66 * For the simple progress meter
67 */
68typedef struct ext2_sim_progress *ext2_sim_progmeter;
69
70/*
Theodore Ts'o05e112a1997-06-14 07:28:44 +000071 * Flags for the resizer; most are debugging flags only
72 */
73#define RESIZE_DEBUG_IO 0x0001
74#define RESIZE_DEBUG_BMOVE 0x0002
75#define RESIZE_DEBUG_INODEMAP 0x0004
76#define RESIZE_DEBUG_ITABLEMOVE 0x0008
77
78#define RESIZE_PERCENT_COMPLETE 0x0100
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000079#define RESIZE_VERBOSE 0x0200
Theodore Ts'o05e112a1997-06-14 07:28:44 +000080
81/*
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000082 * The core state structure for the ext2 resizer
83 */
Theodore Ts'o63b44fb1998-02-13 22:58:18 +000084typedef struct ext2_resize_struct *ext2_resize_t;
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +000085
86struct ext2_resize_struct {
87 ext2_filsys old_fs;
88 ext2_filsys new_fs;
Theodore Ts'o1e1da291997-06-09 14:51:29 +000089 ext2fs_block_bitmap reserve_blocks;
Theodore Ts'oc762c8e1997-06-17 03:52:12 +000090 ext2fs_block_bitmap move_blocks;
Theodore Ts'oa8519a21998-02-16 22:16:20 +000091 ext2_extent bmap;
92 ext2_extent imap;
Theodore Ts'o1e1da291997-06-09 14:51:29 +000093 int needed_blocks;
Theodore Ts'o05e112a1997-06-14 07:28:44 +000094 int flags;
95 char *itable_buf;
Theodore Ts'oa8519a21998-02-16 22:16:20 +000096
97 /*
98 * For the block allocator
99 */
100 blk_t new_blk;
101 int alloc_state;
102
103 /*
104 * For the progress meter
105 */
Theodore Ts'o3b627e81998-02-24 20:24:49 +0000106 errcode_t (*progress)(ext2_resize_t rfs, int pass,
Theodore Ts'o63b44fb1998-02-13 22:58:18 +0000107 unsigned long cur,
108 unsigned long max);
109 void *prog_data;
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +0000110};
111
Theodore Ts'o63b44fb1998-02-13 22:58:18 +0000112/*
113 * Progress pass numbers...
114 */
Theodore Ts'oa8519a21998-02-16 22:16:20 +0000115#define E2_RSZ_EXTEND_ITABLE_PASS 1
Theodore Ts'o63b44fb1998-02-13 22:58:18 +0000116#define E2_RSZ_BLOCK_RELOC_PASS 2
Theodore Ts'oa8519a21998-02-16 22:16:20 +0000117#define E2_RSZ_INODE_SCAN_PASS 3
118#define E2_RSZ_INODE_REF_UPD_PASS 4
119#define E2_RSZ_MOVE_ITABLE_PASS 5
Theodore Ts'o63b44fb1998-02-13 22:58:18 +0000120
Theodore Ts'o24b2c7a1997-06-07 20:42:58 +0000121
122/* prototypes */
Theodore Ts'o116db1b2002-04-01 01:28:30 -0500123extern errcode_t resize_fs(ext2_filsys fs, blk_t *new_size, int flags,
Theodore Ts'o3b627e81998-02-24 20:24:49 +0000124 errcode_t (*progress)(ext2_resize_t rfs,
125 int pass, unsigned long cur,
Theodore Ts'o63b44fb1998-02-13 22:58:18 +0000126 unsigned long max));
127
Theodore Ts'oc762c8e1997-06-17 03:52:12 +0000128/* extent.c */
129extern errcode_t ext2fs_create_extent_table(ext2_extent *ret_extent,
130 int size);
131extern void ext2fs_free_extent_table(ext2_extent extent);
132extern errcode_t ext2fs_add_extent_entry(ext2_extent extent,
Theodore Ts'oca8abba1998-01-19 14:55:24 +0000133 __u32 old_loc, __u32 new_loc);
134extern __u32 ext2fs_extent_translate(ext2_extent extent, __u32 old_loc);
Theodore Ts'oc762c8e1997-06-17 03:52:12 +0000135extern void ext2fs_extent_dump(ext2_extent extent, FILE *out);
Theodore Ts'oca8abba1998-01-19 14:55:24 +0000136extern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u32 *old_loc,
137 __u32 *new_loc, int *size);
Theodore Ts'oc762c8e1997-06-17 03:52:12 +0000138
139/* sim_progress.c */
140extern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
141 const char *label,
142 int labelwidth, int barwidth,
143 __u32 maxdone, int flags);
144extern void ext2fs_progress_update(ext2_sim_progmeter prog,
145 __u32 current);
146extern void ext2fs_progress_close(ext2_sim_progmeter prog);
147
148