[init-ifupdown] netbase split to netbase and init-ifdown
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-core / busybox / busybox-1.19.4 / 0003-Drop-include-bb_linux_ext2_fs.h-use-existing-e2fspro.patch
1 From 176bc344751dfc41e87976182381ae0560c94f22 Mon Sep 17 00:00:00 2001
2 From: Denys Vlasenko <vda.linux@googlemail.com>
3 Date: Tue, 17 Apr 2012 15:06:55 +0200
4 Subject: [PATCH 04/32] Drop include/bb_linux_ext2_fs.h, use existing
5  e2fsprogs/e2fs_defs.h
6
7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
8 ---
9  e2fsprogs/e2fs_defs.h                       |  561 ---------------------------
10  e2fsprogs/e2fs_lib.h                        |    2 +-
11  e2fsprogs/old_e2fsprogs/e2fsck.c            |    6 +-
12  e2fsprogs/old_e2fsprogs/e2p/feature.c       |    2 +-
13  e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h    |    2 +-
14  e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h     |    2 +-
15  e2fsprogs/old_e2fsprogs/ext2fs/initialize.c |    2 +-
16  e2fsprogs/old_e2fsprogs/mke2fs.c            |    8 +-
17  e2fsprogs/tune2fs.c                         |    2 +-
18  include/bb_e2fs_defs.h                      |  561 +++++++++++++++++++++++++++
19  include/bb_linux_ext2_fs.h                  |  547 --------------------------
20  util-linux/mkfs_ext2.c                      |    2 +-
21  12 files changed, 575 insertions(+), 1122 deletions(-)
22  delete mode 100644 e2fsprogs/e2fs_defs.h
23  create mode 100644 include/bb_e2fs_defs.h
24  delete mode 100644 include/bb_linux_ext2_fs.h
25
26 diff --git a/e2fsprogs/e2fs_defs.h b/e2fsprogs/e2fs_defs.h
27 deleted file mode 100644
28 index 379640e..0000000
29 --- a/e2fsprogs/e2fs_defs.h
30 +++ /dev/null
31 @@ -1,561 +0,0 @@
32 -/* vi: set sw=4 ts=4: */
33 -/*
34 - *  linux/include/linux/ext2_fs.h
35 - *
36 - * Copyright (C) 1992, 1993, 1994, 1995
37 - * Remy Card (card@masi.ibp.fr)
38 - * Laboratoire MASI - Institut Blaise Pascal
39 - * Universite Pierre et Marie Curie (Paris VI)
40 - *
41 - * Copyright (C) 1991, 1992  Linus Torvalds
42 - */
43 -
44 -#ifndef LINUX_EXT2_FS_H
45 -#define LINUX_EXT2_FS_H 1
46 -
47 -/*
48 - * Special inode numbers
49 - */
50 -#define EXT2_BAD_INO            1      /* Bad blocks inode */
51 -#define EXT2_ROOT_INO           2      /* Root inode */
52 -#define EXT2_ACL_IDX_INO        3      /* ACL inode */
53 -#define EXT2_ACL_DATA_INO       4      /* ACL inode */
54 -#define EXT2_BOOT_LOADER_INO    5      /* Boot loader inode */
55 -#define EXT2_UNDEL_DIR_INO      6      /* Undelete directory inode */
56 -#define EXT2_RESIZE_INO                 7      /* Reserved group descriptors inode */
57 -#define EXT2_JOURNAL_INO        8      /* Journal inode */
58 -
59 -/* First non-reserved inode for old ext2 filesystems */
60 -#define EXT2_GOOD_OLD_FIRST_INO        11
61 -
62 -/*
63 - * The second extended file system magic number
64 - */
65 -#define EXT2_SUPER_MAGIC       0xEF53
66 -
67 -/* Assume that user mode programs are passing in an ext2fs superblock, not
68 - * a kernel struct super_block.  This will allow us to call the feature-test
69 - * macros from user land. */
70 -#define EXT2_SB(sb)    (sb)
71 -
72 -/*
73 - * Maximal count of links to a file
74 - */
75 -#define EXT2_LINK_MAX          32000
76 -
77 -/*
78 - * Macro-instructions used to manage several block sizes
79 - */
80 -#define EXT2_MIN_BLOCK_LOG_SIZE                10      /* 1024 */
81 -#define EXT2_MAX_BLOCK_LOG_SIZE                16      /* 65536 */
82 -#define EXT2_MIN_BLOCK_SIZE    (1 << EXT2_MIN_BLOCK_LOG_SIZE)
83 -#define EXT2_MAX_BLOCK_SIZE    (1 << EXT2_MAX_BLOCK_LOG_SIZE)
84 -#define EXT2_BLOCK_SIZE(s)     (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
85 -#define EXT2_BLOCK_SIZE_BITS(s)        ((s)->s_log_block_size + 10)
86 -#define EXT2_INODE_SIZE(s)     (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
87 -                                EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
88 -#define EXT2_FIRST_INO(s)      (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
89 -                                EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
90 -#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(uint32_t))
91 -
92 -/*
93 - * Macro-instructions used to manage fragments
94 - */
95 -#define EXT2_MIN_FRAG_SIZE             EXT2_MIN_BLOCK_SIZE
96 -#define EXT2_MAX_FRAG_SIZE             EXT2_MAX_BLOCK_SIZE
97 -#define EXT2_MIN_FRAG_LOG_SIZE         EXT2_MIN_BLOCK_LOG_SIZE
98 -#define EXT2_FRAG_SIZE(s)              (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
99 -#define EXT2_FRAGS_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
100 -
101 -/*
102 - * ACL structures
103 - */
104 -struct ext2_acl_header {       /* Header of Access Control Lists */
105 -       uint32_t        aclh_size;
106 -       uint32_t        aclh_file_count;
107 -       uint32_t        aclh_acle_count;
108 -       uint32_t        aclh_first_acle;
109 -};
110 -
111 -struct ext2_acl_entry {        /* Access Control List Entry */
112 -       uint32_t        acle_size;
113 -       uint16_t        acle_perms;     /* Access permissions */
114 -       uint16_t        acle_type;      /* Type of entry */
115 -       uint16_t        acle_tag;       /* User or group identity */
116 -       uint16_t        acle_pad1;
117 -       uint32_t        acle_next;      /* Pointer on next entry for the */
118 -                                       /* same inode or on next free entry */
119 -};
120 -
121 -/*
122 - * Structure of a blocks group descriptor
123 - */
124 -struct ext2_group_desc {
125 -       uint32_t        bg_block_bitmap;        /* Blocks bitmap block */
126 -       uint32_t        bg_inode_bitmap;        /* Inodes bitmap block */
127 -       uint32_t        bg_inode_table;         /* Inodes table block */
128 -       uint16_t        bg_free_blocks_count;   /* Free blocks count */
129 -       uint16_t        bg_free_inodes_count;   /* Free inodes count */
130 -       uint16_t        bg_used_dirs_count;     /* Directories count */
131 -       uint16_t        bg_pad;
132 -       uint32_t        bg_reserved[3];
133 -};
134 -
135 -/*
136 - * Data structures used by the directory indexing feature
137 - *
138 - * Note: all of the multibyte integer fields are little endian.
139 - */
140 -
141 -/*
142 - * Note: dx_root_info is laid out so that if it should somehow get
143 - * overlaid by a dirent the two low bits of the hash version will be
144 - * zero.  Therefore, the hash version mod 4 should never be 0.
145 - * Sincerely, the paranoia department.
146 - */
147 -struct ext2_dx_root_info {
148 -       uint32_t        reserved_zero;
149 -       uint8_t         hash_version; /* 0 now, 1 at release */
150 -       uint8_t         info_length; /* 8 */
151 -       uint8_t         indirect_levels;
152 -       uint8_t         unused_flags;
153 -};
154 -
155 -#define EXT2_HASH_LEGACY       0
156 -#define EXT2_HASH_HALF_MD4     1
157 -#define EXT2_HASH_TEA          2
158 -
159 -#define EXT2_HASH_FLAG_INCOMPAT        0x1
160 -
161 -struct ext2_dx_entry {
162 -       uint32_t hash;
163 -       uint32_t block;
164 -};
165 -
166 -struct ext2_dx_countlimit {
167 -       uint16_t limit;
168 -       uint16_t count;
169 -};
170 -
171 -
172 -/*
173 - * Macro-instructions used to manage group descriptors
174 - */
175 -#define EXT2_BLOCKS_PER_GROUP(s)       (EXT2_SB(s)->s_blocks_per_group)
176 -#define EXT2_INODES_PER_GROUP(s)       (EXT2_SB(s)->s_inodes_per_group)
177 -#define EXT2_INODES_PER_BLOCK(s)       (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
178 -/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
179 -#define EXT2_MAX_BLOCKS_PER_GROUP(s)   ((1 << 16) - 8)
180 -#define EXT2_MAX_INODES_PER_GROUP(s)   ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
181 -#define EXT2_DESC_PER_BLOCK(s)         (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
182 -
183 -/*
184 - * Constants relative to the data blocks
185 - */
186 -#define EXT2_NDIR_BLOCKS               12
187 -#define EXT2_IND_BLOCK                 EXT2_NDIR_BLOCKS
188 -#define EXT2_DIND_BLOCK                        (EXT2_IND_BLOCK + 1)
189 -#define EXT2_TIND_BLOCK                        (EXT2_DIND_BLOCK + 1)
190 -#define EXT2_N_BLOCKS                  (EXT2_TIND_BLOCK + 1)
191 -
192 -/*
193 - * Inode flags
194 - */
195 -#define EXT2_SECRM_FL                  0x00000001 /* Secure deletion */
196 -#define EXT2_UNRM_FL                   0x00000002 /* Undelete */
197 -#define EXT2_COMPR_FL                  0x00000004 /* Compress file */
198 -#define EXT2_SYNC_FL                   0x00000008 /* Synchronous updates */
199 -#define EXT2_IMMUTABLE_FL              0x00000010 /* Immutable file */
200 -#define EXT2_APPEND_FL                 0x00000020 /* writes to file may only append */
201 -#define EXT2_NODUMP_FL                 0x00000040 /* do not dump file */
202 -#define EXT2_NOATIME_FL                        0x00000080 /* do not update atime */
203 -/* Reserved for compression usage... */
204 -#define EXT2_DIRTY_FL                  0x00000100
205 -#define EXT2_COMPRBLK_FL               0x00000200 /* One or more compressed clusters */
206 -#define EXT2_NOCOMPR_FL                        0x00000400 /* Access raw compressed data */
207 -#define EXT2_ECOMPR_FL                 0x00000800 /* Compression error */
208 -/* End compression flags --- maybe not all used */
209 -#define EXT2_BTREE_FL                  0x00001000 /* btree format dir */
210 -#define EXT2_INDEX_FL                  0x00001000 /* hash-indexed directory */
211 -#define EXT2_IMAGIC_FL                 0x00002000
212 -#define EXT3_JOURNAL_DATA_FL           0x00004000 /* file data should be journaled */
213 -#define EXT2_NOTAIL_FL                 0x00008000 /* file tail should not be merged */
214 -#define EXT2_DIRSYNC_FL                        0x00010000 /* Synchronous directory modifications */
215 -#define EXT2_TOPDIR_FL                 0x00020000 /* Top of directory hierarchies*/
216 -#define EXT3_EXTENTS_FL                        0x00080000 /* Inode uses extents */
217 -#define EXT2_RESERVED_FL               0x80000000 /* reserved for ext2 lib */
218 -
219 -#define EXT2_FL_USER_VISIBLE           0x0003DFFF /* User visible flags */
220 -#define EXT2_FL_USER_MODIFIABLE                0x000080FF /* User modifiable flags */
221 -
222 -/*
223 - * ioctl commands
224 - */
225 -#define EXT2_IOC_GETFLAGS              _IOR('f', 1, long)
226 -#define EXT2_IOC_SETFLAGS              _IOW('f', 2, long)
227 -#define EXT2_IOC_GETVERSION            _IOR('v', 1, long)
228 -#define EXT2_IOC_SETVERSION            _IOW('v', 2, long)
229 -
230 -/*
231 - * Structure of an inode on the disk
232 - */
233 -struct ext2_inode {
234 -       uint16_t        i_mode;         /* File mode */
235 -       uint16_t        i_uid;          /* Low 16 bits of Owner Uid */
236 -       uint32_t        i_size;         /* Size in bytes */
237 -       uint32_t        i_atime;        /* Access time */
238 -       uint32_t        i_ctime;        /* Creation time */
239 -       uint32_t        i_mtime;        /* Modification time */
240 -       uint32_t        i_dtime;        /* Deletion Time */
241 -       uint16_t        i_gid;          /* Low 16 bits of Group Id */
242 -       uint16_t        i_links_count;  /* Links count */
243 -       uint32_t        i_blocks;       /* Blocks count */
244 -       uint32_t        i_flags;        /* File flags */
245 -       union {
246 -               struct {
247 -                       uint32_t  l_i_reserved1;
248 -               } linux1;
249 -               struct {
250 -                       uint32_t  h_i_translator;
251 -               } hurd1;
252 -               struct {
253 -                       uint32_t  m_i_reserved1;
254 -               } masix1;
255 -       } osd1;                         /* OS dependent 1 */
256 -       uint32_t        i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
257 -       uint32_t        i_generation;   /* File version (for NFS) */
258 -       uint32_t        i_file_acl;     /* File ACL */
259 -       uint32_t        i_dir_acl;      /* Directory ACL */
260 -       uint32_t        i_faddr;        /* Fragment address */
261 -       union {
262 -               struct {
263 -                       uint8_t         l_i_frag;       /* Fragment number */
264 -                       uint8_t         l_i_fsize;      /* Fragment size */
265 -                       uint16_t        i_pad1;
266 -                       uint16_t        l_i_uid_high;   /* these 2 fields    */
267 -                       uint16_t        l_i_gid_high;   /* were reserved2[0] */
268 -                       uint32_t        l_i_reserved2;
269 -               } linux2;
270 -               struct {
271 -                       uint8_t         h_i_frag;       /* Fragment number */
272 -                       uint8_t         h_i_fsize;      /* Fragment size */
273 -                       uint16_t        h_i_mode_high;
274 -                       uint16_t        h_i_uid_high;
275 -                       uint16_t        h_i_gid_high;
276 -                       uint32_t        h_i_author;
277 -               } hurd2;
278 -               struct {
279 -                       uint8_t         m_i_frag;       /* Fragment number */
280 -                       uint8_t         m_i_fsize;      /* Fragment size */
281 -                       uint16_t        m_pad1;
282 -                       uint32_t        m_i_reserved2[2];
283 -               } masix2;
284 -       } osd2;                         /* OS dependent 2 */
285 -};
286 -
287 -/*
288 - * Permanent part of an large inode on the disk
289 - */
290 -struct ext2_inode_large {
291 -       uint16_t        i_mode;         /* File mode */
292 -       uint16_t        i_uid;          /* Low 16 bits of Owner Uid */
293 -       uint32_t        i_size;         /* Size in bytes */
294 -       uint32_t        i_atime;        /* Access time */
295 -       uint32_t        i_ctime;        /* Creation time */
296 -       uint32_t        i_mtime;        /* Modification time */
297 -       uint32_t        i_dtime;        /* Deletion Time */
298 -       uint16_t        i_gid;          /* Low 16 bits of Group Id */
299 -       uint16_t        i_links_count;  /* Links count */
300 -       uint32_t        i_blocks;       /* Blocks count */
301 -       uint32_t        i_flags;        /* File flags */
302 -       union {
303 -               struct {
304 -                       uint32_t  l_i_reserved1;
305 -               } linux1;
306 -               struct {
307 -                       uint32_t  h_i_translator;
308 -               } hurd1;
309 -               struct {
310 -                       uint32_t  m_i_reserved1;
311 -               } masix1;
312 -       } osd1;                         /* OS dependent 1 */
313 -       uint32_t        i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
314 -       uint32_t        i_generation;   /* File version (for NFS) */
315 -       uint32_t        i_file_acl;     /* File ACL */
316 -       uint32_t        i_dir_acl;      /* Directory ACL */
317 -       uint32_t        i_faddr;        /* Fragment address */
318 -       union {
319 -               struct {
320 -                       uint8_t         l_i_frag;       /* Fragment number */
321 -                       uint8_t         l_i_fsize;      /* Fragment size */
322 -                       uint16_t        i_pad1;
323 -                       uint16_t        l_i_uid_high;   /* these 2 fields    */
324 -                       uint16_t        l_i_gid_high;   /* were reserved2[0] */
325 -                       uint32_t        l_i_reserved2;
326 -               } linux2;
327 -               struct {
328 -                       uint8_t         h_i_frag;       /* Fragment number */
329 -                       uint8_t         h_i_fsize;      /* Fragment size */
330 -                       uint16_t        h_i_mode_high;
331 -                       uint16_t        h_i_uid_high;
332 -                       uint16_t        h_i_gid_high;
333 -                       uint32_t        h_i_author;
334 -               } hurd2;
335 -               struct {
336 -                       uint8_t         m_i_frag;       /* Fragment number */
337 -                       uint8_t         m_i_fsize;      /* Fragment size */
338 -                       uint16_t        m_pad1;
339 -                       uint32_t        m_i_reserved2[2];
340 -               } masix2;
341 -       } osd2;                         /* OS dependent 2 */
342 -       uint16_t        i_extra_isize;
343 -       uint16_t        i_pad1;
344 -};
345 -
346 -#define i_size_high    i_dir_acl
347 -
348 -/*
349 - * File system states
350 - */
351 -#define EXT2_VALID_FS                  0x0001  /* Unmounted cleanly */
352 -#define EXT2_ERROR_FS                  0x0002  /* Errors detected */
353 -
354 -/*
355 - * Mount flags
356 - */
357 -#define EXT2_MOUNT_CHECK               0x0001  /* Do mount-time checks */
358 -#define EXT2_MOUNT_GRPID               0x0004  /* Create files with directory's group */
359 -#define EXT2_MOUNT_DEBUG               0x0008  /* Some debugging messages */
360 -#define EXT2_MOUNT_ERRORS_CONT         0x0010  /* Continue on errors */
361 -#define EXT2_MOUNT_ERRORS_RO           0x0020  /* Remount fs ro on errors */
362 -#define EXT2_MOUNT_ERRORS_PANIC                0x0040  /* Panic on errors */
363 -#define EXT2_MOUNT_MINIX_DF            0x0080  /* Mimics the Minix statfs */
364 -#define EXT2_MOUNT_NO_UID32            0x0200  /* Disable 32-bit UIDs */
365 -
366 -#define clear_opt(o, opt)              o &= ~EXT2_MOUNT_##opt
367 -#define set_opt(o, opt)                        o |= EXT2_MOUNT_##opt
368 -#define test_opt(sb, opt)              (EXT2_SB(sb)->s_mount_opt & \
369 -                                        EXT2_MOUNT_##opt)
370 -/*
371 - * Maximal mount counts between two filesystem checks
372 - */
373 -#define EXT2_DFL_MAX_MNT_COUNT         20      /* Allow 20 mounts */
374 -#define EXT2_DFL_CHECKINTERVAL         0       /* Don't use interval check */
375 -
376 -/*
377 - * Behaviour when detecting errors
378 - */
379 -#define EXT2_ERRORS_CONTINUE           1       /* Continue execution */
380 -#define EXT2_ERRORS_RO                 2       /* Remount fs read-only */
381 -#define EXT2_ERRORS_PANIC              3       /* Panic */
382 -#define EXT2_ERRORS_DEFAULT            EXT2_ERRORS_CONTINUE
383 -
384 -/*
385 - * Structure of the super block
386 - */
387 -struct ext2_super_block {
388 -       uint32_t        s_inodes_count;         /* Inodes count */
389 -       uint32_t        s_blocks_count;         /* Blocks count */
390 -       uint32_t        s_r_blocks_count;       /* Reserved blocks count */
391 -       uint32_t        s_free_blocks_count;    /* Free blocks count */
392 -       uint32_t        s_free_inodes_count;    /* Free inodes count */
393 -       uint32_t        s_first_data_block;     /* First Data Block */
394 -       uint32_t        s_log_block_size;       /* Block size */
395 -       int32_t         s_log_frag_size;        /* Fragment size */
396 -       uint32_t        s_blocks_per_group;     /* # Blocks per group */
397 -       uint32_t        s_frags_per_group;      /* # Fragments per group */
398 -       uint32_t        s_inodes_per_group;     /* # Inodes per group */
399 -       uint32_t        s_mtime;                /* Mount time */
400 -       uint32_t        s_wtime;                /* Write time */
401 -       uint16_t        s_mnt_count;            /* Mount count */
402 -       int16_t         s_max_mnt_count;        /* Maximal mount count */
403 -       uint16_t        s_magic;                /* Magic signature */
404 -       uint16_t        s_state;                /* File system state */
405 -       uint16_t        s_errors;               /* Behaviour when detecting errors */
406 -       uint16_t        s_minor_rev_level;      /* minor revision level */
407 -       uint32_t        s_lastcheck;            /* time of last check */
408 -       uint32_t        s_checkinterval;        /* max. time between checks */
409 -       uint32_t        s_creator_os;           /* OS */
410 -       uint32_t        s_rev_level;            /* Revision level */
411 -       uint16_t        s_def_resuid;           /* Default uid for reserved blocks */
412 -       uint16_t        s_def_resgid;           /* Default gid for reserved blocks */
413 -       /*
414 -        * These fields are for EXT2_DYNAMIC_REV superblocks only.
415 -        *
416 -        * Note: the difference between the compatible feature set and
417 -        * the incompatible feature set is that if there is a bit set
418 -        * in the incompatible feature set that the kernel doesn't
419 -        * know about, it should refuse to mount the filesystem.
420 -        *
421 -        * e2fsck's requirements are more strict; if it doesn't know
422 -        * about a feature in either the compatible or incompatible
423 -        * feature set, it must abort and not try to meddle with
424 -        * things it doesn't understand...
425 -        */
426 -       uint32_t        s_first_ino;            /* First non-reserved inode */
427 -       uint16_t        s_inode_size;           /* size of inode structure */
428 -       uint16_t        s_block_group_nr;       /* block group # of this superblock */
429 -       uint32_t        s_feature_compat;       /* compatible feature set */
430 -       uint32_t        s_feature_incompat;     /* incompatible feature set */
431 -       uint32_t        s_feature_ro_compat;    /* readonly-compatible feature set */
432 -       uint8_t         s_uuid[16];             /* 128-bit uuid for volume */
433 -       char            s_volume_name[16];      /* volume name */
434 -       char            s_last_mounted[64];     /* directory where last mounted */
435 -       uint32_t        s_algorithm_usage_bitmap; /* For compression */
436 -       /*
437 -        * Performance hints.  Directory preallocation should only
438 -        * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
439 -        */
440 -       uint8_t s_prealloc_blocks;      /* Nr of blocks to try to preallocate*/
441 -       uint8_t s_prealloc_dir_blocks;  /* Nr to preallocate for dirs */
442 -       uint16_t        s_reserved_gdt_blocks;  /* Per group table for online growth */
443 -       /*
444 -        * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
445 -        */
446 -       uint8_t         s_journal_uuid[16];     /* uuid of journal superblock */
447 -       uint32_t        s_journal_inum;         /* inode number of journal file */
448 -       uint32_t        s_journal_dev;          /* device number of journal file */
449 -       uint32_t        s_last_orphan;          /* start of list of inodes to delete */
450 -       uint32_t        s_hash_seed[4];         /* HTREE hash seed */
451 -       uint8_t         s_def_hash_version;     /* Default hash version to use */
452 -       uint8_t         s_jnl_backup_type;      /* Default type of journal backup */
453 -       uint16_t        s_reserved_word_pad;
454 -       uint32_t        s_default_mount_opts;
455 -       uint32_t        s_first_meta_bg;        /* First metablock group */
456 -       uint32_t        s_mkfs_time;            /* When the filesystem was created */
457 -       uint32_t        s_jnl_blocks[17];       /* Backup of the journal inode */
458 -       uint32_t        s_reserved[172];        /* Padding to the end of the block */
459 -};
460 -
461 -/*
462 - * Codes for operating systems
463 - */
464 -#define EXT2_OS_LINUX          0
465 -#define EXT2_OS_HURD           1
466 -#define EXT2_OS_MASIX          2
467 -#define EXT2_OS_FREEBSD                3
468 -#define EXT2_OS_LITES          4
469 -
470 -/*
471 - * Revision levels
472 - */
473 -#define EXT2_GOOD_OLD_REV      0       /* The good old (original) format */
474 -#define EXT2_DYNAMIC_REV       1       /* V2 format w/ dynamic inode sizes */
475 -
476 -#define EXT2_CURRENT_REV       EXT2_GOOD_OLD_REV
477 -#define EXT2_MAX_SUPP_REV      EXT2_DYNAMIC_REV
478 -
479 -#define EXT2_GOOD_OLD_INODE_SIZE 128
480 -
481 -/*
482 - * Journal inode backup types
483 - */
484 -#define EXT3_JNL_BACKUP_BLOCKS 1
485 -
486 -/*
487 - * Feature set definitions
488 - */
489 -
490 -#define EXT2_HAS_COMPAT_FEATURE(sb,mask)                       \
491 -       ( EXT2_SB(sb)->s_feature_compat & (mask) )
492 -#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask)                    \
493 -       ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
494 -#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask)                     \
495 -       ( EXT2_SB(sb)->s_feature_incompat & (mask) )
496 -
497 -#define EXT2_FEATURE_COMPAT_DIR_PREALLOC       0x0001
498 -#define EXT2_FEATURE_COMPAT_IMAGIC_INODES      0x0002
499 -#define EXT3_FEATURE_COMPAT_HAS_JOURNAL                0x0004
500 -#define EXT2_FEATURE_COMPAT_EXT_ATTR           0x0008
501 -#define EXT2_FEATURE_COMPAT_RESIZE_INODE       0x0010
502 -#define EXT2_FEATURE_COMPAT_DIR_INDEX          0x0020
503 -
504 -#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
505 -#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE      0x0002
506 -/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR    0x0004 not used */
507 -
508 -#define EXT2_FEATURE_INCOMPAT_COMPRESSION      0x0001
509 -#define EXT2_FEATURE_INCOMPAT_FILETYPE         0x0002
510 -#define EXT3_FEATURE_INCOMPAT_RECOVER          0x0004 /* Needs recovery */
511 -#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV      0x0008 /* Journal device */
512 -#define EXT2_FEATURE_INCOMPAT_META_BG          0x0010
513 -#define EXT3_FEATURE_INCOMPAT_EXTENTS          0x0040
514 -
515 -
516 -#define EXT2_FEATURE_COMPAT_SUPP       0
517 -#define EXT2_FEATURE_INCOMPAT_SUPP     (EXT2_FEATURE_INCOMPAT_FILETYPE)
518 -#define EXT2_FEATURE_RO_COMPAT_SUPP    (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
519 -                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
520 -                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
521 -
522 -/*
523 - * Default values for user and/or group using reserved blocks
524 - */
525 -#define EXT2_DEF_RESUID                0
526 -#define EXT2_DEF_RESGID                0
527 -
528 -/*
529 - * Default mount options
530 - */
531 -#define EXT2_DEFM_DEBUG                0x0001
532 -#define EXT2_DEFM_BSDGROUPS    0x0002
533 -#define EXT2_DEFM_XATTR_USER   0x0004
534 -#define EXT2_DEFM_ACL          0x0008
535 -#define EXT2_DEFM_UID16                0x0010
536 -#define EXT3_DEFM_JMODE                0x0060
537 -#define EXT3_DEFM_JMODE_DATA   0x0020
538 -#define EXT3_DEFM_JMODE_ORDERED        0x0040
539 -#define EXT3_DEFM_JMODE_WBACK  0x0060
540 -
541 -/*
542 - * Structure of a directory entry
543 - */
544 -#define EXT2_NAME_LEN 255
545 -
546 -struct ext2_dir_entry {
547 -       uint32_t        inode;                  /* Inode number */
548 -       uint16_t        rec_len;                /* Directory entry length */
549 -       uint16_t        name_len;               /* Name length */
550 -       char            name[EXT2_NAME_LEN];    /* File name */
551 -};
552 -
553 -/*
554 - * The new version of the directory entry.  Since EXT2 structures are
555 - * stored in intel byte order, and the name_len field could never be
556 - * bigger than 255 chars, it's safe to reclaim the extra byte for the
557 - * file_type field.
558 - */
559 -struct ext2_dir_entry_2 {
560 -       uint32_t        inode;                  /* Inode number */
561 -       uint16_t        rec_len;                /* Directory entry length */
562 -       uint8_t         name_len;               /* Name length */
563 -       uint8_t         file_type;
564 -       char            name[EXT2_NAME_LEN];    /* File name */
565 -};
566 -
567 -/*
568 - * Ext2 directory file types.  Only the low 3 bits are used.  The
569 - * other bits are reserved for now.
570 - */
571 -#define EXT2_FT_UNKNOWN                0
572 -#define EXT2_FT_REG_FILE       1
573 -#define EXT2_FT_DIR            2
574 -#define EXT2_FT_CHRDEV         3
575 -#define EXT2_FT_BLKDEV         4
576 -#define EXT2_FT_FIFO           5
577 -#define EXT2_FT_SOCK           6
578 -#define EXT2_FT_SYMLINK                7
579 -
580 -#define EXT2_FT_MAX            8
581 -
582 -/*
583 - * EXT2_DIR_PAD defines the directory entries boundaries
584 - *
585 - * NOTE: It must be a multiple of 4
586 - */
587 -#define EXT2_DIR_PAD                   4
588 -#define EXT2_DIR_ROUND                 (EXT2_DIR_PAD - 1)
589 -#define EXT2_DIR_REC_LEN(name_len)     (((name_len) + 8 + EXT2_DIR_ROUND) & \
590 -                                        ~EXT2_DIR_ROUND)
591 -
592 -#endif
593 diff --git a/e2fsprogs/e2fs_lib.h b/e2fsprogs/e2fs_lib.h
594 index 3905ee7..f2ae56f 100644
595 --- a/e2fsprogs/e2fs_lib.h
596 +++ b/e2fsprogs/e2fs_lib.h
597 @@ -7,7 +7,7 @@
598   */
599  
600  /* Constants and structures */
601 -#include "e2fs_defs.h"
602 +#include "bb_e2fs_defs.h"
603  
604  PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
605  
606 diff --git a/e2fsprogs/old_e2fsprogs/e2fsck.c b/e2fsprogs/old_e2fsprogs/e2fsck.c
607 index 8fffa7f..373e8ce 100644
608 --- a/e2fsprogs/old_e2fsprogs/e2fsck.c
609 +++ b/e2fsprogs/old_e2fsprogs/e2fsck.c
610 @@ -11577,7 +11577,7 @@ static void check_resize_inode(e2fsck_t ctx)
611          * s_reserved_gdt_blocks must be zero.
612          */
613         if (!(fs->super->s_feature_compat &
614 -             EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
615 +             EXT2_FEATURE_COMPAT_RESIZE_INO)) {
616                 if (fs->super->s_reserved_gdt_blocks) {
617                         pctx.num = fs->super->s_reserved_gdt_blocks;
618                         if (fix_problem(ctx, PR_0_NONZERO_RESERVED_GDT_BLOCKS,
619 @@ -11593,7 +11593,7 @@ static void check_resize_inode(e2fsck_t ctx)
620         retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
621         if (retval) {
622                 if (fs->super->s_feature_compat &
623 -                   EXT2_FEATURE_COMPAT_RESIZE_INODE)
624 +                   EXT2_FEATURE_COMPAT_RESIZE_INO)
625                         ctx->flags |= E2F_FLAG_RESIZE_INODE;
626                 return;
627         }
628 @@ -11603,7 +11603,7 @@ static void check_resize_inode(e2fsck_t ctx)
629          * the resize inode is cleared; then we're done.
630          */
631         if (!(fs->super->s_feature_compat &
632 -             EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
633 +             EXT2_FEATURE_COMPAT_RESIZE_INO)) {
634                 for (i=0; i < EXT2_N_BLOCKS; i++) {
635                         if (inode.i_block[i])
636                                 break;
637 diff --git a/e2fsprogs/old_e2fsprogs/e2p/feature.c b/e2fsprogs/old_e2fsprogs/e2p/feature.c
638 index b45754f..2102ed8 100644
639 --- a/e2fsprogs/old_e2fsprogs/e2p/feature.c
640 +++ b/e2fsprogs/old_e2fsprogs/e2p/feature.c
641 @@ -34,7 +34,7 @@ static const struct feature feature_list[] = {
642                         "ext_attr" },
643         {       E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_DIR_INDEX,
644                         "dir_index" },
645 -       {       E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_RESIZE_INODE,
646 +       {       E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_RESIZE_INO,
647                         "resize_inode" },
648         {       E2P_FEATURE_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER,
649                         "sparse_super" },
650 diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h b/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
651 index 6f4f708..80ea2cb 100644
652 --- a/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
653 +++ b/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
654 @@ -475,7 +475,7 @@ struct ext2_super_block {
655  #define EXT2_FEATURE_COMPAT_IMAGIC_INODES      0x0002
656  #define EXT3_FEATURE_COMPAT_HAS_JOURNAL                0x0004
657  #define EXT2_FEATURE_COMPAT_EXT_ATTR           0x0008
658 -#define EXT2_FEATURE_COMPAT_RESIZE_INODE       0x0010
659 +#define EXT2_FEATURE_COMPAT_RESIZE_INO         0x0010
660  #define EXT2_FEATURE_COMPAT_DIR_INDEX          0x0020
661  
662  #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
663 diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h b/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
664 index 9f77201..39fb116 100644
665 --- a/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
666 +++ b/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
667 @@ -383,7 +383,7 @@ typedef struct ext2_icount *ext2_icount_t;
668  #define EXT2_LIB_FEATURE_COMPAT_SUPP   (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\
669                                          EXT2_FEATURE_COMPAT_IMAGIC_INODES|\
670                                          EXT3_FEATURE_COMPAT_HAS_JOURNAL|\
671 -                                        EXT2_FEATURE_COMPAT_RESIZE_INODE|\
672 +                                        EXT2_FEATURE_COMPAT_RESIZE_INO|\
673                                          EXT2_FEATURE_COMPAT_DIR_INDEX|\
674                                          EXT2_FEATURE_COMPAT_EXT_ATTR)
675  
676 diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
677 index ef1d343..da2d151 100644
678 --- a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
679 +++ b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
680 @@ -284,7 +284,7 @@ retry:
681         /*
682          * check the number of reserved group descriptor table blocks
683          */
684 -       if (super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)
685 +       if (super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INO)
686                 rsv_gdt = calc_reserved_gdt_blocks(fs);
687         else
688                 rsv_gdt = 0;
689 diff --git a/e2fsprogs/old_e2fsprogs/mke2fs.c b/e2fsprogs/old_e2fsprogs/mke2fs.c
690 index 7555650..35d717a 100644
691 --- a/e2fsprogs/old_e2fsprogs/mke2fs.c
692 +++ b/e2fsprogs/old_e2fsprogs/mke2fs.c
693 @@ -757,7 +757,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
694  
695                         if (rsv_gdb > 0) {
696                                 sb_param->s_feature_compat |=
697 -                                       EXT2_FEATURE_COMPAT_RESIZE_INODE;
698 +                                       EXT2_FEATURE_COMPAT_RESIZE_INO;
699  
700                                 sb_param->s_reserved_gdt_blocks = rsv_gdb;
701                         }
702 @@ -778,7 +778,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
703  
704  static __u32 ok_features[3] = {
705         EXT3_FEATURE_COMPAT_HAS_JOURNAL |
706 -               EXT2_FEATURE_COMPAT_RESIZE_INODE |
707 +               EXT2_FEATURE_COMPAT_RESIZE_INO |
708                 EXT2_FEATURE_COMPAT_DIR_INDEX,  /* Compat */
709         EXT2_FEATURE_INCOMPAT_FILETYPE|         /* Incompat */
710                 EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
711 @@ -1123,7 +1123,7 @@ static int PRS(int argc, char **argv)
712         /* Since sparse_super is the default, we would only have a problem
713          * here if it was explicitly disabled.
714          */
715 -       if ((param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
716 +       if ((param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INO) &&
717             !(param.s_feature_ro_compat&EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)) {
718                 bb_error_msg_and_die("reserved online resize blocks not supported "
719                           "on non-sparse filesystem");
720 @@ -1312,7 +1312,7 @@ int mke2fs_main (int argc, char **argv)
721                 reserve_inodes(fs);
722                 create_bad_block_inode(fs, bb_list);
723                 if (fs->super->s_feature_compat &
724 -                   EXT2_FEATURE_COMPAT_RESIZE_INODE) {
725 +                   EXT2_FEATURE_COMPAT_RESIZE_INO) {
726                         retval = ext2fs_create_resize_inode(fs);
727                         mke2fs_error_msg_and_die(retval, "reserve blocks for online resize");
728                 }
729 diff --git a/e2fsprogs/tune2fs.c b/e2fsprogs/tune2fs.c
730 index 841d58a..46a745e 100644
731 --- a/e2fsprogs/tune2fs.c
732 +++ b/e2fsprogs/tune2fs.c
733 @@ -8,7 +8,7 @@
734   */
735  #include "libbb.h"
736  #include <linux/fs.h>
737 -#include "bb_linux_ext2_fs.h"
738 +#include "bb_e2fs_defs.h"
739  
740  // storage helpers
741  char BUG_wrong_field_size(void);
742 diff --git a/include/bb_e2fs_defs.h b/include/bb_e2fs_defs.h
743 new file mode 100644
744 index 0000000..7974497
745 --- /dev/null
746 +++ b/include/bb_e2fs_defs.h
747 @@ -0,0 +1,561 @@
748 +/* vi: set sw=4 ts=4: */
749 +/*
750 + *  linux/include/linux/ext2_fs.h
751 + *
752 + * Copyright (C) 1992, 1993, 1994, 1995
753 + * Remy Card (card@masi.ibp.fr)
754 + * Laboratoire MASI - Institut Blaise Pascal
755 + * Universite Pierre et Marie Curie (Paris VI)
756 + *
757 + * Copyright (C) 1991, 1992  Linus Torvalds
758 + */
759 +
760 +#ifndef LINUX_EXT2_FS_H
761 +#define LINUX_EXT2_FS_H 1
762 +
763 +/*
764 + * Special inode numbers
765 + */
766 +#define EXT2_BAD_INO            1      /* Bad blocks inode */
767 +#define EXT2_ROOT_INO           2      /* Root inode */
768 +#define EXT2_ACL_IDX_INO        3      /* ACL inode */
769 +#define EXT2_ACL_DATA_INO       4      /* ACL inode */
770 +#define EXT2_BOOT_LOADER_INO    5      /* Boot loader inode */
771 +#define EXT2_UNDEL_DIR_INO      6      /* Undelete directory inode */
772 +#define EXT2_RESIZE_INO                 7      /* Reserved group descriptors inode */
773 +#define EXT2_JOURNAL_INO        8      /* Journal inode */
774 +
775 +/* First non-reserved inode for old ext2 filesystems */
776 +#define EXT2_GOOD_OLD_FIRST_INO        11
777 +
778 +/*
779 + * The second extended file system magic number
780 + */
781 +#define EXT2_SUPER_MAGIC       0xEF53
782 +
783 +/* Assume that user mode programs are passing in an ext2fs superblock, not
784 + * a kernel struct super_block.  This will allow us to call the feature-test
785 + * macros from user land. */
786 +#define EXT2_SB(sb)    (sb)
787 +
788 +/*
789 + * Maximal count of links to a file
790 + */
791 +#define EXT2_LINK_MAX          32000
792 +
793 +/*
794 + * Macro-instructions used to manage several block sizes
795 + */
796 +#define EXT2_MIN_BLOCK_LOG_SIZE                10      /* 1024 */
797 +#define EXT2_MAX_BLOCK_LOG_SIZE                16      /* 65536 */
798 +#define EXT2_MIN_BLOCK_SIZE    (1 << EXT2_MIN_BLOCK_LOG_SIZE)
799 +#define EXT2_MAX_BLOCK_SIZE    (1 << EXT2_MAX_BLOCK_LOG_SIZE)
800 +#define EXT2_BLOCK_SIZE(s)     (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
801 +#define EXT2_BLOCK_SIZE_BITS(s)        ((s)->s_log_block_size + 10)
802 +#define EXT2_INODE_SIZE(s)     (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
803 +                                EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
804 +#define EXT2_FIRST_INO(s)      (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
805 +                                EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
806 +#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(uint32_t))
807 +
808 +/*
809 + * Macro-instructions used to manage fragments
810 + */
811 +#define EXT2_MIN_FRAG_SIZE             EXT2_MIN_BLOCK_SIZE
812 +#define EXT2_MAX_FRAG_SIZE             EXT2_MAX_BLOCK_SIZE
813 +#define EXT2_MIN_FRAG_LOG_SIZE         EXT2_MIN_BLOCK_LOG_SIZE
814 +#define EXT2_FRAG_SIZE(s)              (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
815 +#define EXT2_FRAGS_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
816 +
817 +/*
818 + * ACL structures
819 + */
820 +struct ext2_acl_header {       /* Header of Access Control Lists */
821 +       uint32_t        aclh_size;
822 +       uint32_t        aclh_file_count;
823 +       uint32_t        aclh_acle_count;
824 +       uint32_t        aclh_first_acle;
825 +};
826 +
827 +struct ext2_acl_entry {        /* Access Control List Entry */
828 +       uint32_t        acle_size;
829 +       uint16_t        acle_perms;     /* Access permissions */
830 +       uint16_t        acle_type;      /* Type of entry */
831 +       uint16_t        acle_tag;       /* User or group identity */
832 +       uint16_t        acle_pad1;
833 +       uint32_t        acle_next;      /* Pointer on next entry for the */
834 +                                       /* same inode or on next free entry */
835 +};
836 +
837 +/*
838 + * Structure of a blocks group descriptor
839 + */
840 +struct ext2_group_desc {
841 +       uint32_t        bg_block_bitmap;        /* Blocks bitmap block */
842 +       uint32_t        bg_inode_bitmap;        /* Inodes bitmap block */
843 +       uint32_t        bg_inode_table;         /* Inodes table block */
844 +       uint16_t        bg_free_blocks_count;   /* Free blocks count */
845 +       uint16_t        bg_free_inodes_count;   /* Free inodes count */
846 +       uint16_t        bg_used_dirs_count;     /* Directories count */
847 +       uint16_t        bg_pad;
848 +       uint32_t        bg_reserved[3];
849 +};
850 +
851 +/*
852 + * Data structures used by the directory indexing feature
853 + *
854 + * Note: all of the multibyte integer fields are little endian.
855 + */
856 +
857 +/*
858 + * Note: dx_root_info is laid out so that if it should somehow get
859 + * overlaid by a dirent the two low bits of the hash version will be
860 + * zero.  Therefore, the hash version mod 4 should never be 0.
861 + * Sincerely, the paranoia department.
862 + */
863 +struct ext2_dx_root_info {
864 +       uint32_t        reserved_zero;
865 +       uint8_t         hash_version; /* 0 now, 1 at release */
866 +       uint8_t         info_length; /* 8 */
867 +       uint8_t         indirect_levels;
868 +       uint8_t         unused_flags;
869 +};
870 +
871 +#define EXT2_HASH_LEGACY       0
872 +#define EXT2_HASH_HALF_MD4     1
873 +#define EXT2_HASH_TEA          2
874 +
875 +#define EXT2_HASH_FLAG_INCOMPAT        0x1
876 +
877 +struct ext2_dx_entry {
878 +       uint32_t hash;
879 +       uint32_t block;
880 +};
881 +
882 +struct ext2_dx_countlimit {
883 +       uint16_t limit;
884 +       uint16_t count;
885 +};
886 +
887 +
888 +/*
889 + * Macro-instructions used to manage group descriptors
890 + */
891 +#define EXT2_BLOCKS_PER_GROUP(s)       (EXT2_SB(s)->s_blocks_per_group)
892 +#define EXT2_INODES_PER_GROUP(s)       (EXT2_SB(s)->s_inodes_per_group)
893 +#define EXT2_INODES_PER_BLOCK(s)       (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
894 +/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
895 +#define EXT2_MAX_BLOCKS_PER_GROUP(s)   ((1 << 16) - 8)
896 +#define EXT2_MAX_INODES_PER_GROUP(s)   ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
897 +#define EXT2_DESC_PER_BLOCK(s)         (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
898 +
899 +/*
900 + * Constants relative to the data blocks
901 + */
902 +#define EXT2_NDIR_BLOCKS               12
903 +#define EXT2_IND_BLOCK                 EXT2_NDIR_BLOCKS
904 +#define EXT2_DIND_BLOCK                        (EXT2_IND_BLOCK + 1)
905 +#define EXT2_TIND_BLOCK                        (EXT2_DIND_BLOCK + 1)
906 +#define EXT2_N_BLOCKS                  (EXT2_TIND_BLOCK + 1)
907 +
908 +/*
909 + * Inode flags
910 + */
911 +#define EXT2_SECRM_FL                  0x00000001 /* Secure deletion */
912 +#define EXT2_UNRM_FL                   0x00000002 /* Undelete */
913 +#define EXT2_COMPR_FL                  0x00000004 /* Compress file */
914 +#define EXT2_SYNC_FL                   0x00000008 /* Synchronous updates */
915 +#define EXT2_IMMUTABLE_FL              0x00000010 /* Immutable file */
916 +#define EXT2_APPEND_FL                 0x00000020 /* writes to file may only append */
917 +#define EXT2_NODUMP_FL                 0x00000040 /* do not dump file */
918 +#define EXT2_NOATIME_FL                        0x00000080 /* do not update atime */
919 +/* Reserved for compression usage... */
920 +#define EXT2_DIRTY_FL                  0x00000100
921 +#define EXT2_COMPRBLK_FL               0x00000200 /* One or more compressed clusters */
922 +#define EXT2_NOCOMPR_FL                        0x00000400 /* Access raw compressed data */
923 +#define EXT2_ECOMPR_FL                 0x00000800 /* Compression error */
924 +/* End compression flags --- maybe not all used */
925 +#define EXT2_BTREE_FL                  0x00001000 /* btree format dir */
926 +#define EXT2_INDEX_FL                  0x00001000 /* hash-indexed directory */
927 +#define EXT2_IMAGIC_FL                 0x00002000
928 +#define EXT3_JOURNAL_DATA_FL           0x00004000 /* file data should be journaled */
929 +#define EXT2_NOTAIL_FL                 0x00008000 /* file tail should not be merged */
930 +#define EXT2_DIRSYNC_FL                        0x00010000 /* Synchronous directory modifications */
931 +#define EXT2_TOPDIR_FL                 0x00020000 /* Top of directory hierarchies*/
932 +#define EXT3_EXTENTS_FL                        0x00080000 /* Inode uses extents */
933 +#define EXT2_RESERVED_FL               0x80000000 /* reserved for ext2 lib */
934 +
935 +#define EXT2_FL_USER_VISIBLE           0x0003DFFF /* User visible flags */
936 +#define EXT2_FL_USER_MODIFIABLE                0x000080FF /* User modifiable flags */
937 +
938 +/*
939 + * ioctl commands
940 + */
941 +#define EXT2_IOC_GETFLAGS              _IOR('f', 1, long)
942 +#define EXT2_IOC_SETFLAGS              _IOW('f', 2, long)
943 +#define EXT2_IOC_GETVERSION            _IOR('v', 1, long)
944 +#define EXT2_IOC_SETVERSION            _IOW('v', 2, long)
945 +
946 +/*
947 + * Structure of an inode on the disk
948 + */
949 +struct ext2_inode {
950 +       uint16_t        i_mode;         /* File mode */
951 +       uint16_t        i_uid;          /* Low 16 bits of Owner Uid */
952 +       uint32_t        i_size;         /* Size in bytes */
953 +       uint32_t        i_atime;        /* Access time */
954 +       uint32_t        i_ctime;        /* Creation time */
955 +       uint32_t        i_mtime;        /* Modification time */
956 +       uint32_t        i_dtime;        /* Deletion Time */
957 +       uint16_t        i_gid;          /* Low 16 bits of Group Id */
958 +       uint16_t        i_links_count;  /* Links count */
959 +       uint32_t        i_blocks;       /* Blocks count */
960 +       uint32_t        i_flags;        /* File flags */
961 +       union {
962 +               struct {
963 +                       uint32_t  l_i_reserved1;
964 +               } linux1;
965 +               struct {
966 +                       uint32_t  h_i_translator;
967 +               } hurd1;
968 +               struct {
969 +                       uint32_t  m_i_reserved1;
970 +               } masix1;
971 +       } osd1;                         /* OS dependent 1 */
972 +       uint32_t        i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
973 +       uint32_t        i_generation;   /* File version (for NFS) */
974 +       uint32_t        i_file_acl;     /* File ACL */
975 +       uint32_t        i_dir_acl;      /* Directory ACL */
976 +       uint32_t        i_faddr;        /* Fragment address */
977 +       union {
978 +               struct {
979 +                       uint8_t         l_i_frag;       /* Fragment number */
980 +                       uint8_t         l_i_fsize;      /* Fragment size */
981 +                       uint16_t        i_pad1;
982 +                       uint16_t        l_i_uid_high;   /* these 2 fields    */
983 +                       uint16_t        l_i_gid_high;   /* were reserved2[0] */
984 +                       uint32_t        l_i_reserved2;
985 +               } linux2;
986 +               struct {
987 +                       uint8_t         h_i_frag;       /* Fragment number */
988 +                       uint8_t         h_i_fsize;      /* Fragment size */
989 +                       uint16_t        h_i_mode_high;
990 +                       uint16_t        h_i_uid_high;
991 +                       uint16_t        h_i_gid_high;
992 +                       uint32_t        h_i_author;
993 +               } hurd2;
994 +               struct {
995 +                       uint8_t         m_i_frag;       /* Fragment number */
996 +                       uint8_t         m_i_fsize;      /* Fragment size */
997 +                       uint16_t        m_pad1;
998 +                       uint32_t        m_i_reserved2[2];
999 +               } masix2;
1000 +       } osd2;                         /* OS dependent 2 */
1001 +};
1002 +
1003 +/*
1004 + * Permanent part of an large inode on the disk
1005 + */
1006 +struct ext2_inode_large {
1007 +       uint16_t        i_mode;         /* File mode */
1008 +       uint16_t        i_uid;          /* Low 16 bits of Owner Uid */
1009 +       uint32_t        i_size;         /* Size in bytes */
1010 +       uint32_t        i_atime;        /* Access time */
1011 +       uint32_t        i_ctime;        /* Creation time */
1012 +       uint32_t        i_mtime;        /* Modification time */
1013 +       uint32_t        i_dtime;        /* Deletion Time */
1014 +       uint16_t        i_gid;          /* Low 16 bits of Group Id */
1015 +       uint16_t        i_links_count;  /* Links count */
1016 +       uint32_t        i_blocks;       /* Blocks count */
1017 +       uint32_t        i_flags;        /* File flags */
1018 +       union {
1019 +               struct {
1020 +                       uint32_t  l_i_reserved1;
1021 +               } linux1;
1022 +               struct {
1023 +                       uint32_t  h_i_translator;
1024 +               } hurd1;
1025 +               struct {
1026 +                       uint32_t  m_i_reserved1;
1027 +               } masix1;
1028 +       } osd1;                         /* OS dependent 1 */
1029 +       uint32_t        i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
1030 +       uint32_t        i_generation;   /* File version (for NFS) */
1031 +       uint32_t        i_file_acl;     /* File ACL */
1032 +       uint32_t        i_dir_acl;      /* Directory ACL */
1033 +       uint32_t        i_faddr;        /* Fragment address */
1034 +       union {
1035 +               struct {
1036 +                       uint8_t         l_i_frag;       /* Fragment number */
1037 +                       uint8_t         l_i_fsize;      /* Fragment size */
1038 +                       uint16_t        i_pad1;
1039 +                       uint16_t        l_i_uid_high;   /* these 2 fields    */
1040 +                       uint16_t        l_i_gid_high;   /* were reserved2[0] */
1041 +                       uint32_t        l_i_reserved2;
1042 +               } linux2;
1043 +               struct {
1044 +                       uint8_t         h_i_frag;       /* Fragment number */
1045 +                       uint8_t         h_i_fsize;      /* Fragment size */
1046 +                       uint16_t        h_i_mode_high;
1047 +                       uint16_t        h_i_uid_high;
1048 +                       uint16_t        h_i_gid_high;
1049 +                       uint32_t        h_i_author;
1050 +               } hurd2;
1051 +               struct {
1052 +                       uint8_t         m_i_frag;       /* Fragment number */
1053 +                       uint8_t         m_i_fsize;      /* Fragment size */
1054 +                       uint16_t        m_pad1;
1055 +                       uint32_t        m_i_reserved2[2];
1056 +               } masix2;
1057 +       } osd2;                         /* OS dependent 2 */
1058 +       uint16_t        i_extra_isize;
1059 +       uint16_t        i_pad1;
1060 +};
1061 +
1062 +#define i_size_high    i_dir_acl
1063 +
1064 +/*
1065 + * File system states
1066 + */
1067 +#define EXT2_VALID_FS                  0x0001  /* Unmounted cleanly */
1068 +#define EXT2_ERROR_FS                  0x0002  /* Errors detected */
1069 +
1070 +/*
1071 + * Mount flags
1072 + */
1073 +#define EXT2_MOUNT_CHECK               0x0001  /* Do mount-time checks */
1074 +#define EXT2_MOUNT_GRPID               0x0004  /* Create files with directory's group */
1075 +#define EXT2_MOUNT_DEBUG               0x0008  /* Some debugging messages */
1076 +#define EXT2_MOUNT_ERRORS_CONT         0x0010  /* Continue on errors */
1077 +#define EXT2_MOUNT_ERRORS_RO           0x0020  /* Remount fs ro on errors */
1078 +#define EXT2_MOUNT_ERRORS_PANIC                0x0040  /* Panic on errors */
1079 +#define EXT2_MOUNT_MINIX_DF            0x0080  /* Mimics the Minix statfs */
1080 +#define EXT2_MOUNT_NO_UID32            0x0200  /* Disable 32-bit UIDs */
1081 +
1082 +#define clear_opt(o, opt)              o &= ~EXT2_MOUNT_##opt
1083 +#define set_opt(o, opt)                        o |= EXT2_MOUNT_##opt
1084 +#define test_opt(sb, opt)              (EXT2_SB(sb)->s_mount_opt & \
1085 +                                        EXT2_MOUNT_##opt)
1086 +/*
1087 + * Maximal mount counts between two filesystem checks
1088 + */
1089 +#define EXT2_DFL_MAX_MNT_COUNT         20      /* Allow 20 mounts */
1090 +#define EXT2_DFL_CHECKINTERVAL         0       /* Don't use interval check */
1091 +
1092 +/*
1093 + * Behaviour when detecting errors
1094 + */
1095 +#define EXT2_ERRORS_CONTINUE           1       /* Continue execution */
1096 +#define EXT2_ERRORS_RO                 2       /* Remount fs read-only */
1097 +#define EXT2_ERRORS_PANIC              3       /* Panic */
1098 +#define EXT2_ERRORS_DEFAULT            EXT2_ERRORS_CONTINUE
1099 +
1100 +/*
1101 + * Structure of the super block
1102 + */
1103 +struct ext2_super_block {
1104 +       uint32_t        s_inodes_count;         /* Inodes count */
1105 +       uint32_t        s_blocks_count;         /* Blocks count */
1106 +       uint32_t        s_r_blocks_count;       /* Reserved blocks count */
1107 +       uint32_t        s_free_blocks_count;    /* Free blocks count */
1108 +       uint32_t        s_free_inodes_count;    /* Free inodes count */
1109 +       uint32_t        s_first_data_block;     /* First Data Block */
1110 +       uint32_t        s_log_block_size;       /* Block size */
1111 +       int32_t         s_log_frag_size;        /* Fragment size */
1112 +       uint32_t        s_blocks_per_group;     /* # Blocks per group */
1113 +       uint32_t        s_frags_per_group;      /* # Fragments per group */
1114 +       uint32_t        s_inodes_per_group;     /* # Inodes per group */
1115 +       uint32_t        s_mtime;                /* Mount time */
1116 +       uint32_t        s_wtime;                /* Write time */
1117 +       uint16_t        s_mnt_count;            /* Mount count */
1118 +       int16_t         s_max_mnt_count;        /* Maximal mount count */
1119 +       uint16_t        s_magic;                /* Magic signature */
1120 +       uint16_t        s_state;                /* File system state */
1121 +       uint16_t        s_errors;               /* Behaviour when detecting errors */
1122 +       uint16_t        s_minor_rev_level;      /* minor revision level */
1123 +       uint32_t        s_lastcheck;            /* time of last check */
1124 +       uint32_t        s_checkinterval;        /* max. time between checks */
1125 +       uint32_t        s_creator_os;           /* OS */
1126 +       uint32_t        s_rev_level;            /* Revision level */
1127 +       uint16_t        s_def_resuid;           /* Default uid for reserved blocks */
1128 +       uint16_t        s_def_resgid;           /* Default gid for reserved blocks */
1129 +       /*
1130 +        * These fields are for EXT2_DYNAMIC_REV superblocks only.
1131 +        *
1132 +        * Note: the difference between the compatible feature set and
1133 +        * the incompatible feature set is that if there is a bit set
1134 +        * in the incompatible feature set that the kernel doesn't
1135 +        * know about, it should refuse to mount the filesystem.
1136 +        *
1137 +        * e2fsck's requirements are more strict; if it doesn't know
1138 +        * about a feature in either the compatible or incompatible
1139 +        * feature set, it must abort and not try to meddle with
1140 +        * things it doesn't understand...
1141 +        */
1142 +       uint32_t        s_first_ino;            /* First non-reserved inode */
1143 +       uint16_t        s_inode_size;           /* size of inode structure */
1144 +       uint16_t        s_block_group_nr;       /* block group # of this superblock */
1145 +       uint32_t        s_feature_compat;       /* compatible feature set */
1146 +       uint32_t        s_feature_incompat;     /* incompatible feature set */
1147 +       uint32_t        s_feature_ro_compat;    /* readonly-compatible feature set */
1148 +       uint8_t         s_uuid[16];             /* 128-bit uuid for volume */
1149 +       char            s_volume_name[16];      /* volume name */
1150 +       char            s_last_mounted[64];     /* directory where last mounted */
1151 +       uint32_t        s_algorithm_usage_bitmap; /* For compression */
1152 +       /*
1153 +        * Performance hints.  Directory preallocation should only
1154 +        * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
1155 +        */
1156 +       uint8_t s_prealloc_blocks;      /* Nr of blocks to try to preallocate*/
1157 +       uint8_t s_prealloc_dir_blocks;  /* Nr to preallocate for dirs */
1158 +       uint16_t        s_reserved_gdt_blocks;  /* Per group table for online growth */
1159 +       /*
1160 +        * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
1161 +        */
1162 +       uint8_t         s_journal_uuid[16];     /* uuid of journal superblock */
1163 +       uint32_t        s_journal_inum;         /* inode number of journal file */
1164 +       uint32_t        s_journal_dev;          /* device number of journal file */
1165 +       uint32_t        s_last_orphan;          /* start of list of inodes to delete */
1166 +       uint32_t        s_hash_seed[4];         /* HTREE hash seed */
1167 +       uint8_t         s_def_hash_version;     /* Default hash version to use */
1168 +       uint8_t         s_jnl_backup_type;      /* Default type of journal backup */
1169 +       uint16_t        s_reserved_word_pad;
1170 +       uint32_t        s_default_mount_opts;
1171 +       uint32_t        s_first_meta_bg;        /* First metablock group */
1172 +       uint32_t        s_mkfs_time;            /* When the filesystem was created */
1173 +       uint32_t        s_jnl_blocks[17];       /* Backup of the journal inode */
1174 +       uint32_t        s_reserved[172];        /* Padding to the end of the block */
1175 +};
1176 +
1177 +/*
1178 + * Codes for operating systems
1179 + */
1180 +#define EXT2_OS_LINUX          0
1181 +#define EXT2_OS_HURD           1
1182 +#define EXT2_OS_MASIX          2
1183 +#define EXT2_OS_FREEBSD                3
1184 +#define EXT2_OS_LITES          4
1185 +
1186 +/*
1187 + * Revision levels
1188 + */
1189 +#define EXT2_GOOD_OLD_REV      0       /* The good old (original) format */
1190 +#define EXT2_DYNAMIC_REV       1       /* V2 format w/ dynamic inode sizes */
1191 +
1192 +#define EXT2_CURRENT_REV       EXT2_GOOD_OLD_REV
1193 +#define EXT2_MAX_SUPP_REV      EXT2_DYNAMIC_REV
1194 +
1195 +#define EXT2_GOOD_OLD_INODE_SIZE 128
1196 +
1197 +/*
1198 + * Journal inode backup types
1199 + */
1200 +#define EXT3_JNL_BACKUP_BLOCKS 1
1201 +
1202 +/*
1203 + * Feature set definitions
1204 + */
1205 +
1206 +#define EXT2_HAS_COMPAT_FEATURE(sb,mask)                       \
1207 +       ( EXT2_SB(sb)->s_feature_compat & (mask) )
1208 +#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask)                    \
1209 +       ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
1210 +#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask)                     \
1211 +       ( EXT2_SB(sb)->s_feature_incompat & (mask) )
1212 +
1213 +#define EXT2_FEATURE_COMPAT_DIR_PREALLOC       0x0001
1214 +#define EXT2_FEATURE_COMPAT_IMAGIC_INODES      0x0002
1215 +#define EXT3_FEATURE_COMPAT_HAS_JOURNAL                0x0004
1216 +#define EXT2_FEATURE_COMPAT_EXT_ATTR           0x0008
1217 +#define EXT2_FEATURE_COMPAT_RESIZE_INO         0x0010
1218 +#define EXT2_FEATURE_COMPAT_DIR_INDEX          0x0020
1219 +
1220 +#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
1221 +#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE      0x0002
1222 +/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR    0x0004 not used */
1223 +
1224 +#define EXT2_FEATURE_INCOMPAT_COMPRESSION      0x0001
1225 +#define EXT2_FEATURE_INCOMPAT_FILETYPE         0x0002
1226 +#define EXT3_FEATURE_INCOMPAT_RECOVER          0x0004 /* Needs recovery */
1227 +#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV      0x0008 /* Journal device */
1228 +#define EXT2_FEATURE_INCOMPAT_META_BG          0x0010
1229 +#define EXT3_FEATURE_INCOMPAT_EXTENTS          0x0040
1230 +
1231 +
1232 +#define EXT2_FEATURE_COMPAT_SUPP       0
1233 +#define EXT2_FEATURE_INCOMPAT_SUPP     (EXT2_FEATURE_INCOMPAT_FILETYPE)
1234 +#define EXT2_FEATURE_RO_COMPAT_SUPP    (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
1235 +                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
1236 +                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
1237 +
1238 +/*
1239 + * Default values for user and/or group using reserved blocks
1240 + */
1241 +#define EXT2_DEF_RESUID                0
1242 +#define EXT2_DEF_RESGID                0
1243 +
1244 +/*
1245 + * Default mount options
1246 + */
1247 +#define EXT2_DEFM_DEBUG                0x0001
1248 +#define EXT2_DEFM_BSDGROUPS    0x0002
1249 +#define EXT2_DEFM_XATTR_USER   0x0004
1250 +#define EXT2_DEFM_ACL          0x0008
1251 +#define EXT2_DEFM_UID16                0x0010
1252 +#define EXT3_DEFM_JMODE                0x0060
1253 +#define EXT3_DEFM_JMODE_DATA   0x0020
1254 +#define EXT3_DEFM_JMODE_ORDERED        0x0040
1255 +#define EXT3_DEFM_JMODE_WBACK  0x0060
1256 +
1257 +/*
1258 + * Structure of a directory entry
1259 + */
1260 +#define EXT2_NAME_LEN 255
1261 +
1262 +struct ext2_dir_entry {
1263 +       uint32_t        inode;                  /* Inode number */
1264 +       uint16_t        rec_len;                /* Directory entry length */
1265 +       uint16_t        name_len;               /* Name length */
1266 +       char            name[EXT2_NAME_LEN];    /* File name */
1267 +};
1268 +
1269 +/*
1270 + * The new version of the directory entry.  Since EXT2 structures are
1271 + * stored in intel byte order, and the name_len field could never be
1272 + * bigger than 255 chars, it's safe to reclaim the extra byte for the
1273 + * file_type field.
1274 + */
1275 +struct ext2_dir_entry_2 {
1276 +       uint32_t        inode;                  /* Inode number */
1277 +       uint16_t        rec_len;                /* Directory entry length */
1278 +       uint8_t         name_len;               /* Name length */
1279 +       uint8_t         file_type;
1280 +       char            name[EXT2_NAME_LEN];    /* File name */
1281 +};
1282 +
1283 +/*
1284 + * Ext2 directory file types.  Only the low 3 bits are used.  The
1285 + * other bits are reserved for now.
1286 + */
1287 +#define EXT2_FT_UNKNOWN                0
1288 +#define EXT2_FT_REG_FILE       1
1289 +#define EXT2_FT_DIR            2
1290 +#define EXT2_FT_CHRDEV         3
1291 +#define EXT2_FT_BLKDEV         4
1292 +#define EXT2_FT_FIFO           5
1293 +#define EXT2_FT_SOCK           6
1294 +#define EXT2_FT_SYMLINK                7
1295 +
1296 +#define EXT2_FT_MAX            8
1297 +
1298 +/*
1299 + * EXT2_DIR_PAD defines the directory entries boundaries
1300 + *
1301 + * NOTE: It must be a multiple of 4
1302 + */
1303 +#define EXT2_DIR_PAD                   4
1304 +#define EXT2_DIR_ROUND                 (EXT2_DIR_PAD - 1)
1305 +#define EXT2_DIR_REC_LEN(name_len)     (((name_len) + 8 + EXT2_DIR_ROUND) & \
1306 +                                        ~EXT2_DIR_ROUND)
1307 +
1308 +#endif
1309 diff --git a/include/bb_linux_ext2_fs.h b/include/bb_linux_ext2_fs.h
1310 deleted file mode 100644
1311 index fdc470b..0000000
1312 --- a/include/bb_linux_ext2_fs.h
1313 +++ /dev/null
1314 @@ -1,547 +0,0 @@
1315 -/*
1316 - * Work around linux/ext2_fs.h breakage.
1317 - * linux/ext2_fs.h might be removed from future kernel header distribution.
1318 - * See https://bugzilla.kernel.org/show_bug.cgi?id=42986
1319 - *
1320 - * Licensed under GPLv2, see file LICENSE in this source tree.
1321 - */
1322 -#ifndef BB_LINUX_EXT2_FS_H
1323 -#define BB_LINUX_EXT2_FS_H
1324 -
1325 -/*
1326 - * From linux/magic.h
1327 - */
1328 -
1329 -#define EXT2_SUPER_MAGIC        0xEF53
1330 -#define EXT3_SUPER_MAGIC        0xEF53
1331 -#define EXT4_SUPER_MAGIC        0xEF53
1332 -
1333 -/*
1334 - * From linux/ext2_fs.h, with minor changes.
1335 - */
1336 -
1337 -/*
1338 - * Copyright (C) 1992, 1993, 1994, 1995
1339 - * Remy Card (card@masi.ibp.fr)
1340 - * Laboratoire MASI - Institut Blaise Pascal
1341 - * Universite Pierre et Marie Curie (Paris VI)
1342 - *
1343 - *  from
1344 - *
1345 - *  linux/include/linux/minix_fs.h
1346 - *
1347 - *  Copyright (C) 1991, 1992  Linus Torvalds
1348 - */
1349 -
1350 -/*
1351 - * The second extended filesystem constants/structures
1352 - */
1353 -
1354 -/*
1355 - * Define EXT2_RESERVATION to reserve data blocks for expanding files
1356 - */
1357 -#define EXT2_DEFAULT_RESERVE_BLOCKS     8
1358 -/*max window size: 1024(direct blocks) + 3([t,d]indirect blocks) */
1359 -#define EXT2_MAX_RESERVE_BLOCKS         1027
1360 -#define EXT2_RESERVE_WINDOW_NOT_ALLOCATED 0
1361 -
1362 -/*
1363 - * Special inode numbers
1364 - */
1365 -#define        EXT2_BAD_INO             1      /* Bad blocks inode */
1366 -#define EXT2_ROOT_INO           2      /* Root inode */
1367 -#define EXT2_BOOT_LOADER_INO    5      /* Boot loader inode */
1368 -#define EXT2_UNDEL_DIR_INO      6      /* Undelete directory inode */
1369 -
1370 -/* First non-reserved inode for old ext2 filesystems */
1371 -#define EXT2_GOOD_OLD_FIRST_INO        11
1372 -
1373 -/* Assume that user mode programs are passing in an ext2fs superblock, not
1374 - * a kernel struct super_block.  This will allow us to call the feature-test
1375 - * macros from user land. */
1376 -#define EXT2_SB(sb)    (sb)
1377 -
1378 -/*
1379 - * Maximal count of links to a file
1380 - */
1381 -#define EXT2_LINK_MAX          32000
1382 -
1383 -/*
1384 - * Macro-instructions used to manage several block sizes
1385 - */
1386 -#define EXT2_MIN_BLOCK_SIZE            1024
1387 -#define        EXT2_MAX_BLOCK_SIZE             4096
1388 -#define EXT2_MIN_BLOCK_LOG_SIZE                  10
1389 -# define EXT2_BLOCK_SIZE(s)            (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
1390 -#define        EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (uint32_t))
1391 -# define EXT2_BLOCK_SIZE_BITS(s)       ((s)->s_log_block_size + 10)
1392 -#define EXT2_INODE_SIZE(s)     (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
1393 -                                EXT2_GOOD_OLD_INODE_SIZE : \
1394 -                                (s)->s_inode_size)
1395 -#define EXT2_FIRST_INO(s)      (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
1396 -                                EXT2_GOOD_OLD_FIRST_INO : \
1397 -                                (s)->s_first_ino)
1398 -
1399 -/*
1400 - * Macro-instructions used to manage fragments
1401 - */
1402 -#define EXT2_MIN_FRAG_SIZE             1024
1403 -#define        EXT2_MAX_FRAG_SIZE              4096
1404 -#define EXT2_MIN_FRAG_LOG_SIZE           10
1405 -# define EXT2_FRAG_SIZE(s)             (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
1406 -# define EXT2_FRAGS_PER_BLOCK(s)       (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
1407 -
1408 -/*
1409 - * Structure of a blocks group descriptor
1410 - */
1411 -struct ext2_group_desc
1412 -{
1413 -       uint32_t        bg_block_bitmap;                /* Blocks bitmap block */
1414 -       uint32_t        bg_inode_bitmap;                /* Inodes bitmap block */
1415 -       uint32_t        bg_inode_table;         /* Inodes table block */
1416 -       uint16_t        bg_free_blocks_count;   /* Free blocks count */
1417 -       uint16_t        bg_free_inodes_count;   /* Free inodes count */
1418 -       uint16_t        bg_used_dirs_count;     /* Directories count */
1419 -       uint16_t        bg_pad;
1420 -       uint32_t        bg_reserved[3];
1421 -};
1422 -
1423 -/*
1424 - * Macro-instructions used to manage group descriptors
1425 - */
1426 -# define EXT2_BLOCKS_PER_GROUP(s)      ((s)->s_blocks_per_group)
1427 -# define EXT2_DESC_PER_BLOCK(s)                (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
1428 -# define EXT2_INODES_PER_GROUP(s)      ((s)->s_inodes_per_group)
1429 -
1430 -/*
1431 - * Constants relative to the data blocks
1432 - */
1433 -#define        EXT2_NDIR_BLOCKS                12
1434 -#define        EXT2_IND_BLOCK                  EXT2_NDIR_BLOCKS
1435 -#define        EXT2_DIND_BLOCK                 (EXT2_IND_BLOCK + 1)
1436 -#define        EXT2_TIND_BLOCK                 (EXT2_DIND_BLOCK + 1)
1437 -#define        EXT2_N_BLOCKS                   (EXT2_TIND_BLOCK + 1)
1438 -
1439 -/*
1440 - * Inode flags (GETFLAGS/SETFLAGS)
1441 - */
1442 -#define        EXT2_SECRM_FL                   FS_SECRM_FL     /* Secure deletion */
1443 -#define        EXT2_UNRM_FL                    FS_UNRM_FL      /* Undelete */
1444 -#define        EXT2_COMPR_FL                   FS_COMPR_FL     /* Compress file */
1445 -#define EXT2_SYNC_FL                   FS_SYNC_FL      /* Synchronous updates */
1446 -#define EXT2_IMMUTABLE_FL              FS_IMMUTABLE_FL /* Immutable file */
1447 -#define EXT2_APPEND_FL                 FS_APPEND_FL    /* writes to file may only append */
1448 -#define EXT2_NODUMP_FL                 FS_NODUMP_FL    /* do not dump file */
1449 -#define EXT2_NOATIME_FL                        FS_NOATIME_FL   /* do not update atime */
1450 -/* Reserved for compression usage... */
1451 -#define EXT2_DIRTY_FL                  FS_DIRTY_FL
1452 -#define EXT2_COMPRBLK_FL               FS_COMPRBLK_FL  /* One or more compressed clusters */
1453 -#define EXT2_NOCOMP_FL                 FS_NOCOMP_FL    /* Don't compress */
1454 -#define EXT2_ECOMPR_FL                 FS_ECOMPR_FL    /* Compression error */
1455 -/* End compression flags --- maybe not all used */
1456 -#define EXT2_BTREE_FL                  FS_BTREE_FL     /* btree format dir */
1457 -#define EXT2_INDEX_FL                  FS_INDEX_FL     /* hash-indexed directory */
1458 -#define EXT2_IMAGIC_FL                 FS_IMAGIC_FL    /* AFS directory */
1459 -#define EXT2_JOURNAL_DATA_FL           FS_JOURNAL_DATA_FL /* Reserved for ext3 */
1460 -#define EXT2_NOTAIL_FL                 FS_NOTAIL_FL    /* file tail should not be merged */
1461 -#define EXT2_DIRSYNC_FL                        FS_DIRSYNC_FL   /* dirsync behaviour (directories only) */
1462 -#define EXT2_TOPDIR_FL                 FS_TOPDIR_FL    /* Top of directory hierarchies*/
1463 -#define EXT2_RESERVED_FL               FS_RESERVED_FL  /* reserved for ext2 lib */
1464 -
1465 -#define EXT2_FL_USER_VISIBLE           FS_FL_USER_VISIBLE      /* User visible flags */
1466 -#define EXT2_FL_USER_MODIFIABLE                FS_FL_USER_MODIFIABLE   /* User modifiable flags */
1467 -
1468 -/* Flags that should be inherited by new inodes from their parent. */
1469 -#define EXT2_FL_INHERITED (EXT2_SECRM_FL | EXT2_UNRM_FL | EXT2_COMPR_FL |\
1470 -                          EXT2_SYNC_FL | EXT2_IMMUTABLE_FL | EXT2_APPEND_FL |\
1471 -                          EXT2_NODUMP_FL | EXT2_NOATIME_FL | EXT2_COMPRBLK_FL|\
1472 -                          EXT2_NOCOMP_FL | EXT2_JOURNAL_DATA_FL |\
1473 -                          EXT2_NOTAIL_FL | EXT2_DIRSYNC_FL)
1474 -
1475 -/* Flags that are appropriate for regular files (all but dir-specific ones). */
1476 -#define EXT2_REG_FLMASK (~(EXT2_DIRSYNC_FL | EXT2_TOPDIR_FL))
1477 -
1478 -/* Flags that are appropriate for non-directories/regular files. */
1479 -#define EXT2_OTHER_FLMASK (EXT2_NODUMP_FL | EXT2_NOATIME_FL)
1480 -
1481 -/* Mask out flags that are inappropriate for the given type of inode. */
1482 -static inline uint32_t ext2_mask_flags(mode_t mode, uint32_t flags)
1483 -{
1484 -       if (S_ISDIR(mode))
1485 -               return flags;
1486 -       else if (S_ISREG(mode))
1487 -               return flags & EXT2_REG_FLMASK;
1488 -       else
1489 -               return flags & EXT2_OTHER_FLMASK;
1490 -}
1491 -
1492 -/*
1493 - * ioctl commands
1494 - */
1495 -#define        EXT2_IOC_GETFLAGS               FS_IOC_GETFLAGS
1496 -#define        EXT2_IOC_SETFLAGS               FS_IOC_SETFLAGS
1497 -#define        EXT2_IOC_GETVERSION             FS_IOC_GETVERSION
1498 -#define        EXT2_IOC_SETVERSION             FS_IOC_SETVERSION
1499 -#define        EXT2_IOC_GETRSVSZ               _IOR('f', 5, long)
1500 -#define        EXT2_IOC_SETRSVSZ               _IOW('f', 6, long)
1501 -
1502 -/*
1503 - * ioctl commands in 32 bit emulation
1504 - */
1505 -#define EXT2_IOC32_GETFLAGS            FS_IOC32_GETFLAGS
1506 -#define EXT2_IOC32_SETFLAGS            FS_IOC32_SETFLAGS
1507 -#define EXT2_IOC32_GETVERSION          FS_IOC32_GETVERSION
1508 -#define EXT2_IOC32_SETVERSION          FS_IOC32_SETVERSION
1509 -
1510 -/*
1511 - * Structure of an inode on the disk
1512 - */
1513 -struct ext2_inode {
1514 -       uint16_t        i_mode;         /* File mode */
1515 -       uint16_t        i_uid;          /* Low 16 bits of Owner Uid */
1516 -       uint32_t        i_size;         /* Size in bytes */
1517 -       uint32_t        i_atime;        /* Access time */
1518 -       uint32_t        i_ctime;        /* Creation time */
1519 -       uint32_t        i_mtime;        /* Modification time */
1520 -       uint32_t        i_dtime;        /* Deletion Time */
1521 -       uint16_t        i_gid;          /* Low 16 bits of Group Id */
1522 -       uint16_t        i_links_count;  /* Links count */
1523 -       uint32_t        i_blocks;       /* Blocks count */
1524 -       uint32_t        i_flags;        /* File flags */
1525 -       union {
1526 -               struct {
1527 -                       uint32_t  l_i_reserved1;
1528 -               } linux1;
1529 -               struct {
1530 -                       uint32_t  h_i_translator;
1531 -               } hurd1;
1532 -               struct {
1533 -                       uint32_t  m_i_reserved1;
1534 -               } masix1;
1535 -       } osd1;                         /* OS dependent 1 */
1536 -       uint32_t        i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
1537 -       uint32_t        i_generation;   /* File version (for NFS) */
1538 -       uint32_t        i_file_acl;     /* File ACL */
1539 -       uint32_t        i_dir_acl;      /* Directory ACL */
1540 -       uint32_t        i_faddr;        /* Fragment address */
1541 -       union {
1542 -               struct {
1543 -                       uint8_t l_i_frag;       /* Fragment number */
1544 -                       uint8_t l_i_fsize;      /* Fragment size */
1545 -                       uint16_t        i_pad1;
1546 -                       uint16_t        l_i_uid_high;   /* these 2 fields    */
1547 -                       uint16_t        l_i_gid_high;   /* were reserved2[0] */
1548 -                       uint32_t        l_i_reserved2;
1549 -               } linux2;
1550 -               struct {
1551 -                       uint8_t h_i_frag;       /* Fragment number */
1552 -                       uint8_t h_i_fsize;      /* Fragment size */
1553 -                       uint16_t        h_i_mode_high;
1554 -                       uint16_t        h_i_uid_high;
1555 -                       uint16_t        h_i_gid_high;
1556 -                       uint32_t        h_i_author;
1557 -               } hurd2;
1558 -               struct {
1559 -                       uint8_t m_i_frag;       /* Fragment number */
1560 -                       uint8_t m_i_fsize;      /* Fragment size */
1561 -                       uint16_t        m_pad1;
1562 -                       uint32_t        m_i_reserved2[2];
1563 -               } masix2;
1564 -       } osd2;                         /* OS dependent 2 */
1565 -};
1566 -
1567 -#define i_size_high    i_dir_acl
1568 -
1569 -#if defined(__KERNEL__) || defined(__linux__)
1570 -#define i_reserved1    osd1.linux1.l_i_reserved1
1571 -#define i_frag         osd2.linux2.l_i_frag
1572 -#define i_fsize                osd2.linux2.l_i_fsize
1573 -#define i_uid_low      i_uid
1574 -#define i_gid_low      i_gid
1575 -#define i_uid_high     osd2.linux2.l_i_uid_high
1576 -#define i_gid_high     osd2.linux2.l_i_gid_high
1577 -#define i_reserved2    osd2.linux2.l_i_reserved2
1578 -#endif
1579 -
1580 -#ifdef __hurd__
1581 -#define i_translator   osd1.hurd1.h_i_translator
1582 -#define i_frag         osd2.hurd2.h_i_frag
1583 -#define i_fsize                osd2.hurd2.h_i_fsize
1584 -#define i_uid_high     osd2.hurd2.h_i_uid_high
1585 -#define i_gid_high     osd2.hurd2.h_i_gid_high
1586 -#define i_author       osd2.hurd2.h_i_author
1587 -#endif
1588 -
1589 -#ifdef __masix__
1590 -#define i_reserved1    osd1.masix1.m_i_reserved1
1591 -#define i_frag         osd2.masix2.m_i_frag
1592 -#define i_fsize                osd2.masix2.m_i_fsize
1593 -#define i_reserved2    osd2.masix2.m_i_reserved2
1594 -#endif
1595 -
1596 -/*
1597 - * File system states
1598 - */
1599 -#define        EXT2_VALID_FS                   0x0001  /* Unmounted cleanly */
1600 -#define        EXT2_ERROR_FS                   0x0002  /* Errors detected */
1601 -
1602 -/*
1603 - * Mount flags
1604 - */
1605 -#define EXT2_MOUNT_CHECK               0x000001  /* Do mount-time checks */
1606 -#define EXT2_MOUNT_OLDALLOC            0x000002  /* Don't use the new Orlov allocator */
1607 -#define EXT2_MOUNT_GRPID               0x000004  /* Create files with directory's group */
1608 -#define EXT2_MOUNT_DEBUG               0x000008  /* Some debugging messages */
1609 -#define EXT2_MOUNT_ERRORS_CONT         0x000010  /* Continue on errors */
1610 -#define EXT2_MOUNT_ERRORS_RO           0x000020  /* Remount fs ro on errors */
1611 -#define EXT2_MOUNT_ERRORS_PANIC                0x000040  /* Panic on errors */
1612 -#define EXT2_MOUNT_MINIX_DF            0x000080  /* Mimics the Minix statfs */
1613 -#define EXT2_MOUNT_NOBH                        0x000100  /* No buffer_heads */
1614 -#define EXT2_MOUNT_NO_UID32            0x000200  /* Disable 32-bit UIDs */
1615 -#define EXT2_MOUNT_XATTR_USER          0x004000  /* Extended user attributes */
1616 -#define EXT2_MOUNT_POSIX_ACL           0x008000  /* POSIX Access Control Lists */
1617 -#define EXT2_MOUNT_XIP                 0x010000  /* Execute in place */
1618 -#define EXT2_MOUNT_USRQUOTA            0x020000  /* user quota */
1619 -#define EXT2_MOUNT_GRPQUOTA            0x040000  /* group quota */
1620 -#define EXT2_MOUNT_RESERVATION         0x080000  /* Preallocation */
1621 -
1622 -
1623 -#define clear_opt(o, opt)              o &= ~EXT2_MOUNT_##opt
1624 -#define set_opt(o, opt)                        o |= EXT2_MOUNT_##opt
1625 -#define test_opt(sb, opt)              (EXT2_SB(sb)->s_mount_opt & \
1626 -                                        EXT2_MOUNT_##opt)
1627 -/*
1628 - * Maximal mount counts between two filesystem checks
1629 - */
1630 -#define EXT2_DFL_MAX_MNT_COUNT         20      /* Allow 20 mounts */
1631 -#define EXT2_DFL_CHECKINTERVAL         0       /* Don't use interval check */
1632 -
1633 -/*
1634 - * Behaviour when detecting errors
1635 - */
1636 -#define EXT2_ERRORS_CONTINUE           1       /* Continue execution */
1637 -#define EXT2_ERRORS_RO                 2       /* Remount fs read-only */
1638 -#define EXT2_ERRORS_PANIC              3       /* Panic */
1639 -#define EXT2_ERRORS_DEFAULT            EXT2_ERRORS_CONTINUE
1640 -
1641 -/*
1642 - * Structure of the super block
1643 - */
1644 -struct ext2_super_block {
1645 -       uint32_t        s_inodes_count;         /* Inodes count */
1646 -       uint32_t        s_blocks_count;         /* Blocks count */
1647 -       uint32_t        s_r_blocks_count;       /* Reserved blocks count */
1648 -       uint32_t        s_free_blocks_count;    /* Free blocks count */
1649 -       uint32_t        s_free_inodes_count;    /* Free inodes count */
1650 -       uint32_t        s_first_data_block;     /* First Data Block */
1651 -       uint32_t        s_log_block_size;       /* Block size */
1652 -       uint32_t        s_log_frag_size;        /* Fragment size */
1653 -       uint32_t        s_blocks_per_group;     /* # Blocks per group */
1654 -       uint32_t        s_frags_per_group;      /* # Fragments per group */
1655 -       uint32_t        s_inodes_per_group;     /* # Inodes per group */
1656 -       uint32_t        s_mtime;                /* Mount time */
1657 -       uint32_t        s_wtime;                /* Write time */
1658 -       uint16_t        s_mnt_count;            /* Mount count */
1659 -       uint16_t        s_max_mnt_count;        /* Maximal mount count */
1660 -       uint16_t        s_magic;                /* Magic signature */
1661 -       uint16_t        s_state;                /* File system state */
1662 -       uint16_t        s_errors;               /* Behaviour when detecting errors */
1663 -       uint16_t        s_minor_rev_level;      /* minor revision level */
1664 -       uint32_t        s_lastcheck;            /* time of last check */
1665 -       uint32_t        s_checkinterval;        /* max. time between checks */
1666 -       uint32_t        s_creator_os;           /* OS */
1667 -       uint32_t        s_rev_level;            /* Revision level */
1668 -       uint16_t        s_def_resuid;           /* Default uid for reserved blocks */
1669 -       uint16_t        s_def_resgid;           /* Default gid for reserved blocks */
1670 -       /*
1671 -        * These fields are for EXT2_DYNAMIC_REV superblocks only.
1672 -        *
1673 -        * Note: the difference between the compatible feature set and
1674 -        * the incompatible feature set is that if there is a bit set
1675 -        * in the incompatible feature set that the kernel doesn't
1676 -        * know about, it should refuse to mount the filesystem.
1677 -        *
1678 -        * e2fsck's requirements are more strict; if it doesn't know
1679 -        * about a feature in either the compatible or incompatible
1680 -        * feature set, it must abort and not try to meddle with
1681 -        * things it doesn't understand...
1682 -        */
1683 -       uint32_t        s_first_ino;            /* First non-reserved inode */
1684 -       uint16_t   s_inode_size;                /* size of inode structure */
1685 -       uint16_t        s_block_group_nr;       /* block group # of this superblock */
1686 -       uint32_t        s_feature_compat;       /* compatible feature set */
1687 -       uint32_t        s_feature_incompat;     /* incompatible feature set */
1688 -       uint32_t        s_feature_ro_compat;    /* readonly-compatible feature set */
1689 -       uint8_t s_uuid[16];             /* 128-bit uuid for volume */
1690 -       char    s_volume_name[16];      /* volume name */
1691 -       char    s_last_mounted[64];     /* directory where last mounted */
1692 -       uint32_t        s_algorithm_usage_bitmap; /* For compression */
1693 -       /*
1694 -        * Performance hints.  Directory preallocation should only
1695 -        * happen if the EXT2_COMPAT_PREALLOC flag is on.
1696 -        */
1697 -       uint8_t s_prealloc_blocks;      /* Nr of blocks to try to preallocate*/
1698 -       uint8_t s_prealloc_dir_blocks;  /* Nr to preallocate for dirs */
1699 -       uint16_t        s_padding1;
1700 -       /*
1701 -        * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set.
1702 -        */
1703 -       uint8_t s_journal_uuid[16];     /* uuid of journal superblock */
1704 -       uint32_t        s_journal_inum;         /* inode number of journal file */
1705 -       uint32_t        s_journal_dev;          /* device number of journal file */
1706 -       uint32_t        s_last_orphan;          /* start of list of inodes to delete */
1707 -       uint32_t        s_hash_seed[4];         /* HTREE hash seed */
1708 -       uint8_t s_def_hash_version;     /* Default hash version to use */
1709 -       uint8_t s_reserved_char_pad;
1710 -       uint16_t        s_reserved_word_pad;
1711 -       uint32_t        s_default_mount_opts;
1712 -       uint32_t        s_first_meta_bg;        /* First metablock block group */
1713 -       uint32_t        s_reserved[190];        /* Padding to the end of the block */
1714 -};
1715 -
1716 -/*
1717 - * Codes for operating systems
1718 - */
1719 -#define EXT2_OS_LINUX          0
1720 -#define EXT2_OS_HURD           1
1721 -#define EXT2_OS_MASIX          2
1722 -#define EXT2_OS_FREEBSD                3
1723 -#define EXT2_OS_LITES          4
1724 -
1725 -/*
1726 - * Revision levels
1727 - */
1728 -#define EXT2_GOOD_OLD_REV      0       /* The good old (original) format */
1729 -#define EXT2_DYNAMIC_REV       1       /* V2 format w/ dynamic inode sizes */
1730 -
1731 -#define EXT2_CURRENT_REV       EXT2_GOOD_OLD_REV
1732 -#define EXT2_MAX_SUPP_REV      EXT2_DYNAMIC_REV
1733 -
1734 -#define EXT2_GOOD_OLD_INODE_SIZE 128
1735 -
1736 -/*
1737 - * Feature set definitions
1738 - */
1739 -
1740 -#define EXT2_HAS_COMPAT_FEATURE(sb,mask)                       \
1741 -       ( EXT2_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) )
1742 -#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask)                    \
1743 -       ( EXT2_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) )
1744 -#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask)                     \
1745 -       ( EXT2_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) )
1746 -#define EXT2_SET_COMPAT_FEATURE(sb,mask)                       \
1747 -       EXT2_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask)
1748 -#define EXT2_SET_RO_COMPAT_FEATURE(sb,mask)                    \
1749 -       EXT2_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask)
1750 -#define EXT2_SET_INCOMPAT_FEATURE(sb,mask)                     \
1751 -       EXT2_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask)
1752 -#define EXT2_CLEAR_COMPAT_FEATURE(sb,mask)                     \
1753 -       EXT2_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask)
1754 -#define EXT2_CLEAR_RO_COMPAT_FEATURE(sb,mask)                  \
1755 -       EXT2_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask)
1756 -#define EXT2_CLEAR_INCOMPAT_FEATURE(sb,mask)                   \
1757 -       EXT2_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask)
1758 -
1759 -#define EXT2_FEATURE_COMPAT_DIR_PREALLOC       0x0001
1760 -#define EXT2_FEATURE_COMPAT_IMAGIC_INODES      0x0002
1761 -#define EXT3_FEATURE_COMPAT_HAS_JOURNAL                0x0004
1762 -#define EXT2_FEATURE_COMPAT_EXT_ATTR           0x0008
1763 -#define EXT2_FEATURE_COMPAT_RESIZE_INO         0x0010
1764 -#define EXT2_FEATURE_COMPAT_DIR_INDEX          0x0020
1765 -#define EXT2_FEATURE_COMPAT_ANY                        0xffffffff
1766 -
1767 -#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER    0x0001
1768 -#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE      0x0002
1769 -#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR       0x0004
1770 -#define EXT2_FEATURE_RO_COMPAT_ANY             0xffffffff
1771 -
1772 -#define EXT2_FEATURE_INCOMPAT_COMPRESSION      0x0001
1773 -#define EXT2_FEATURE_INCOMPAT_FILETYPE         0x0002
1774 -#define EXT3_FEATURE_INCOMPAT_RECOVER          0x0004
1775 -#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV      0x0008
1776 -#define EXT2_FEATURE_INCOMPAT_META_BG          0x0010
1777 -#define EXT2_FEATURE_INCOMPAT_ANY              0xffffffff
1778 -
1779 -#define EXT2_FEATURE_COMPAT_SUPP       EXT2_FEATURE_COMPAT_EXT_ATTR
1780 -#define EXT2_FEATURE_INCOMPAT_SUPP     (EXT2_FEATURE_INCOMPAT_FILETYPE| \
1781 -                                        EXT2_FEATURE_INCOMPAT_META_BG)
1782 -#define EXT2_FEATURE_RO_COMPAT_SUPP    (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
1783 -                                        EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
1784 -                                        EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
1785 -#define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED     ~EXT2_FEATURE_RO_COMPAT_SUPP
1786 -#define EXT2_FEATURE_INCOMPAT_UNSUPPORTED      ~EXT2_FEATURE_INCOMPAT_SUPP
1787 -
1788 -/*
1789 - * Default values for user and/or group using reserved blocks
1790 - */
1791 -#define        EXT2_DEF_RESUID         0
1792 -#define        EXT2_DEF_RESGID         0
1793 -
1794 -/*
1795 - * Default mount options
1796 - */
1797 -#define EXT2_DEFM_DEBUG                0x0001
1798 -#define EXT2_DEFM_BSDGROUPS    0x0002
1799 -#define EXT2_DEFM_XATTR_USER   0x0004
1800 -#define EXT2_DEFM_ACL          0x0008
1801 -#define EXT2_DEFM_UID16                0x0010
1802 -    /* Not used by ext2, but reserved for use by ext3 */
1803 -#define EXT3_DEFM_JMODE                0x0060 
1804 -#define EXT3_DEFM_JMODE_DATA   0x0020
1805 -#define EXT3_DEFM_JMODE_ORDERED        0x0040
1806 -#define EXT3_DEFM_JMODE_WBACK  0x0060
1807 -
1808 -/*
1809 - * Structure of a directory entry
1810 - */
1811 -#define EXT2_NAME_LEN 255
1812 -
1813 -struct ext2_dir_entry {
1814 -       uint32_t        inode;                  /* Inode number */
1815 -       uint16_t        rec_len;                /* Directory entry length */
1816 -       uint16_t        name_len;               /* Name length */
1817 -       char    name[EXT2_NAME_LEN];    /* File name */
1818 -};
1819 -
1820 -/*
1821 - * The new version of the directory entry.  Since EXT2 structures are
1822 - * stored in intel byte order, and the name_len field could never be
1823 - * bigger than 255 chars, it's safe to reclaim the extra byte for the
1824 - * file_type field.
1825 - */
1826 -struct ext2_dir_entry_2 {
1827 -       uint32_t        inode;                  /* Inode number */
1828 -       uint16_t        rec_len;                /* Directory entry length */
1829 -       uint8_t name_len;               /* Name length */
1830 -       uint8_t file_type;
1831 -       char    name[EXT2_NAME_LEN];    /* File name */
1832 -};
1833 -
1834 -/*
1835 - * Ext2 directory file types.  Only the low 3 bits are used.  The
1836 - * other bits are reserved for now.
1837 - */
1838 -enum {
1839 -       EXT2_FT_UNKNOWN         = 0,
1840 -       EXT2_FT_REG_FILE        = 1,
1841 -       EXT2_FT_DIR             = 2,
1842 -       EXT2_FT_CHRDEV          = 3,
1843 -       EXT2_FT_BLKDEV          = 4,
1844 -       EXT2_FT_FIFO            = 5,
1845 -       EXT2_FT_SOCK            = 6,
1846 -       EXT2_FT_SYMLINK         = 7,
1847 -       EXT2_FT_MAX
1848 -};
1849 -
1850 -/*
1851 - * EXT2_DIR_PAD defines the directory entries boundaries
1852 - *
1853 - * NOTE: It must be a multiple of 4
1854 - */
1855 -#define EXT2_DIR_PAD                   4
1856 -#define EXT2_DIR_ROUND                         (EXT2_DIR_PAD - 1)
1857 -#define EXT2_DIR_REC_LEN(name_len)     (((name_len) + 8 + EXT2_DIR_ROUND) & \
1858 -                                        ~EXT2_DIR_ROUND)
1859 -#define EXT2_MAX_REC_LEN               ((1<<16)-1)
1860 -
1861 -#endif
1862 diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
1863 index 2d9d720..69b25c9 100644
1864 --- a/util-linux/mkfs_ext2.c
1865 +++ b/util-linux/mkfs_ext2.c
1866 @@ -48,7 +48,7 @@
1867  
1868  #include "libbb.h"
1869  #include <linux/fs.h>
1870 -#include "bb_linux_ext2_fs.h"
1871 +#include "bb_e2fs_defs.h"
1872  
1873  #define ENABLE_FEATURE_MKFS_EXT2_RESERVED_GDT 0
1874  #define ENABLE_FEATURE_MKFS_EXT2_DIR_INDEX    1
1875 -- 
1876 1.7.9.5
1877