32#define EXT2_PREALLOCATE
33#define EXT2_DEFAULT_PREALLOC_BLOCKS 8
38#define EXT2FS_DATE "95/08/09"
39#define EXT2FS_VERSION "0.5b"
45#define EXT2_ROOT_INO 2
46#define EXT2_ACL_IDX_INO 3
47#define EXT2_ACL_DATA_INO 4
48#define EXT2_BOOT_LOADER_INO 5
49#define EXT2_UNDEL_DIR_INO 6
50#define EXT2_RESIZE_INO 7
51#define EXT2_JOURNAL_INO 8
54#define EXT2_GOOD_OLD_FIRST_INO 11
59#define EXT2_SUPER_MAGIC 0xEF53
64#define EXT2_LINK_MAX 32000
69#define EXT2_MIN_BLOCK_SIZE 1024
70#define EXT2_MAX_BLOCK_SIZE 4096
71#define EXT2_MIN_BLOCK_LOG_SIZE 10
73# define EXT2_BLOCK_SIZE(s) ((s)->s_blocksize)
75# define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
77#define EXT2_ACLE_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_acl_entry))
78#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
80# define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits)
82# define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
85#define EXT2_ADDR_PER_BLOCK_BITS(s) ((s)->u.ext2_sb.s_addr_per_block_bits)
86#define EXT2_INODE_SIZE(s) ((s)->u.ext2_sb.s_inode_size)
87#define EXT2_FIRST_INO(s) ((s)->u.ext2_sb.s_first_ino)
89#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
90 EXT2_GOOD_OLD_INODE_SIZE : \
92#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
93 EXT2_GOOD_OLD_FIRST_INO : \
100#define EXT2_MIN_FRAG_SIZE 1024
101#define EXT2_MAX_FRAG_SIZE 4096
102#define EXT2_MIN_FRAG_LOG_SIZE 10
104# define EXT2_FRAG_SIZE(s) ((s)->u.ext2_sb.s_frag_size)
105# define EXT2_FRAGS_PER_BLOCK(s) ((s)->u.ext2_sb.s_frags_per_block)
107# define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
108# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
183# define EXT2_BLOCKS_PER_GROUP(s) ((s)->u.ext2_sb.s_blocks_per_group)
184# define EXT2_DESC_PER_BLOCK(s) ((s)->u.ext2_sb.s_desc_per_block)
185# define EXT2_INODES_PER_GROUP(s) ((s)->u.ext2_sb.s_inodes_per_group)
186# define EXT2_DESC_PER_BLOCK_BITS(s) ((s)->u.ext2_sb.s_desc_per_block_bits)
188# define EXT2_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group)
189# define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
190# define EXT2_INODES_PER_GROUP(s) ((s)->s_inodes_per_group)
196#define EXT2_NDIR_BLOCKS 12
197#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
198#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
199#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
200#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
205#define EXT2_SECRM_FL 0x00000001
206#define EXT2_UNRM_FL 0x00000002
207#define EXT2_COMPR_FL 0x00000004
208#define EXT2_SYNC_FL 0x00000008
209#define EXT2_IMMUTABLE_FL 0x00000010
210#define EXT2_APPEND_FL 0x00000020
211#define EXT2_NODUMP_FL 0x00000040
212#define EXT2_NOATIME_FL 0x00000080
214#define EXT2_DIRTY_FL 0x00000100
215#define EXT2_COMPRBLK_FL 0x00000200
216#define EXT2_NOCOMPR_FL 0x00000400
217#define EXT2_ECOMPR_FL 0x00000800
219#define EXT2_BTREE_FL 0x00001000
220#define EXT2_INDEX_FL 0x00001000
221#define EXT2_IMAGIC_FL 0x00002000
222#define EXT3_JOURNAL_DATA_FL 0x00004000
223#define EXT2_NOTAIL_FL 0x00008000
224#define EXT2_RESERVED_FL 0x80000000
226#define EXT2_FL_USER_VISIBLE 0x0000DFFF
227#define EXT2_FL_USER_MODIFIABLE 0x000080FF
232#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
233#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
234#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
235#define EXT2_IOC_SETVERSION _IOW('v', 2, long)
294#define i_size_high i_dir_acl
296#if defined(__KERNEL__) || defined(__linux__)
297#define i_reserved1 osd1.linux1.l_i_reserved1
298#define i_frag osd2.linux2.l_i_frag
299#define i_fsize osd2.linux2.l_i_fsize
300#define i_uid_low i_uid
301#define i_gid_low i_gid
302#define i_uid_high osd2.linux2.l_i_uid_high
303#define i_gid_high osd2.linux2.l_i_gid_high
304#define i_reserved2 osd2.linux2.l_i_reserved2
306#elif defined(__GNU__)
308#define i_translator osd1.hurd1.h_i_translator
309#define i_frag osd2.hurd2.h_i_frag;
310#define i_fsize osd2.hurd2.h_i_fsize;
311#define i_uid_high osd2.hurd2.h_i_uid_high
312#define i_gid_high osd2.hurd2.h_i_gid_high
313#define i_author osd2.hurd2.h_i_author
315#elif defined(__masix__)
317#define i_reserved1 osd1.masix1.m_i_reserved1
318#define i_frag osd2.masix2.m_i_frag
319#define i_fsize osd2.masix2.m_i_fsize
320#define i_reserved2 osd2.masix2.m_i_reserved2
327#define EXT2_VALID_FS 0x0001
328#define EXT2_ERROR_FS 0x0002
333#define EXT2_MOUNT_CHECK 0x0001
334#define EXT2_MOUNT_GRPID 0x0004
335#define EXT2_MOUNT_DEBUG 0x0008
336#define EXT2_MOUNT_ERRORS_CONT 0x0010
337#define EXT2_MOUNT_ERRORS_RO 0x0020
338#define EXT2_MOUNT_ERRORS_PANIC 0x0040
339#define EXT2_MOUNT_MINIX_DF 0x0080
340#define EXT2_MOUNT_NO_UID32 0x0200
342#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
343#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
344#define test_opt(sb, opt) ((sb)->u.ext2_sb.s_mount_opt & \
349#define EXT2_DFL_MAX_MNT_COUNT 20
350#define EXT2_DFL_CHECKINTERVAL 0
355#define EXT2_ERRORS_CONTINUE 1
356#define EXT2_ERRORS_RO 2
357#define EXT2_ERRORS_PANIC 3
358#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
431#define EXT2_SB(sb) (&((sb)->u.ext2_sb))
436#define EXT2_SB(sb) (sb)
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#define EXT2_OS_WINNT 5
452#define EXT2_GOOD_OLD_REV 0
453#define EXT2_DYNAMIC_REV 1
455#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
456#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
458#define EXT2_GOOD_OLD_INODE_SIZE 128
464#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
465 ( EXT2_SB(sb)->s_feature_compat & (mask) )
466#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
467 ( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
468#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
469 ( EXT2_SB(sb)->s_feature_incompat & (mask) )
471#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
472#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
473#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
474#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
475#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
476#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
478#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
479#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
480#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004
482#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
483#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
484#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004
485#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008
487#define EXT2_FEATURE_COMPAT_SUPP 0
488#define EXT2_FEATURE_INCOMPAT_SUPP EXT2_FEATURE_INCOMPAT_FILETYPE
489#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
490 EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
491 EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
496#define EXT2_DEF_RESUID 0
497#define EXT2_DEF_RESGID 0
502#define EXT2_NAME_LEN 255
529#define EXT2_FT_UNKNOWN 0
530#define EXT2_FT_REG_FILE 1
532#define EXT2_FT_CHRDEV 3
533#define EXT2_FT_BLKDEV 4
534#define EXT2_FT_FIFO 5
535#define EXT2_FT_SOCK 6
536#define EXT2_FT_SYMLINK 7
545#define EXT2_DIR_PAD 4
546#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
547#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
560# define ATTRIB_NORET __attribute__((noreturn))
561# define NORET_AND noreturn,
564extern int ext2_permission (
struct inode *,
int);
571extern void ext2_free_blocks (
const struct inode *,
unsigned long,
573extern unsigned long ext2_count_free_blocks (
struct super_block *);
574extern void ext2_check_blocks_bitmap (
struct super_block *);
576 unsigned int block_group,
580extern unsigned long ext2_count_free (
struct buffer_head *,
unsigned);
583extern int ext2_check_dir_entry (
const char *,
struct inode *,
588extern int ext2_read (
struct inode *,
struct file *,
char *,
int);
589extern int ext2_write (
struct inode *,
struct file *,
char *,
int);
592extern int ext2_sync_file (
struct file *,
struct dentry *,
int);
593extern int ext2_fsync_inode (
struct inode *,
int);
597extern void ext2_free_inode (
struct inode *);
598extern unsigned long ext2_count_free_inodes (
struct super_block *);
599extern void ext2_check_inodes_bitmap (
struct super_block *);
608extern void ext2_put_inode (
struct inode *);
609extern void ext2_delete_inode (
struct inode *);
610extern int ext2_sync_inode (
struct inode *);
611extern void ext2_discard_prealloc (
struct inode *);
614extern int ext2_ioctl (
struct inode *,
struct file *,
unsigned int,
618extern struct inode_operations ext2_dir_inode_operations;
621extern void ext2_error (
struct super_block *,
const char *,
const char *, ...)
643extern
struct file_operations ext2_dir_operations;
646extern
struct inode_operations ext2_file_inode_operations;
647extern
struct file_operations ext2_file_operations;
650extern
struct inode_operations ext2_fast_symlink_inode_operations;
652extern
struct address_space_operations ext2_aops;
bool ext2_bg_has_super(PEXT2_SUPER_BLOCK pExt2Sb, int group_block)
bool ext2_read_inode(PEXT2_FILESYS Ext2Sys, ULONG ino, ULONG offset, PVOID Buffer, ULONG size, PULONG dwReturn)
bool ext2_new_inode(PEXT2_FILESYS fs, ULONG dir, int mode, PEXT2_INODE_BITMAP map, ULONG *ret)
bool ext2_write_inode(PEXT2_FILESYS Ext2Sys, ULONG ino, ULONG offset, PVOID Buffer, ULONG size, PULONG dwReturn)
bool ext2_new_block(PEXT2_FILESYS fs, ULONG goal, PEXT2_BLOCK_BITMAP map, ULONG *ret)
void ext2_update_dynamic_rev(PEXT2_FILESYS fs)
int statfs(const char *name, struct statfs *info)
__u16 bg_free_blocks_count
__u16 bg_free_inodes_count
struct ext2_inode::@707::@709 linux1
struct ext2_inode::@708::@714 masix2
struct ext2_inode::@708::@713 hurd2
struct ext2_inode::@707::@711 masix1
struct ext2_inode::@708::@712 linux2
__u32 i_block[EXT2_N_BLOCKS]
struct ext2_inode::@707::@710 hurd1
__u8 s_prealloc_dir_blocks
__u32 s_algorithm_usage_bitmap
__u32 s_free_inodes_count
__u32 s_feature_ro_compat
__u32 s_free_blocks_count