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