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
12typedef	int32_t		efs_block_t;
13typedef 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 */
20typedef 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
30typedef struct edevs {
31	__be16		odev;
32	__be32		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 */
39struct	efs_dinode {
40	__be16		di_mode;	/* mode and type of file */
41	__be16		di_nlink;	/* number of links to file */
42	__be16		di_uid;		/* owner's user id */
43	__be16		di_gid;		/* owner's group id */
44	__be32		di_size;	/* number of bytes in file */
45	__be32		di_atime;	/* time last accessed */
46	__be32		di_mtime;	/* time last modified */
47	__be32		di_ctime;	/* time created */
48	__be32		di_gen;		/* generation number */
49	__be16		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 */
59struct efs_inode_info {
60	int		numextents;
61	int		lastextent;
62
63	efs_extent	extents[EFS_DIRECTEXTENTS];
64	struct inode	vfs_inode;
65};
66
67#endif	/* __EFS_FS_I_H__ */
68
69