Amiga Unix — 68040 · 68060

Manual pages › File formats and configuration files (4)

inode_ufs(4)

format of a ufs inode

From the original Amiga UNIX 2.1 manual. Some things it mentions may not be in this release.

NAME

inode (ufs) - format of a ufs inode

SYNOPSIS

#include <sys/param.h>
#include <sys/types.h>
#include <sys/vnode.h>
#include <sys/fs/ufs_inode.h>

DESCRIPTION

The I node 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. An inode is `named' by its dev/inumber pair. Data in icommon is read in from permanent inode on the actual volume.

#define EFT_MAGIC 0x90909090/* magic cookie for EFT */
#define NDADDR   12 /* direct addresses in inode */
#define NIADDR    3 /* indirect addresses in inode */

struct inode {
     struct   inode *i_chain[2];/* must be first */
     struct   vnode i_vnode;    /* vnode associated with this inode */
     struct   vnode *i_devvp;   /* vnode for block I/O */
     u_short  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 */
     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 */
     short    i_rwowner;        /* proc index of process holding rwlock */
     daddr_t  i_nextr;          /* next byte read offset (read-ahead) */
     struct inode  *i_freef;    /* free list forward */
     struct inode **i_freeb;    /* free list back */
     ulong    i_vcode;          /* version code attribute */
     ulong    i_mapcnt;         /* mappings to file pages */
     int      *i_map;           /* block list for the corresponding file */
     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 */
#ifdef _KERNEL
         struct timeval ic_atime;/* 16: time last accessed */
         struct timeval ic_mtime;/* 24: time last modified */
         struct timeval ic_ctime;/* 32: last time inode changed */
#else
         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;
#endif
         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*/

     } i_ic;
};

struct dinode {
     union {
         struct  icommon di_icom;
         char    di_size[128];
     } di_un;
};

SEE ALSO

ufs-specific fs(4)