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.7 (Berkeley) 01/14/90 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 struct vnode *n_vnode; /* vnode associated with this nfsnode */ 36 long n_attrstamp; /* Time stamp (sec) for attributes */ 37 struct vattr n_vattr; /* Vnode attribute cache */ 38 struct sillyrename *n_sillyrename; /* Ptr to silly rename struct */ 39 u_long n_size; /* Current size of file */ 40 time_t n_mtime; /* Prev modify time to maintain data cache consistency*/ 41 int n_error; /* Save write error value */ 42 pid_t n_lockholder; /* holder of nfsnode lock */ 43 pid_t n_lockwaiter; /* most recent waiter for nfsnode lock */ 44 }; 45 46 #define n_forw n_chain[0] 47 #define n_back n_chain[1] 48 49 #ifdef KERNEL 50 /* 51 * Convert between nfsnode pointers and vnode pointers 52 */ 53 #define VTONFS(vp) ((struct nfsnode *)(vp)->v_data) 54 #define NFSTOV(np) ((struct vnode *)(np)->n_vnode) 55 #endif 56 /* 57 * Flags for n_flag 58 */ 59 #define NLOCKED 0x1 /* Lock the node for other local accesses */ 60 #define NWANT 0x2 /* Want above lock */ 61 #define NMODIFIED 0x4 /* Might have a modified buffer in bio */ 62 #define NBUFFERED 0x8 /* Might have a buffer in bio */ 63 #define NPAGEDON 0x10 /* Might have associated memory pages */ 64 #define NWRITEERR 0x20 /* Flag write errors so close will know */ 65