1 /* 2 * efs_fs_i.h 3 * 4 * Copyright (c) 1999 Al Smith 5 * 6 * Portions derived from IRIX header files (c) 1988 Silicon Graphics 7 */ 8 9 #ifndef __EFS_FS_I_H__ 10 #define __EFS_FS_I_H__ 11 12 typedef int32_t efs_block_t; 13 typedef uint32_t efs_ino_t; 14 15 #define EFS_DIRECTEXTENTS 12 16 17 /* 18 * layout of an extent, in memory and on disk. 8 bytes exactly. 19 */ 20 typedef union extent_u { 21 unsigned char raw[8]; 22 struct extent_s { 23 unsigned int ex_magic:8; /* magic # (zero) */ 24 unsigned int ex_bn:24; /* basic block */ 25 unsigned int ex_length:8; /* numblocks in this extent */ 26 unsigned int ex_offset:24; /* logical offset into file */ 27 } cooked; 28 } efs_extent; 29 30 typedef struct edevs { 31 short odev; 32 unsigned int ndev; 33 } efs_devs; 34 35 /* 36 * extent based filesystem inode as it appears on disk. The efs inode 37 * is exactly 128 bytes long. 38 */ 39 struct efs_dinode { 40 u_short di_mode; /* mode and type of file */ 41 short di_nlink; /* number of links to file */ 42 u_short di_uid; /* owner's user id */ 43 u_short di_gid; /* owner's group id */ 44 int32_t di_size; /* number of bytes in file */ 45 int32_t di_atime; /* time last accessed */ 46 int32_t di_mtime; /* time last modified */ 47 int32_t di_ctime; /* time created */ 48 uint32_t di_gen; /* generation number */ 49 short di_numextents; /* # of extents */ 50 u_char di_version; /* version of inode */ 51 u_char di_spare; /* spare - used by AFS */ 52 union di_addr { 53 efs_extent di_extents[EFS_DIRECTEXTENTS]; 54 efs_devs di_dev; /* device for IFCHR/IFBLK */ 55 } di_u; 56 }; 57 58 /* efs inode storage in memory */ 59 struct efs_inode_info { 60 int numextents; 61 int lastextent; 62 63 efs_extent extents[EFS_DIRECTEXTENTS]; 64 }; 65 66 #endif /* __EFS_FS_I_H__ */ 67 68