📄 ext2_fs.h
字号:
/* vi: set sw=4 ts=4: *//* * linux/include/linux/ext2_fs.h * * Copyright (C) 1992, 1993, 1994, 1995 * Remy Card (card@masi.ibp.fr) * Laboratoire MASI - Institut Blaise Pascal * Universite Pierre et Marie Curie (Paris VI) * * from * * linux/include/linux/minix_fs.h * * Copyright (C) 1991, 1992 Linus Torvalds */#ifndef _LINUX_EXT2_FS_H#define _LINUX_EXT2_FS_H#include "ext2_types.h" /* Changed from linux/types.h *//* * Special inode numbers */#define EXT2_BAD_INO 1 /* Bad blocks inode */#define EXT2_ROOT_INO 2 /* Root inode */#define EXT2_ACL_IDX_INO 3 /* ACL inode */#define EXT2_ACL_DATA_INO 4 /* ACL inode */#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */#define EXT2_JOURNAL_INO 8 /* Journal inode *//* First non-reserved inode for old ext2 filesystems */#define EXT2_GOOD_OLD_FIRST_INO 11/* * The second extended file system magic number */#define EXT2_SUPER_MAGIC 0xEF53/* Assume that user mode programs are passing in an ext2fs superblock, not * a kernel struct super_block. This will allow us to call the feature-test * macros from user land. */#define EXT2_SB(sb) (sb)/* * Maximal count of links to a file */#define EXT2_LINK_MAX 32000/* * Macro-instructions used to manage several block sizes */#define EXT2_MIN_BLOCK_LOG_SIZE 10 /* 1024 */#define EXT2_MAX_BLOCK_LOG_SIZE 16 /* 65536 */#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)#define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \ EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \ EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(__u32))/* * Macro-instructions used to manage fragments */#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE# define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))/* * ACL structures */struct ext2_acl_header /* Header of Access Control Lists */{ __u32 aclh_size; __u32 aclh_file_count; __u32 aclh_acle_count; __u32 aclh_first_acle;};struct ext2_acl_entry /* Access Control List Entry */{ __u32 acle_size; __u16 acle_perms; /* Access permissions */ __u16 acle_type; /* Type of entry */ __u16 acle_tag; /* User or group identity */ __u16 acle_pad1; __u32 acle_next; /* Pointer on next entry for the */ /* same inode or on next free entry */};/* * Structure of a blocks group descriptor */struct ext2_group_desc{ __u32 bg_block_bitmap; /* Blocks bitmap block */ __u32 bg_inode_bitmap; /* Inodes bitmap block */ __u32 bg_inode_table; /* Inodes table block */ __u16 bg_free_blocks_count; /* Free blocks count */ __u16 bg_free_inodes_count; /* Free inodes count */ __u16 bg_used_dirs_count; /* Directories count */ __u16 bg_pad; __u32 bg_reserved[3];};/* * Data structures used by the directory indexing feature * * Note: all of the multibyte integer fields are little endian. *//* * Note: dx_root_info is laid out so that if it should somehow get * overlaid by a dirent the two low bits of the hash version will be * zero. Therefore, the hash version mod 4 should never be 0. * Sincerely, the paranoia department. */struct ext2_dx_root_info { __u32 reserved_zero; __u8 hash_version; /* 0 now, 1 at release */ __u8 info_length; /* 8 */ __u8 indirect_levels; __u8 unused_flags;};#define EXT2_HASH_LEGACY 0#define EXT2_HASH_HALF_MD4 1#define EXT2_HASH_TEA 2#define EXT2_HASH_FLAG_INCOMPAT 0x1struct ext2_dx_entry { __u32 hash; __u32 block;};struct ext2_dx_countlimit { __u16 limit; __u16 count;};/* * Macro-instructions used to manage group descriptors */#define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group)#define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group)#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */#define EXT2_MAX_BLOCKS_PER_GROUP(s) ((1 << 16) - 8)#define EXT2_MAX_INODES_PER_GROUP(s) ((1 << 16) - EXT2_INODES_PER_BLOCK(s))#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))/* * Constants relative to the data blocks */#define EXT2_NDIR_BLOCKS 12#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)/* * Inode flags */#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */#define EXT2_UNRM_FL 0x00000002 /* Undelete */#define EXT2_COMPR_FL 0x00000004 /* Compress file */#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */#define EXT2_NOATIME_FL 0x00000080 /* do not update atime *//* Reserved for compression usage... */#define EXT2_DIRTY_FL 0x00000100#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */#define EXT2_NOCOMPR_FL 0x00000400 /* Access raw compressed data */#define EXT2_ECOMPR_FL 0x00000800 /* Compression error *//* End compression flags --- maybe not all used */#define EXT2_BTREE_FL 0x00001000 /* btree format dir */#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */#define EXT2_IMAGIC_FL 0x00002000#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */#define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */#define EXT2_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */#define EXT2_FL_USER_MODIFIABLE 0x000080FF /* User modifiable flags *//* * ioctl commands */#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)#define EXT2_IOC_GETVERSION _IOR('v', 1, long)#define EXT2_IOC_SETVERSION _IOW('v', 2, long)/* * Structure of an inode on the disk */struct ext2_inode { __u16 i_mode; /* File mode */ __u16 i_uid; /* Low 16 bits of Owner Uid */ __u32 i_size; /* Size in bytes */ __u32 i_atime; /* Access time */ __u32 i_ctime; /* Creation time */ __u32 i_mtime; /* Modification time */ __u32 i_dtime; /* Deletion Time */ __u16 i_gid; /* Low 16 bits of Group Id */ __u16 i_links_count; /* Links count */ __u32 i_blocks; /* Blocks count */ __u32 i_flags; /* File flags */ union { struct { __u32 l_i_reserved1; } linux1; struct { __u32 h_i_translator; } hurd1; struct { __u32 m_i_reserved1; } masix1; } osd1; /* OS dependent 1 */ __u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ __u32 i_generation; /* File version (for NFS) */ __u32 i_file_acl; /* File ACL */ __u32 i_dir_acl; /* Directory ACL */ __u32 i_faddr; /* Fragment address */ union { struct { __u8 l_i_frag; /* Fragment number */ __u8 l_i_fsize; /* Fragment size */ __u16 i_pad1; __u16 l_i_uid_high; /* these 2 fields */ __u16 l_i_gid_high; /* were reserved2[0] */ __u32 l_i_reserved2; } linux2; struct { __u8 h_i_frag; /* Fragment number */ __u8 h_i_fsize; /* Fragment size */ __u16 h_i_mode_high; __u16 h_i_uid_high; __u16 h_i_gid_high; __u32 h_i_author; } hurd2; struct { __u8 m_i_frag; /* Fragment number */ __u8 m_i_fsize; /* Fragment size */ __u16 m_pad1; __u32 m_i_reserved2[2]; } masix2; } osd2; /* OS dependent 2 */};/* * Permanent part of an large inode on the disk */struct ext2_inode_large { __u16 i_mode; /* File mode */ __u16 i_uid; /* Low 16 bits of Owner Uid */ __u32 i_size; /* Size in bytes */ __u32 i_atime; /* Access time */ __u32 i_ctime; /* Creation time */ __u32 i_mtime; /* Modification time */ __u32 i_dtime; /* Deletion Time */ __u16 i_gid; /* Low 16 bits of Group Id */ __u16 i_links_count; /* Links count */ __u32 i_blocks; /* Blocks count */ __u32 i_flags; /* File flags */ union { struct { __u32 l_i_reserved1; } linux1; struct { __u32 h_i_translator; } hurd1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -