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