|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ ! 23: /* ! 24: * Copyright (c) 1989, 1993 ! 25: * The Regents of the University of California. All rights reserved. ! 26: * ! 27: * This code is derived from software contributed to Berkeley by ! 28: * Rick Macklem at The University of Guelph. ! 29: * ! 30: * Redistribution and use in source and binary forms, with or without ! 31: * modification, are permitted provided that the following conditions ! 32: * are met: ! 33: * 1. Redistributions of source code must retain the above copyright ! 34: * notice, this list of conditions and the following disclaimer. ! 35: * 2. Redistributions in binary form must reproduce the above copyright ! 36: * notice, this list of conditions and the following disclaimer in the ! 37: * documentation and/or other materials provided with the distribution. ! 38: * 3. All advertising materials mentioning features or use of this software ! 39: * must display the following acknowledgement: ! 40: * This product includes software developed by the University of ! 41: * California, Berkeley and its contributors. ! 42: * 4. Neither the name of the University nor the names of its contributors ! 43: * may be used to endorse or promote products derived from this software ! 44: * without specific prior written permission. ! 45: * ! 46: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 47: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 48: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 49: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 50: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 51: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 52: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 53: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 54: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 55: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 56: * SUCH DAMAGE. ! 57: * ! 58: * @(#)nfsnode.h 8.9 (Berkeley) 5/14/95 ! 59: * FreeBSD-Id: nfsnode.h,v 1.24 1997/10/28 14:06:25 bde Exp $ ! 60: */ ! 61: ! 62: ! 63: #ifndef _NFS_NFSNODE_H_ ! 64: #define _NFS_NFSNODE_H_ ! 65: ! 66: #ifndef _NFS_NFS_H_ ! 67: #include <nfs/nfs.h> ! 68: #endif ! 69: ! 70: /* ! 71: * Silly rename structure that hangs off the nfsnode until the name ! 72: * can be removed by nfs_inactive() ! 73: */ ! 74: struct sillyrename { ! 75: struct ucred *s_cred; ! 76: struct vnode *s_dvp; ! 77: long s_namlen; ! 78: char s_name[20]; ! 79: }; ! 80: ! 81: /* ! 82: * This structure is used to save the logical directory offset to ! 83: * NFS cookie mappings. ! 84: * The mappings are stored in a list headed ! 85: * by n_cookies, as required. ! 86: * There is one mapping for each NFS_DIRBLKSIZ bytes of directory information ! 87: * stored in increasing logical offset byte order. ! 88: */ ! 89: #define NFSNUMCOOKIES 31 ! 90: ! 91: struct nfsdmap { ! 92: LIST_ENTRY(nfsdmap) ndm_list; ! 93: int ndm_eocookie; ! 94: nfsuint64 ndm_cookies[NFSNUMCOOKIES]; ! 95: }; ! 96: ! 97: /* ! 98: * The nfsnode is the nfs equivalent to ufs's inode. Any similarity ! 99: * is purely coincidental. ! 100: * There is a unique nfsnode allocated for each active file, ! 101: * each current directory, each mounted-on file, text file, and the root. ! 102: * An nfsnode is 'named' by its file handle. (nget/nfs_node.c) ! 103: * If this structure exceeds 256 bytes (it is currently 256 using 4.4BSD-Lite ! 104: * type definitions), file handles of > 32 bytes should probably be split out ! 105: * into a separate MALLOC()'d data structure. (Reduce the size of nfsfh_t by ! 106: * changing the definition in sys/mount.h of NFS_SMALLFH.) ! 107: * NB: Hopefully the current order of the fields is such that everything will ! 108: * be well aligned and, therefore, tightly packed. ! 109: */ ! 110: struct nfsnode { ! 111: LIST_ENTRY(nfsnode) n_hash; /* Hash chain */ ! 112: CIRCLEQ_ENTRY(nfsnode) n_timer; /* Nqnfs timer chain */ ! 113: u_quad_t n_size; /* Current size of file */ ! 114: u_quad_t n_brev; /* Modify rev when cached */ ! 115: u_quad_t n_lrev; /* Modify rev for lease */ ! 116: struct vattr n_vattr; /* Vnode attribute cache */ ! 117: time_t n_attrstamp; /* Attr. cache timestamp */ ! 118: time_t n_mtime; /* Prev modify time. */ ! 119: time_t n_ctime; /* Prev create time. */ ! 120: time_t n_expiry; /* Lease expiry time */ ! 121: nfsfh_t *n_fhp; /* NFS File Handle */ ! 122: struct vnode *n_vnode; /* associated vnode */ ! 123: struct lockf *n_lockf; /* Locking record of file */ ! 124: int n_error; /* Save write error value */ ! 125: union { ! 126: struct timespec nf_atim; /* Special file times */ ! 127: nfsuint64 nd_cookieverf; /* Cookie verifier (dir only) */ ! 128: } n_un1; ! 129: union { ! 130: struct timespec nf_mtim; ! 131: off_t nd_direof; /* Dir. EOF offset cache */ ! 132: } n_un2; ! 133: union { ! 134: struct sillyrename *nf_silly; /* Ptr to silly rename struct */ ! 135: LIST_HEAD(, nfsdmap) nd_cook; /* cookies */ ! 136: } n_un3; ! 137: short n_fhsize; /* size in bytes, of fh */ ! 138: short n_flag; /* Flag for locking.. */ ! 139: nfsfh_t n_fh; /* Small File Handle */ ! 140: }; ! 141: ! 142: #define n_atim n_un1.nf_atim ! 143: #define n_mtim n_un2.nf_mtim ! 144: #define n_sillyrename n_un3.nf_silly ! 145: #define n_cookieverf n_un1.nd_cookieverf ! 146: #define n_direofoffset n_un2.nd_direof ! 147: #define n_cookies n_un3.nd_cook ! 148: ! 149: /* ! 150: * Flags for n_flag ! 151: */ ! 152: #define NFLUSHWANT 0x0001 /* Want wakeup from a flush in prog. */ ! 153: #define NFLUSHINPROG 0x0002 /* Avoid multiple calls to vinvalbuf() */ ! 154: #define NMODIFIED 0x0004 /* Might have a modified buffer in bio */ ! 155: #define NWRITEERR 0x0008 /* Flag write errors so close will know */ ! 156: #define NQNFSNONCACHE 0x0020 /* Non-cachable lease */ ! 157: #define NQNFSWRITE 0x0040 /* Write lease */ ! 158: #define NQNFSEVICTED 0x0080 /* Has been evicted */ ! 159: #define NACC 0x0100 /* Special file accessed */ ! 160: #define NUPD 0x0200 /* Special file updated */ ! 161: #define NCHG 0x0400 /* Special file times changed */ ! 162: #define NLOCKED 0x0800 /* node is locked */ ! 163: #define NWANTED 0x0100 /* someone wants to lock */ ! 164: ! 165: /* ! 166: * Convert between nfsnode pointers and vnode pointers ! 167: */ ! 168: #define VTONFS(vp) ((struct nfsnode *)(vp)->v_data) ! 169: #define NFSTOV(np) ((struct vnode *)(np)->n_vnode) ! 170: ! 171: /* ! 172: * Queue head for nfsiod's ! 173: */ ! 174: extern TAILQ_HEAD(nfs_bufq, buf) nfs_bufq; ! 175: extern struct proc *nfs_iodwant[NFS_MAXASYNCDAEMON]; ! 176: extern struct nfsmount *nfs_iodmount[NFS_MAXASYNCDAEMON]; ! 177: ! 178: #if defined(KERNEL) ! 179: typedef int vop_t __P((void *)); ! 180: extern vop_t **fifo_nfsv2nodeop_p; ! 181: extern vop_t **nfsv2_vnodeop_p; ! 182: extern vop_t **spec_nfsv2nodeop_p; ! 183: ! 184: /* ! 185: * Prototypes for NFS vnode operations ! 186: */ ! 187: int nfs_getpages __P((struct vop_getpages_args *)); ! 188: int nfs_write __P((struct vop_write_args *)); ! 189: #define nfs_lease_check ((int (*) __P((struct vop_lease_args *)))nullop) ! 190: #define nqnfs_vop_lease_check lease_check ! 191: int nqnfs_vop_lease_check __P((struct vop_lease_args *)); ! 192: #define nfs_revoke vop_revoke ! 193: #define nfs_seek ((int (*) __P((struct vop_seek_args *)))nullop) ! 194: int nfs_abortop __P((struct vop_abortop_args *)); ! 195: int nfs_inactive __P((struct vop_inactive_args *)); ! 196: int nfs_reclaim __P((struct vop_reclaim_args *)); ! 197: #define nfs_lock ((int (*) __P((struct vop_lock_args *)))vop_nolock) ! 198: #define nfs_unlock ((int (*) __P((struct vop_unlock_args *)))vop_nounlock) ! 199: #define nfs_islocked ((int (*) __P((struct vop_islocked_args *)))vop_noislocked) ! 200: #define nfs_reallocblks \ ! 201: ((int (*) __P((struct vop_reallocblks_args *)))eopnotsupp) ! 202: ! 203: /* other stuff */ ! 204: int nfs_removeit __P((struct sillyrename *)); ! 205: int nfs_nget __P((struct mount *,nfsfh_t *,int,struct nfsnode **)); ! 206: nfsuint64 *nfs_getcookie __P((struct nfsnode *, off_t, int)); ! 207: void nfs_invaldir __P((struct vnode *)); ! 208: ! 209: #define nqnfs_lease_updatetime lease_updatetime ! 210: ! 211: #endif /* KERNEL */ ! 212: ! 213: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.