1/*	$NetBSD$	*/
2
3/*
4 * Copyright (c) 2006 Stephen M. Rumble <rumble@ephemeral.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#ifndef _FS_EFS_EFS_INODE_H_
20#define _FS_EFS_EFS_INODE_H_
21
22#include <fs/efs/efs_subr.h>
23
24/*
25 * The efs_inode structure represents an in-core inode. It contains meta-data
26 * corresponding directly to the efs_dinode structure in host byte order and
27 * with native NetBSD flags and fields, a copy of the on-disk dinode structure,
28 * as well as other bookkeeping information.
29 */
30struct efs_inode {
31	struct genfs_node	ei_gnode;
32	struct lockf	       *ei_lockf;	/* advisory lock */
33	ino_t			ei_number;	/* inode number */
34	dev_t			ei_dev;		/* associated device */
35	struct vnode	       *ei_vp;		/* associated vnode */
36	LIST_ENTRY(efs_inode)	ei_hash;	/* inode hash chain */
37
38	/*
39	 * Host-ordered on-disk fields with native NetBSD types and flags.
40	 */
41	uint16_t        	ei_mode;        /* file type and permissions */
42	int16_t         	ei_nlink;       /* link count (minimum 2) */
43	uid_t			ei_uid;         /* user ID */
44	gid_t			ei_gid;         /* group ID */
45	int32_t         	ei_size;        /* file size (in bytes) */
46	time_t          	ei_atime;       /* file access time */
47	time_t          	ei_mtime;       /* file modification time */
48	time_t          	ei_ctime;       /* inode modification time */
49	int32_t         	ei_gen;         /* inode generation number */
50	int16_t         	ei_numextents;  /* number of extents in file */
51	uint8_t         	ei_version;     /* inode version */
52
53	/*
54	 * Copy of the on-disk inode structure, in EFS native format and
55	 * endianness.
56	 */
57	struct efs_dinode 	ei_di;
58};
59
60#define EFS_VTOI(vp)	((struct efs_inode *)(vp)->v_data)
61#define EFS_ITOV(eip)	((struct vnode *)(eip)->ei_vp)
62
63/*
64 * File handle. The first two fields must match struct fid (see sys/fstypes.h).
65 */
66struct efs_fid {
67	unsigned short	ef_len;			/* length of data in bytes */
68	unsigned short	ef_pad;			/* compat: historic align */
69	int32_t		ef_ino;			/* inode number */
70	int32_t		ef_gen;			/* inode generation number */
71};
72
73#endif /* !_FS_EFS_EFS_INODE_H_ */
74