1 /* 2 * Copyright (c) 1989 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms are permitted 9 * provided that the above copyright notice and this paragraph are 10 * duplicated in all such forms and that any documentation, 11 * advertising materials, and other materials related to such 12 * distribution and use acknowledge that the software was developed 13 * by the University of California, Berkeley. The name of the 14 * University may not be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19 * 20 * @(#)nfsnode.h 7.1 (Berkeley) 07/05/89 21 */ 22 23 /* 24 * The nfsnode is the nfs equivalent to ufs's inode. Any similarity 25 * is purely coincidental. 26 * There is a unique nfsnode allocated for each active file, 27 * each current directory, each mounted-on file, text file, and the root. 28 * An nfsnode is 'named' by its file handle. (nget/nfs_node.c) 29 */ 30 31 struct nfsnode { 32 struct nfsnode *n_chain[2]; /* must be first */ 33 nfsv2fh_t n_fh; /* NFS File Handle */ 34 long n_flag; /* Flag for locking.. */ 35 long n_id; /* unique identifier */ 36 struct vnode n_vnode; /* vnode associated with this nfsnode */ 37 long n_attrstamp; /* Time stamp (sec) for attributes */ 38 struct vattr n_vattr; /* Vnode attribute cache */ 39 struct sillyrename *n_sillyrename; /* Ptr to silly rename struct */ 40 struct nfsnode *n_freef; /* free list forward */ 41 struct nfsnode **n_freeb; /* free list back */ 42 }; 43 44 #define n_forw n_chain[0] 45 #define n_back n_chain[1] 46 47 #ifdef KERNEL 48 struct nfsnode *nfsnode; /* the nfsnode table itself */ 49 struct nfsnode *nfsnodeNNFSNODE; /* the end of the nfsnode table */ 50 int nnfsnode; /* number of slots in the table */ 51 long nextnfsnodeid; /* unique id generator */ 52 53 extern struct vnodeops nfsv2_vnodeops; /* vnode operations for nfsv2 */ 54 extern struct vnodeops nfsv2chr_vnodeops; /* vnode operations for chr devices */ 55 56 /* 57 * Convert between nfsnode pointers and vnode pointers 58 */ 59 #define VTONFS(vp) ((struct nfsnode *)(vp)->v_data) 60 #define NFSTOV(np) ((struct vnode *)&(np)->n_vnode) 61 #endif 62 /* 63 * Flags for n_flag 64 */ 65 #define NLOCKED 0x1 66 #define NWANT 0x2 67