/* $NetBSD: efs_inode.h,v 1.1 2007/06/29 23:30:29 rumble Exp $ */ /* * Copyright (c) 2006 Stephen M. Rumble * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FS_EFS_EFS_INODE_H_ #define _FS_EFS_EFS_INODE_H_ #include /* * The efs_inode structure represents an in-core inode. It contains meta-data * corresponding directly to the efs_dinode structure in host byte order and * with native NetBSD flags and fields, a copy of the on-disk dinode structure, * as well as other bookkeeping information. */ struct efs_inode { struct genfs_node ei_gnode; struct lockf *ei_lockf; /* advisory lock */ ino_t ei_number; /* inode number */ dev_t ei_dev; /* associated device */ struct vnode *ei_vp; /* associated vnode */ LIST_ENTRY(efs_inode) ei_hash; /* inode hash chain */ /* * Host-ordered on-disk fields with native NetBSD types and flags. */ uint16_t ei_mode; /* file type and permissions */ int16_t ei_nlink; /* link count (minimum 2) */ uid_t ei_uid; /* user ID */ gid_t ei_gid; /* group ID */ int32_t ei_size; /* file size (in bytes) */ time_t ei_atime; /* file access time */ time_t ei_mtime; /* file modification time */ time_t ei_ctime; /* inode modification time */ int32_t ei_gen; /* inode generation number */ int16_t ei_numextents; /* number of extents in file */ uint8_t ei_version; /* inode version */ /* * Copy of the on-disk inode structure, in EFS native format and * endianness. */ struct efs_dinode ei_di; }; #define EFS_VTOI(vp) ((struct efs_inode *)(vp)->v_data) #define EFS_ITOV(eip) ((struct vnode *)(eip)->ei_vp) /* * File handle. The first two fields must match struct fid (see sys/fstypes.h). */ struct efs_fid { unsigned short ef_len; /* length of data in bytes */ unsigned short ef_pad; /* compat: historic align */ int32_t ef_ino; /* inode number */ int32_t ef_gen; /* inode generation number */ }; #endif /* !_FS_EFS_EFS_INODE_H_ */