source: branches/3.2/mindi-busybox/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h @ 3232

Last change on this file since 3232 was 3232, checked in by bruno, 5 years ago
  • Update mindi-busybox to 1.21.1
  • Property svn:eol-style set to native
File size: 17.8 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 *  linux/include/linux/ext2_fs.h
4 *
5 * Copyright (C) 1992, 1993, 1994, 1995
6 * Remy Card (card@masi.ibp.fr)
7 * Laboratoire MASI - Institut Blaise Pascal
8 * Universite Pierre et Marie Curie (Paris VI)
9 *
10 *  from
11 *
12 *  linux/include/linux/minix_fs.h
13 *
14 *  Copyright (C) 1991, 1992  Linus Torvalds
15 */
16#ifndef LINUX_EXT2_FS_H
17#define LINUX_EXT2_FS_H 1
18
19#include "ext2_types.h"     /* Changed from linux/types.h */
20
21/*
22 * Special inode numbers
23 */
24#define EXT2_BAD_INO         1  /* Bad blocks inode */
25#define EXT2_ROOT_INO        2  /* Root inode */
26#define EXT2_ACL_IDX_INO     3  /* ACL inode */
27#define EXT2_ACL_DATA_INO    4  /* ACL inode */
28#define EXT2_BOOT_LOADER_INO     5  /* Boot loader inode */
29#define EXT2_UNDEL_DIR_INO   6  /* Undelete directory inode */
30#define EXT2_RESIZE_INO      7  /* Reserved group descriptors inode */
31#define EXT2_JOURNAL_INO     8  /* Journal inode */
32
33/* First non-reserved inode for old ext2 filesystems */
34#define EXT2_GOOD_OLD_FIRST_INO 11
35
36/*
37 * The second extended file system magic number
38 */
39#define EXT2_SUPER_MAGIC    0xEF53
40
41/* Assume that user mode programs are passing in an ext2fs superblock, not
42 * a kernel struct super_block.  This will allow us to call the feature-test
43 * macros from user land. */
44#define EXT2_SB(sb) (sb)
45
46/*
47 * Maximal count of links to a file
48 */
49#define EXT2_LINK_MAX       32000
50
51/*
52 * Macro-instructions used to manage several block sizes
53 */
54#define EXT2_MIN_BLOCK_LOG_SIZE     10  /* 1024 */
55#define EXT2_MAX_BLOCK_LOG_SIZE     16  /* 65536 */
56#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)
57#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)
58#define EXT2_BLOCK_SIZE(s)  (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
59#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
60#define EXT2_INODE_SIZE(s)  (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
61                 EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
62#define EXT2_FIRST_INO(s)   (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
63                 EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
64#define EXT2_ADDR_PER_BLOCK(s)  (EXT2_BLOCK_SIZE(s) / sizeof(__u32))
65
66/*
67 * Macro-instructions used to manage fragments
68 */
69#define EXT2_MIN_FRAG_SIZE      EXT2_MIN_BLOCK_SIZE
70#define EXT2_MAX_FRAG_SIZE      EXT2_MAX_BLOCK_SIZE
71#define EXT2_MIN_FRAG_LOG_SIZE      EXT2_MIN_BLOCK_LOG_SIZE
72# define EXT2_FRAG_SIZE(s)      (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
73# define EXT2_FRAGS_PER_BLOCK(s)    (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
74
75/*
76 * ACL structures
77 */
78struct ext2_acl_header  /* Header of Access Control Lists */
79{
80    __u32   aclh_size;
81    __u32   aclh_file_count;
82    __u32   aclh_acle_count;
83    __u32   aclh_first_acle;
84};
85
86struct ext2_acl_entry   /* Access Control List Entry */
87{
88    __u32   acle_size;
89    __u16   acle_perms; /* Access permissions */
90    __u16   acle_type;  /* Type of entry */
91    __u16   acle_tag;   /* User or group identity */
92    __u16   acle_pad1;
93    __u32   acle_next;  /* Pointer on next entry for the */
94                    /* same inode or on next free entry */
95};
96
97/*
98 * Structure of a blocks group descriptor
99 */
100struct ext2_group_desc
101{
102    __u32   bg_block_bitmap;        /* Blocks bitmap block */
103    __u32   bg_inode_bitmap;        /* Inodes bitmap block */
104    __u32   bg_inode_table;     /* Inodes table block */
105    __u16   bg_free_blocks_count;   /* Free blocks count */
106    __u16   bg_free_inodes_count;   /* Free inodes count */
107    __u16   bg_used_dirs_count; /* Directories count */
108    __u16   bg_pad;
109    __u32   bg_reserved[3];
110};
111
112/*
113 * Data structures used by the directory indexing feature
114 *
115 * Note: all of the multibyte integer fields are little endian.
116 */
117
118/*
119 * Note: dx_root_info is laid out so that if it should somehow get
120 * overlaid by a dirent the two low bits of the hash version will be
121 * zero.  Therefore, the hash version mod 4 should never be 0.
122 * Sincerely, the paranoia department.
123 */
124struct ext2_dx_root_info {
125    __u32 reserved_zero;
126    __u8 hash_version; /* 0 now, 1 at release */
127    __u8 info_length; /* 8 */
128    __u8 indirect_levels;
129    __u8 unused_flags;
130};
131
132#define EXT2_HASH_LEGACY    0
133#define EXT2_HASH_HALF_MD4  1
134#define EXT2_HASH_TEA       2
135
136#define EXT2_HASH_FLAG_INCOMPAT 0x1
137
138struct ext2_dx_entry {
139    __u32 hash;
140    __u32 block;
141};
142
143struct ext2_dx_countlimit {
144    __u16 limit;
145    __u16 count;
146};
147
148
149/*
150 * Macro-instructions used to manage group descriptors
151 */
152#define EXT2_BLOCKS_PER_GROUP(s)    (EXT2_SB(s)->s_blocks_per_group)
153#define EXT2_INODES_PER_GROUP(s)    (EXT2_SB(s)->s_inodes_per_group)
154#define EXT2_INODES_PER_BLOCK(s)    (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
155/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
156#define EXT2_MAX_BLOCKS_PER_GROUP(s)    ((1 << 16) - 8)
157#define EXT2_MAX_INODES_PER_GROUP(s)    ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
158#define EXT2_DESC_PER_BLOCK(s)      (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
159
160/*
161 * Constants relative to the data blocks
162 */
163#define EXT2_NDIR_BLOCKS        12
164#define EXT2_IND_BLOCK          EXT2_NDIR_BLOCKS
165#define EXT2_DIND_BLOCK         (EXT2_IND_BLOCK + 1)
166#define EXT2_TIND_BLOCK         (EXT2_DIND_BLOCK + 1)
167#define EXT2_N_BLOCKS           (EXT2_TIND_BLOCK + 1)
168
169/*
170 * Inode flags
171 */
172#define EXT2_SECRM_FL           0x00000001 /* Secure deletion */
173#define EXT2_UNRM_FL            0x00000002 /* Undelete */
174#define EXT2_COMPR_FL           0x00000004 /* Compress file */
175#define EXT2_SYNC_FL            0x00000008 /* Synchronous updates */
176#define EXT2_IMMUTABLE_FL       0x00000010 /* Immutable file */
177#define EXT2_APPEND_FL          0x00000020 /* writes to file may only append */
178#define EXT2_NODUMP_FL          0x00000040 /* do not dump file */
179#define EXT2_NOATIME_FL         0x00000080 /* do not update atime */
180/* Reserved for compression usage... */
181#define EXT2_DIRTY_FL           0x00000100
182#define EXT2_COMPRBLK_FL        0x00000200 /* One or more compressed clusters */
183#define EXT2_NOCOMPR_FL         0x00000400 /* Access raw compressed data */
184#define EXT2_ECOMPR_FL          0x00000800 /* Compression error */
185/* End compression flags --- maybe not all used */
186#define EXT2_BTREE_FL           0x00001000 /* btree format dir */
187#define EXT2_INDEX_FL           0x00001000 /* hash-indexed directory */
188#define EXT2_IMAGIC_FL          0x00002000
189#define EXT3_JOURNAL_DATA_FL        0x00004000 /* file data should be journaled */
190#define EXT2_NOTAIL_FL          0x00008000 /* file tail should not be merged */
191#define EXT2_DIRSYNC_FL         0x00010000 /* Synchronous directory modifications */
192#define EXT2_TOPDIR_FL          0x00020000 /* Top of directory hierarchies*/
193#define EXT3_EXTENTS_FL         0x00080000 /* Inode uses extents */
194#define EXT2_RESERVED_FL        0x80000000 /* reserved for ext2 lib */
195
196#define EXT2_FL_USER_VISIBLE        0x0003DFFF /* User visible flags */
197#define EXT2_FL_USER_MODIFIABLE     0x000080FF /* User modifiable flags */
198
199/*
200 * ioctl commands
201 */
202#define EXT2_IOC_GETFLAGS       _IOR('f', 1, long)
203#define EXT2_IOC_SETFLAGS       _IOW('f', 2, long)
204#define EXT2_IOC_GETVERSION     _IOR('v', 1, long)
205#define EXT2_IOC_SETVERSION     _IOW('v', 2, long)
206
207/*
208 * Structure of an inode on the disk
209 */
210struct ext2_inode {
211    __u16   i_mode;     /* File mode */
212    __u16   i_uid;      /* Low 16 bits of Owner Uid */
213    __u32   i_size;     /* Size in bytes */
214    __u32   i_atime;    /* Access time */
215    __u32   i_ctime;    /* Creation time */
216    __u32   i_mtime;    /* Modification time */
217    __u32   i_dtime;    /* Deletion Time */
218    __u16   i_gid;      /* Low 16 bits of Group Id */
219    __u16   i_links_count;  /* Links count */
220    __u32   i_blocks;   /* Blocks count */
221    __u32   i_flags;    /* File flags */
222    union {
223        struct {
224            __u32  l_i_reserved1;
225        } linux1;
226        struct {
227            __u32  h_i_translator;
228        } hurd1;
229        struct {
230            __u32  m_i_reserved1;
231        } masix1;
232    } osd1;             /* OS dependent 1 */
233    __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
234    __u32   i_generation;   /* File version (for NFS) */
235    __u32   i_file_acl; /* File ACL */
236    __u32   i_dir_acl;  /* Directory ACL */
237    __u32   i_faddr;    /* Fragment address */
238    union {
239        struct {
240            __u8    l_i_frag;   /* Fragment number */
241            __u8    l_i_fsize;  /* Fragment size */
242            __u16   i_pad1;
243            __u16   l_i_uid_high;   /* these 2 fields    */
244            __u16   l_i_gid_high;   /* were reserved2[0] */
245            __u32   l_i_reserved2;
246        } linux2;
247        struct {
248            __u8    h_i_frag;   /* Fragment number */
249            __u8    h_i_fsize;  /* Fragment size */
250            __u16   h_i_mode_high;
251            __u16   h_i_uid_high;
252            __u16   h_i_gid_high;
253            __u32   h_i_author;
254        } hurd2;
255        struct {
256            __u8    m_i_frag;   /* Fragment number */
257            __u8    m_i_fsize;  /* Fragment size */
258            __u16   m_pad1;
259            __u32   m_i_reserved2[2];
260        } masix2;
261    } osd2;             /* OS dependent 2 */
262};
263
264/*
265 * Permanent part of an large inode on the disk
266 */
267struct ext2_inode_large {
268    __u16   i_mode;     /* File mode */
269    __u16   i_uid;      /* Low 16 bits of Owner Uid */
270    __u32   i_size;     /* Size in bytes */
271    __u32   i_atime;    /* Access time */
272    __u32   i_ctime;    /* Creation time */
273    __u32   i_mtime;    /* Modification time */
274    __u32   i_dtime;    /* Deletion Time */
275    __u16   i_gid;      /* Low 16 bits of Group Id */
276    __u16   i_links_count;  /* Links count */
277    __u32   i_blocks;   /* Blocks count */
278    __u32   i_flags;    /* File flags */
279    union {
280        struct {
281            __u32  l_i_reserved1;
282        } linux1;
283        struct {
284            __u32  h_i_translator;
285        } hurd1;
286        struct {
287            __u32  m_i_reserved1;
288        } masix1;
289    } osd1;             /* OS dependent 1 */
290    __u32   i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
291    __u32   i_generation;   /* File version (for NFS) */
292    __u32   i_file_acl; /* File ACL */
293    __u32   i_dir_acl;  /* Directory ACL */
294    __u32   i_faddr;    /* Fragment address */
295    union {
296        struct {
297            __u8    l_i_frag;   /* Fragment number */
298            __u8    l_i_fsize;  /* Fragment size */
299            __u16   i_pad1;
300            __u16   l_i_uid_high;   /* these 2 fields    */
301            __u16   l_i_gid_high;   /* were reserved2[0] */
302            __u32   l_i_reserved2;
303        } linux2;
304        struct {
305            __u8    h_i_frag;   /* Fragment number */
306            __u8    h_i_fsize;  /* Fragment size */
307            __u16   h_i_mode_high;
308            __u16   h_i_uid_high;
309            __u16   h_i_gid_high;
310            __u32   h_i_author;
311        } hurd2;
312        struct {
313            __u8    m_i_frag;   /* Fragment number */
314            __u8    m_i_fsize;  /* Fragment size */
315            __u16   m_pad1;
316            __u32   m_i_reserved2[2];
317        } masix2;
318    } osd2;             /* OS dependent 2 */
319    __u16   i_extra_isize;
320    __u16   i_pad1;
321};
322
323#define i_size_high i_dir_acl
324
325/*
326 * File system states
327 */
328#define EXT2_VALID_FS           0x0001  /* Unmounted cleanly */
329#define EXT2_ERROR_FS           0x0002  /* Errors detected */
330
331/*
332 * Mount flags
333 */
334#define EXT2_MOUNT_CHECK        0x0001  /* Do mount-time checks */
335#define EXT2_MOUNT_GRPID        0x0004  /* Create files with directory's group */
336#define EXT2_MOUNT_DEBUG        0x0008  /* Some debugging messages */
337#define EXT2_MOUNT_ERRORS_CONT      0x0010  /* Continue on errors */
338#define EXT2_MOUNT_ERRORS_RO        0x0020  /* Remount fs ro on errors */
339#define EXT2_MOUNT_ERRORS_PANIC     0x0040  /* Panic on errors */
340#define EXT2_MOUNT_MINIX_DF     0x0080  /* Mimics the Minix statfs */
341#define EXT2_MOUNT_NO_UID32     0x0200  /* Disable 32-bit UIDs */
342
343#define clear_opt(o, opt)       o &= ~EXT2_MOUNT_##opt
344#define set_opt(o, opt)         o |= EXT2_MOUNT_##opt
345#define test_opt(sb, opt)       (EXT2_SB(sb)->s_mount_opt & \
346                     EXT2_MOUNT_##opt)
347/*
348 * Maximal mount counts between two filesystem checks
349 */
350#define EXT2_DFL_MAX_MNT_COUNT      20  /* Allow 20 mounts */
351#define EXT2_DFL_CHECKINTERVAL      0   /* Don't use interval check */
352
353/*
354 * Behaviour when detecting errors
355 */
356#define EXT2_ERRORS_CONTINUE        1   /* Continue execution */
357#define EXT2_ERRORS_RO          2   /* Remount fs read-only */
358#define EXT2_ERRORS_PANIC       3   /* Panic */
359#define EXT2_ERRORS_DEFAULT     EXT2_ERRORS_CONTINUE
360
361/*
362 * Structure of the super block
363 */
364struct ext2_super_block {
365    __u32   s_inodes_count;     /* Inodes count */
366    __u32   s_blocks_count;     /* Blocks count */
367    __u32   s_r_blocks_count;   /* Reserved blocks count */
368    __u32   s_free_blocks_count;    /* Free blocks count */
369    __u32   s_free_inodes_count;    /* Free inodes count */
370    __u32   s_first_data_block; /* First Data Block */
371    __u32   s_log_block_size;   /* Block size */
372    __s32   s_log_frag_size;    /* Fragment size */
373    __u32   s_blocks_per_group; /* # Blocks per group */
374    __u32   s_frags_per_group;  /* # Fragments per group */
375    __u32   s_inodes_per_group; /* # Inodes per group */
376    __u32   s_mtime;        /* Mount time */
377    __u32   s_wtime;        /* Write time */
378    __u16   s_mnt_count;        /* Mount count */
379    __s16   s_max_mnt_count;    /* Maximal mount count */
380    __u16   s_magic;        /* Magic signature */
381    __u16   s_state;        /* File system state */
382    __u16   s_errors;       /* Behaviour when detecting errors */
383    __u16   s_minor_rev_level;  /* minor revision level */
384    __u32   s_lastcheck;        /* time of last check */
385    __u32   s_checkinterval;    /* max. time between checks */
386    __u32   s_creator_os;       /* OS */
387    __u32   s_rev_level;        /* Revision level */
388    __u16   s_def_resuid;       /* Default uid for reserved blocks */
389    __u16   s_def_resgid;       /* Default gid for reserved blocks */
390    /*
391     * These fields are for EXT2_DYNAMIC_REV superblocks only.
392     *
393     * Note: the difference between the compatible feature set and
394     * the incompatible feature set is that if there is a bit set
395     * in the incompatible feature set that the kernel doesn't
396     * know about, it should refuse to mount the filesystem.
397     *
398     * e2fsck's requirements are more strict; if it doesn't know
399     * about a feature in either the compatible or incompatible
400     * feature set, it must abort and not try to meddle with
401     * things it doesn't understand...
402     */
403    __u32   s_first_ino;        /* First non-reserved inode */
404    __u16   s_inode_size;       /* size of inode structure */
405    __u16   s_block_group_nr;   /* block group # of this superblock */
406    __u32   s_feature_compat;   /* compatible feature set */
407    __u32   s_feature_incompat; /* incompatible feature set */
408    __u32   s_feature_ro_compat;    /* readonly-compatible feature set */
409    __u8    s_uuid[16];     /* 128-bit uuid for volume */
410    char    s_volume_name[16];  /* volume name */
411    char    s_last_mounted[64]; /* directory where last mounted */
412    __u32   s_algorithm_usage_bitmap; /* For compression */
413    /*
414     * Performance hints.  Directory preallocation should only
415     * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
416     */
417    __u8    s_prealloc_blocks;  /* Nr of blocks to try to preallocate*/
418    __u8    s_prealloc_dir_blocks;  /* Nr to preallocate for dirs */
419    __u16   s_reserved_gdt_blocks;  /* Per group table for online growth */
420    /*
421     * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
422     */
423    __u8    s_journal_uuid[16]; /* uuid of journal superblock */
424    __u32   s_journal_inum;     /* inode number of journal file */
425    __u32   s_journal_dev;      /* device number of journal file */
426    __u32   s_last_orphan;      /* start of list of inodes to delete */
427    __u32   s_hash_seed[4];     /* HTREE hash seed */
428    __u8    s_def_hash_version; /* Default hash version to use */
429    __u8    s_jnl_backup_type;  /* Default type of journal backup */
430    __u16   s_reserved_word_pad;
431    __u32   s_default_mount_opts;
432    __u32   s_first_meta_bg;    /* First metablock group */
433    __u32   s_mkfs_time;        /* When the filesystem was created */
434    __u32   s_jnl_blocks[17];   /* Backup of the journal inode */
435    __u32   s_reserved[172];    /* Padding to the end of the block */
436};
437
438/*
439 * Codes for operating systems
440 */
441#define EXT2_OS_LINUX       0
442#define EXT2_OS_HURD        1
443#define EXT2_OS_MASIX       2
444#define EXT2_OS_FREEBSD     3
445#define EXT2_OS_LITES       4
446
447/*
448 * Revision levels
449 */
450#define EXT2_GOOD_OLD_REV   0   /* The good old (original) format */
451#define EXT2_DYNAMIC_REV    1   /* V2 format w/ dynamic inode sizes */
452
453#define EXT2_CURRENT_REV    EXT2_GOOD_OLD_REV
454#define EXT2_MAX_SUPP_REV   EXT2_DYNAMIC_REV
455
456#define EXT2_GOOD_OLD_INODE_SIZE 128
457
458/*
459 * Journal inode backup types
460 */
461#define EXT3_JNL_BACKUP_BLOCKS  1
462
463/*
464 * Feature set definitions
465 */
466
467#define EXT2_HAS_COMPAT_FEATURE(sb,mask)            \
468    ( EXT2_SB(sb)->s_feature_compat & (mask) )
469#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask)         \
470    ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
471#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask)          \
472    ( EXT2_SB(sb)->s_feature_incompat & (mask) )
473
474#define EXT2_FEATURE_COMPAT_DIR_PREALLOC    0x0001
475#define EXT2_FEATURE_COMPAT_IMAGIC_INODES   0x0002
476#define EXT3_FEATURE_COMPAT_HAS_JOURNAL     0x0004
477#define EXT2_FEATURE_COMPAT_EXT_ATTR        0x0008
478#define EXT2_FEATURE_COMPAT_RESIZE_INO      0x0010
479#define EXT2_FEATURE_COMPAT_DIR_INDEX       0x0020
480
481#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
482#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE   0x0002
483/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */
484
485#define EXT2_FEATURE_INCOMPAT_COMPRESSION   0x0001
486#define EXT2_FEATURE_INCOMPAT_FILETYPE      0x0002
487#define EXT3_FEATURE_INCOMPAT_RECOVER       0x0004 /* Needs recovery */
488#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV   0x0008 /* Journal device */
489#define EXT2_FEATURE_INCOMPAT_META_BG       0x0010
490#define EXT3_FEATURE_INCOMPAT_EXTENTS       0x0040
491
492
493#define EXT2_FEATURE_COMPAT_SUPP    0
494#define EXT2_FEATURE_INCOMPAT_SUPP  (EXT2_FEATURE_INCOMPAT_FILETYPE)
495#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
496                     EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
497                     EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
498
499/*
500 * Default values for user and/or group using reserved blocks
501 */
502#define EXT2_DEF_RESUID     0
503#define EXT2_DEF_RESGID     0
504
505/*
506 * Default mount options
507 */
508#define EXT2_DEFM_DEBUG     0x0001
509#define EXT2_DEFM_BSDGROUPS 0x0002
510#define EXT2_DEFM_XATTR_USER    0x0004
511#define EXT2_DEFM_ACL       0x0008
512#define EXT2_DEFM_UID16     0x0010
513#define EXT3_DEFM_JMODE     0x0060
514#define EXT3_DEFM_JMODE_DATA    0x0020
515#define EXT3_DEFM_JMODE_ORDERED 0x0040
516#define EXT3_DEFM_JMODE_WBACK   0x0060
517
518/*
519 * Structure of a directory entry
520 */
521#define EXT2_NAME_LEN 255
522
523struct ext2_dir_entry {
524    __u32   inode;          /* Inode number */
525    __u16   rec_len;        /* Directory entry length */
526    __u16   name_len;       /* Name length */
527    char    name[EXT2_NAME_LEN];    /* File name */
528};
529
530/*
531 * The new version of the directory entry.  Since EXT2 structures are
532 * stored in intel byte order, and the name_len field could never be
533 * bigger than 255 chars, it's safe to reclaim the extra byte for the
534 * file_type field.
535 */
536struct ext2_dir_entry_2 {
537    __u32   inode;          /* Inode number */
538    __u16   rec_len;        /* Directory entry length */
539    __u8    name_len;       /* Name length */
540    __u8    file_type;
541    char    name[EXT2_NAME_LEN];    /* File name */
542};
543
544/*
545 * Ext2 directory file types.  Only the low 3 bits are used.  The
546 * other bits are reserved for now.
547 */
548#define EXT2_FT_UNKNOWN     0
549#define EXT2_FT_REG_FILE    1
550#define EXT2_FT_DIR     2
551#define EXT2_FT_CHRDEV      3
552#define EXT2_FT_BLKDEV      4
553#define EXT2_FT_FIFO        5
554#define EXT2_FT_SOCK        6
555#define EXT2_FT_SYMLINK     7
556
557#define EXT2_FT_MAX     8
558
559/*
560 * EXT2_DIR_PAD defines the directory entries boundaries
561 *
562 * NOTE: It must be a multiple of 4
563 */
564#define EXT2_DIR_PAD            4
565#define EXT2_DIR_ROUND          (EXT2_DIR_PAD - 1)
566#define EXT2_DIR_REC_LEN(name_len)  (((name_len) + 8 + EXT2_DIR_ROUND) & \
567                     ~EXT2_DIR_ROUND)
568
569#endif
Note: See TracBrowser for help on using the repository browser.