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.9 (Berkeley) 03/05/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 time_t 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 time_t n_ctime; /* Prev create time for name cache consistency*/ 42 int n_error; /* Save write error value */ 43 pid_t n_lockholder; /* holder of nfsnode lock */ 44 pid_t n_lockwaiter; /* most recent waiter for nfsnode lock */ 45 u_long n_direofoffset; /* Dir. EOF offset cache */ 46 time_t n_direofstamp; /* Time stamp for dir. EOF offset cache */ 47 }; 48 49 #define n_forw n_chain[0] 50 #define n_back n_chain[1] 51 52 #ifdef KERNEL 53 /* 54 * Convert between nfsnode pointers and vnode pointers 55 */ 56 #define VTONFS(vp) ((struct nfsnode *)(vp)->v_data) 57 #define NFSTOV(np) ((struct vnode *)(np)->n_vnode) 58 #endif 59 /* 60 * Flags for n_flag 61 */ 62 #define NLOCKED 0x1 /* Lock the node for other local accesses */ 63 #define NWANT 0x2 /* Want above lock */ 64 #define NMODIFIED 0x4 /* Might have a modified buffer in bio */ 65 #define NBUFFERED 0x8 /* Might have a buffer in bio */ 66 #define NPAGEDON 0x10 /* Might have associated memory pages */ 67 #define NWRITEERR 0x20 /* Flag write errors so close will know */ 68