X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/d40d445c5d3724fa2d575c15715742588e9daca9..7188ac27426632d20adaac4191443dfefebf5789:/usr/src/sys/ufs/ffs/inode.h diff --git a/usr/src/sys/ufs/ffs/inode.h b/usr/src/sys/ufs/ffs/inode.h index 627df51165..9fe33c8b5f 100644 --- a/usr/src/sys/ufs/ffs/inode.h +++ b/usr/src/sys/ufs/ffs/inode.h @@ -1,4 +1,21 @@ -/* inode.h 6.3 84/06/27 */ +/* + * Copyright (c) 1982, 1989 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * @(#)inode.h 7.3 (Berkeley) %G% + */ /* * The I node is the focus of all file activity in UNIX. @@ -13,15 +30,18 @@ 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; - u_short i_count; /* reference count */ dev_t i_dev; /* device where inode resides */ - u_short i_shlockc; /* count of shared locks on inode */ - u_short i_exlockc; /* count of exclusive locks on inode */ ino_t i_number; /* i number, 1-to-1 with device address */ long i_id; /* unique identifier */ + long 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 */ + struct text *i_text; /* text entry, if any (should be region) */ + struct inode *i_devlst;/* list of block device inodes */ + off_t i_endoff; /* end of useful stuff in directory */ union { daddr_t if_lastr; /* last read (read-ahead) */ struct socket *is_socket; @@ -34,8 +54,8 @@ struct inode { { u_short ic_mode; /* 0: mode and type of file */ short ic_nlink; /* 2: number of links to file */ - short ic_uid; /* 4: owner's user id */ - short ic_gid; /* 6: owner's group id */ + uid_t ic_uid; /* 4: owner's user id */ + gid_t ic_gid; /* 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; @@ -47,7 +67,8 @@ struct inode { daddr_t ic_ib[NIADDR]; /* 88: indirect blocks */ long ic_flags; /* 100: status, currently unused */ long ic_blocks; /* 104: blocks actually held */ - long ic_spare[5]; /* 108: reserved, currently unused */ + long ic_gen; /* 108: generation number */ + long ic_spare[4]; /* 112: reserved, currently unused */ } i_ic; }; @@ -63,7 +84,7 @@ struct dinode { #define i_uid i_ic.ic_uid #define i_gid i_ic.ic_gid /* ugh! -- must be fixed */ -#ifdef vax +#if defined(vax) || defined(tahoe) #define i_size i_ic.ic_size.val[0] #endif #define i_db i_ic.ic_db @@ -73,6 +94,7 @@ struct dinode { #define i_ctime i_ic.ic_ctime #define i_blocks i_ic.ic_blocks #define i_rdev i_ic.ic_db[0] +#define i_gen i_ic.ic_gen #define i_lastr i_un.if_lastr #define i_socket i_un.is_socket #define i_forw i_chain[0] @@ -85,7 +107,7 @@ struct dinode { #define di_nlink di_ic.ic_nlink #define di_uid di_ic.ic_uid #define di_gid di_ic.ic_gid -#ifdef vax +#if defined(vax) || defined(tahoe) #define di_size di_ic.ic_size.val[0] #endif #define di_db di_ic.ic_db @@ -95,39 +117,30 @@ struct dinode { #define di_ctime di_ic.ic_ctime #define di_rdev di_ic.ic_db[0] #define di_blocks di_ic.ic_blocks +#define di_gen di_ic.ic_gen #ifdef KERNEL struct inode *inode; /* the inode table itself */ struct inode *inodeNINODE; /* the end of the inode table */ int ninode; /* number of slots in the table */ -long nextinodeid; /* unique id generator */ -struct inode *rootdir; /* pointer to inode of root directory */ +extern struct vnodeops ufs_vnodeops; /* vnode operations for ufs */ +extern struct vnodeops blk_vnodeops; /* vnode operations for blk devices */ -struct inode *ialloc(); -struct inode *iget(); -#ifdef notdef -struct inode *ifind(); -#endif -struct inode *owner(); -struct inode *maknode(); -struct inode *namei(); - -ino_t dirpref(); +extern ino_t dirpref(); #endif /* flags */ #define ILOCKED 0x1 /* inode is locked */ #define IUPD 0x2 /* file has been modified */ #define IACC 0x4 /* inode access time to be updated */ -#define IMOUNT 0x8 /* inode is mounted on */ -#define IWANT 0x10 /* some process waiting on lock */ -#define ITEXT 0x20 /* inode is pure text prototype */ -#define ICHG 0x40 /* inode has been changed */ -#define ISHLOCK 0x80 /* file has shared lock */ -#define IEXLOCK 0x100 /* file has exclusive lock */ -#define ILWAIT 0x200 /* someone waiting on file lock */ -#define IMOD 0x400 /* inode has been modified */ +#define IWANT 0x8 /* some process waiting on lock */ +#define ICHG 0x10 /* inode has been changed */ +#define ISHLOCK 0x20 /* file has shared lock */ +#define IEXLOCK 0x40 /* file has exclusive lock */ +#define ILWAIT 0x80 /* someone waiting on file lock */ +#define IMOD 0x100 /* inode has been modified */ +#define IRENAME 0x200 /* inode is being renamed */ /* modes */ #define IFMT 0170000 /* type of file */ @@ -145,10 +158,30 @@ ino_t dirpref(); #define IWRITE 0200 #define IEXEC 0100 +#ifdef KERNEL +/* + * Convert between inode pointers and vnode pointers + */ +#define VTOI(vp) ((struct inode *)(vp)->v_data) +#define ITOV(ip) ((struct vnode *)&(ip)->i_vnode) + +/* + * Convert between vnode types and inode formats + */ +extern enum vtype iftovt_tab[]; +extern int vttoif_tab[]; +#define IFTOVT(mode) (iftovt_tab[((mode) & IFMT) >> 13]) +#define VTTOIF(indx) (vttoif_tab[(int)(indx)]) + +#define MAKEIMODE(indx, mode) (int)(VTTOIF(indx) | (mode)) + +/* + * Lock and unlock inodes. + */ #define ILOCK(ip) { \ while ((ip)->i_flag & ILOCKED) { \ (ip)->i_flag |= IWANT; \ - sleep((caddr_t)(ip), PINOD); \ + (void) sleep((caddr_t)(ip), PINOD); \ } \ (ip)->i_flag |= ILOCKED; \ } @@ -163,7 +196,7 @@ ino_t dirpref(); #define IUPDAT(ip, t1, t2, waitfor) { \ if (ip->i_flag&(IUPD|IACC|ICHG|IMOD)) \ - iupdat(ip, t1, t2, waitfor); \ + (void) iupdat(ip, t1, t2, waitfor); \ } #define ITIMES(ip, t1, t2) { \ @@ -178,3 +211,13 @@ ino_t dirpref(); (ip)->i_flag &= ~(IACC|IUPD|ICHG); \ } \ } + +/* + * This overlays the fid sturcture (see mount.h) + */ +struct ufid { + u_short ufid_len; + ino_t ufid_ino; + long ufid_gen; +}; +#endif