inode(4SFS) (SFS) inode(4SFS)
NAME
inode (sfs) - format of an sfs inode
SYNOPSIS
#include <sys/param.h>
#include <sys/types.h>
#include <sys/vnode.h>
#include <sys/fs/sfs_inode.h>
DESCRIPTION
The inode is the focus of all local file activity in UNIX.
There is a unique inode allocated for each active file, each
current directory, each mounted-on file, each mapping, and the
root of the file system. An inode is `named' by its
device/inumber pair. Data in icommon and isecdata (see below)
is read into memory from the permanent inode on the actual
volume. Data is also written to disk from the inode in memory
(the incore inode) when appropriate.
The structure inode represents the incore inode, and contains
copies of two disk inodes, whose formats are the structures
icommon and i_secure (structure i_secure is referenced from
structure inode).
The data in icommon and i_secure is common to the incore and
disk inodes. Other information is also stored in the incore
inode as shown below.
struct inode {
/* Filesystem independent view of this inode. */
struct inode *i_forw; /* hash chain, forward */
struct inode *i_back; /* hash chain, back */
struct inode *i_freef; /* free chain, forward */
struct inode *i_freeb; /* free chain, back */
struct vnode *i_vp; /* ptr to vnode */
struct idata *i_data; /* pointer to the pool data */
/* Filesystem dependent view of this inode. */
union i_secure *i_secp; /* extra memory for security data */
struct vnode i_vnode; /* vnode for this inode */
struct vnode *i_devvp; /* vnode for block I/O */
ushort_t i_flag;
dev_t i_dev; /* device where inode resides */
ino_t i_number; /* i number, 1-to-1 with device address */
off_t i_diroff; /* offset in dir, where we
found last entry */
struct fs *i_fs; /* file sys associated with this inode */
Copyright 1994 Novell, Inc. Page 1
inode(4SFS) (SFS) inode(4SFS)
struct dquot *i_dquot; /* quota structure controlling
this file */
short i_owner; /* proc index of process locking inode */
short i_count; /* number of inode locks for i_owner */
daddr_t i_nextr; /* next byte read offset (read-ahead) */
ulong i_vcode; /* version code attribute */
long i_mapcnt; /* mappings to file pages */
int *i_map; /* block list for the corresponding file */
int i_opencnt; /* count of opens for this inode */
lid_t i_dirofflid; /* last proc changing i_diroff w/o
write access */
clock_t i_stamp /*time when inode was modified but not
copied to the buffer cache*/
struct icommon i_ic;
};
struct icommon {
o_mode_t ic_smode;/* 0: mode and type of file */
short ic_nlink;/* 2: number of links to file */
o_uid_t ic_suid;/* 4: owner's user id */
o_gid_t ic_sgid;/* 6: owner's group id */
quad ic_size;/* 8: number of bytes in file */
time_t ic_atime;/* 16: time last accessed */
long ic_atspare;
time_t ic_mtime;/* 24: time last modified */
long ic_mtspare;
time_t ic_ctime;/* 32: last time inode changed */
long ic_ctspare;
daddr_t ic_db[NDADDR];/* 40: disk block addresses */
daddr_t ic_ib[NIADDR];/* 88: indirect blocks */
long ic_flags;/* 100: status, currently unused */
long ic_blocks;/* 104: blocks actually held */
long ic_gen; /* 108: generation number */
mode_t ic_mode;/* 112: EFT version of mode*/
uid_t ic_uid; /* 116: EFT version of uid */
gid_t ic_gid; /* 120: EFT version of gid */
ulong ic_eftflag;/* 124: indicate EFT version*/
};
union i_secure {
struct icommon is_com;
struct isecdata {
lid_t isd_lid; /* Level IDentifier */
long isd_sflags;/* flags */
long isd_aclcnt;/* ACL count */
long isd_daclcnt;/* default ACL count */
daddr_t isd_aclblk;/* extended ACL disk blk */
struct acl isd_acl[NACLI];/* ACL entries */
Copyright 1994 Novell, Inc. Page 2
inode(4SFS) (SFS) inode(4SFS)
lid_t isd_cmwlid;/* Level IDentifier for
file CMW */
char isd_filler[8];/* reserved */
} is_secdata;
char is_size[128];
};
The structure dinode represents the disk inode; it is 128
bytes long and is the same as the ufs inode, except that there
are two 128-byte inodes allocated on disk for each directory
entry.
struct dinode {
union {
struct icommon di_icom;
struct isecdata di_secdata;
char di_size[128];
} di_un;
};
This ``alternate inode'' scheme makes it look like only the
even-numbered inodes on disk are used. The first inode (the
even-numbered inode) is identical to the ufs inode, and
contains all the information in the structure icommon.
The second inode (the ``alternate'', odd-numbered inode)
contains the security information in the structure isecdata,
shown below.
REFERENCES
sfs-specific fs(4SFS)
Copyright 1994 Novell, Inc. Page 3