nfsnode.h revision 1.17 1 1.17 mycroft /* $NetBSD: nfsnode.h,v 1.17 1996/09/01 23:49:14 mycroft Exp $ */
2 1.11 cgd
3 1.1 mycroft /*
4 1.10 mycroft * Copyright (c) 1989, 1993
5 1.10 mycroft * The Regents of the University of California. All rights reserved.
6 1.1 mycroft *
7 1.1 mycroft * This code is derived from software contributed to Berkeley by
8 1.1 mycroft * Rick Macklem at The University of Guelph.
9 1.1 mycroft *
10 1.1 mycroft * Redistribution and use in source and binary forms, with or without
11 1.1 mycroft * modification, are permitted provided that the following conditions
12 1.1 mycroft * are met:
13 1.1 mycroft * 1. Redistributions of source code must retain the above copyright
14 1.1 mycroft * notice, this list of conditions and the following disclaimer.
15 1.1 mycroft * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 mycroft * notice, this list of conditions and the following disclaimer in the
17 1.1 mycroft * documentation and/or other materials provided with the distribution.
18 1.1 mycroft * 3. All advertising materials mentioning features or use of this software
19 1.1 mycroft * must display the following acknowledgement:
20 1.1 mycroft * This product includes software developed by the University of
21 1.1 mycroft * California, Berkeley and its contributors.
22 1.1 mycroft * 4. Neither the name of the University nor the names of its contributors
23 1.1 mycroft * may be used to endorse or promote products derived from this software
24 1.1 mycroft * without specific prior written permission.
25 1.1 mycroft *
26 1.1 mycroft * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27 1.1 mycroft * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 1.1 mycroft * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 1.1 mycroft * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30 1.1 mycroft * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 1.1 mycroft * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 1.1 mycroft * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 1.1 mycroft * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 1.1 mycroft * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 1.1 mycroft * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 1.1 mycroft * SUCH DAMAGE.
37 1.1 mycroft *
38 1.16 fvdl * @(#)nfsnode.h 8.9 (Berkeley) 5/14/95
39 1.1 mycroft */
40 1.1 mycroft
41 1.16 fvdl
42 1.16 fvdl #ifndef _NFS_NFSNODE_H_
43 1.16 fvdl #define _NFS_NFSNODE_H_
44 1.16 fvdl
45 1.16 fvdl #ifndef _NFS_NFS_H_
46 1.16 fvdl #include <nfs/nfs.h>
47 1.16 fvdl #endif
48 1.16 fvdl
49 1.10 mycroft /*
50 1.10 mycroft * Silly rename structure that hangs off the nfsnode until the name
51 1.10 mycroft * can be removed by nfs_inactive()
52 1.10 mycroft */
53 1.10 mycroft struct sillyrename {
54 1.10 mycroft struct ucred *s_cred;
55 1.10 mycroft struct vnode *s_dvp;
56 1.10 mycroft long s_namlen;
57 1.10 mycroft char s_name[20];
58 1.10 mycroft };
59 1.1 mycroft
60 1.1 mycroft /*
61 1.16 fvdl * This structure is used to save the logical directory offset to
62 1.16 fvdl * NFS cookie mappings.
63 1.16 fvdl * The mappings are stored in a list headed
64 1.16 fvdl * by n_cookies, as required.
65 1.16 fvdl * There is one mapping for each NFS_DIRBLKSIZ bytes of directory information
66 1.16 fvdl * stored in increasing logical offset byte order.
67 1.16 fvdl */
68 1.16 fvdl #define NFSNUMCOOKIES 31
69 1.16 fvdl
70 1.16 fvdl struct nfsdmap {
71 1.16 fvdl LIST_ENTRY(nfsdmap) ndm_list;
72 1.16 fvdl int ndm_eocookie;
73 1.16 fvdl nfsuint64 ndm_cookies[NFSNUMCOOKIES];
74 1.16 fvdl };
75 1.16 fvdl
76 1.16 fvdl /*
77 1.1 mycroft * The nfsnode is the nfs equivalent to ufs's inode. Any similarity
78 1.1 mycroft * is purely coincidental.
79 1.1 mycroft * There is a unique nfsnode allocated for each active file,
80 1.1 mycroft * each current directory, each mounted-on file, text file, and the root.
81 1.1 mycroft * An nfsnode is 'named' by its file handle. (nget/nfs_node.c)
82 1.16 fvdl * If this structure exceeds 256 bytes (it is currently 256 using 4.4BSD-Lite
83 1.16 fvdl * type definitions), file handles of > 32 bytes should probably be split out
84 1.16 fvdl * into a separate MALLOC()'d data structure. (Reduce the size of nfsfh_t by
85 1.16 fvdl * changing the definition in sys/mount.h of NFS_SMALLFH.)
86 1.16 fvdl * NB: Hopefully the current order of the fields is such that everything will
87 1.16 fvdl * be well aligned and, therefore, tightly packed.
88 1.1 mycroft */
89 1.1 mycroft struct nfsnode {
90 1.16 fvdl LIST_ENTRY(nfsnode) n_hash; /* Hash chain */
91 1.16 fvdl CIRCLEQ_ENTRY(nfsnode) n_timer; /* Nqnfs timer chain */
92 1.16 fvdl u_quad_t n_size; /* Current size of file */
93 1.16 fvdl u_quad_t n_brev; /* Modify rev when cached */
94 1.16 fvdl u_quad_t n_lrev; /* Modify rev for lease */
95 1.16 fvdl struct vattr n_vattr; /* Vnode attribute cache */
96 1.16 fvdl time_t n_attrstamp; /* Attr. cache timestamp */
97 1.16 fvdl time_t n_mtime; /* Prev modify time. */
98 1.16 fvdl time_t n_ctime; /* Prev create time. */
99 1.16 fvdl time_t n_expiry; /* Lease expiry time */
100 1.16 fvdl nfsfh_t *n_fhp; /* NFS File Handle */
101 1.16 fvdl struct vnode *n_vnode; /* associated vnode */
102 1.16 fvdl struct lockf *n_lockf; /* Locking record of file */
103 1.16 fvdl int n_error; /* Save write error value */
104 1.16 fvdl union {
105 1.16 fvdl struct timespec nf_atim; /* Special file times */
106 1.16 fvdl nfsuint64 nd_cookieverf; /* Cookie verifier (dir only) */
107 1.16 fvdl } n_un1;
108 1.16 fvdl union {
109 1.16 fvdl struct timespec nf_mtim;
110 1.16 fvdl off_t nd_direof; /* Dir. EOF offset cache */
111 1.16 fvdl } n_un2;
112 1.16 fvdl union {
113 1.16 fvdl struct sillyrename *nf_silly; /* Ptr to silly rename struct */
114 1.16 fvdl LIST_HEAD(, nfsdmap) nd_cook; /* cookies */
115 1.16 fvdl } n_un3;
116 1.16 fvdl short n_fhsize; /* size in bytes, of fh */
117 1.16 fvdl short n_flag; /* Flag for locking.. */
118 1.16 fvdl nfsfh_t n_fh; /* Small File Handle */
119 1.1 mycroft };
120 1.1 mycroft
121 1.16 fvdl #define n_atim n_un1.nf_atim
122 1.16 fvdl #define n_mtim n_un2.nf_mtim
123 1.16 fvdl #define n_sillyrename n_un3.nf_silly
124 1.16 fvdl #define n_cookieverf n_un1.nd_cookieverf
125 1.16 fvdl #define n_direofoffset n_un2.nd_direof
126 1.16 fvdl #define n_cookies n_un3.nd_cook
127 1.16 fvdl
128 1.10 mycroft /*
129 1.10 mycroft * Flags for n_flag
130 1.10 mycroft */
131 1.10 mycroft #define NFLUSHWANT 0x0001 /* Want wakeup from a flush in prog. */
132 1.10 mycroft #define NFLUSHINPROG 0x0002 /* Avoid multiple calls to vinvalbuf() */
133 1.10 mycroft #define NMODIFIED 0x0004 /* Might have a modified buffer in bio */
134 1.10 mycroft #define NWRITEERR 0x0008 /* Flag write errors so close will know */
135 1.10 mycroft #define NQNFSNONCACHE 0x0020 /* Non-cachable lease */
136 1.10 mycroft #define NQNFSWRITE 0x0040 /* Write lease */
137 1.10 mycroft #define NQNFSEVICTED 0x0080 /* Has been evicted */
138 1.10 mycroft #define NACC 0x0100 /* Special file accessed */
139 1.10 mycroft #define NUPD 0x0200 /* Special file updated */
140 1.10 mycroft #define NCHG 0x0400 /* Special file times changed */
141 1.1 mycroft
142 1.1 mycroft /*
143 1.1 mycroft * Convert between nfsnode pointers and vnode pointers
144 1.1 mycroft */
145 1.1 mycroft #define VTONFS(vp) ((struct nfsnode *)(vp)->v_data)
146 1.1 mycroft #define NFSTOV(np) ((struct vnode *)(np)->n_vnode)
147 1.10 mycroft
148 1.1 mycroft /*
149 1.10 mycroft * Queue head for nfsiod's
150 1.1 mycroft */
151 1.12 mycroft TAILQ_HEAD(, buf) nfs_bufq;
152 1.1 mycroft
153 1.14 jtc #ifdef _KERNEL
154 1.1 mycroft /*
155 1.1 mycroft * Prototypes for NFS vnode operations
156 1.1 mycroft */
157 1.17 mycroft int nfs_lookup __P((void *));
158 1.17 mycroft int nfs_create __P((void *));
159 1.17 mycroft int nfs_mknod __P((void *));
160 1.17 mycroft int nfs_open __P((void *));
161 1.17 mycroft int nfs_close __P((void *));
162 1.17 mycroft int nfsspec_close __P((void *));
163 1.17 mycroft int nfsfifo_close __P((void *));
164 1.17 mycroft int nfs_access __P((void *));
165 1.17 mycroft int nfsspec_access __P((void *));
166 1.17 mycroft int nfs_getattr __P((void *));
167 1.17 mycroft int nfs_setattr __P((void *));
168 1.17 mycroft int nfs_read __P((void *));
169 1.17 mycroft int nfs_write __P((void *));
170 1.17 mycroft #define nfs_lease_check genfs_nullop
171 1.17 mycroft #define nqnfs_vop_lease_check lease_check
172 1.17 mycroft int nfsspec_read __P((void *));
173 1.17 mycroft int nfsspec_write __P((void *));
174 1.17 mycroft int nfsfifo_read __P((void *));
175 1.17 mycroft int nfsfifo_write __P((void *));
176 1.17 mycroft #define nfs_ioctl ((int (*) __P((void *)))enoioctl)
177 1.17 mycroft #define nfs_select genfs_select
178 1.16 fvdl #ifdef Lite2_integrated
179 1.17 mycroft #define nfs_revoke vop_revoke
180 1.17 mycroft #endif
181 1.17 mycroft int nfs_mmap __P((void *));
182 1.17 mycroft int nfs_fsync __P((void *));
183 1.17 mycroft #define nfs_seek genfs_nullop
184 1.17 mycroft int nfs_remove __P((void *));
185 1.17 mycroft int nfs_link __P((void *));
186 1.17 mycroft int nfs_rename __P((void *));
187 1.17 mycroft int nfs_mkdir __P((void *));
188 1.17 mycroft int nfs_rmdir __P((void *));
189 1.17 mycroft int nfs_symlink __P((void *));
190 1.17 mycroft int nfs_readdir __P((void *));
191 1.17 mycroft int nfs_readlink __P((void *));
192 1.17 mycroft #define nfs_abortop genfs_abortop
193 1.17 mycroft int nfs_inactive __P((void *));
194 1.17 mycroft int nfs_reclaim __P((void *));
195 1.17 mycroft #ifdef Lite2_integrated
196 1.17 mycroft #define nfs_lock ((int (*) __P((void *)))vop_nolock)
197 1.17 mycroft #define nfs_unlock ((int (*) __P((void *)))vop_nounlock)
198 1.17 mycroft #define nfs_islocked ((int (*) __P((void *)))vop_noislocked)
199 1.16 fvdl #else
200 1.17 mycroft int nfs_lock __P((void *));
201 1.17 mycroft int nfs_unlock __P((void *));
202 1.17 mycroft int nfs_islocked __P((void *));
203 1.16 fvdl #endif /* Lite2_integrated */
204 1.17 mycroft int nfs_bmap __P((void *));
205 1.17 mycroft int nfs_strategy __P((void *));
206 1.17 mycroft int nfs_print __P((void *));
207 1.17 mycroft int nfs_pathconf __P((void *));
208 1.17 mycroft int nfs_advlock __P((void *));
209 1.17 mycroft #define nfs_blkatoff genfs_eopnotsupp
210 1.17 mycroft int nfs_bwrite __P((void *));
211 1.17 mycroft int nfs_vget __P((struct mount *, ino_t, struct vnode **));
212 1.17 mycroft #define nfs_valloc genfs_eopnotsupp
213 1.17 mycroft #define nfs_reallocblks genfs_eopnotsupp
214 1.17 mycroft #define nfs_vfree genfs_nullop
215 1.17 mycroft int nfs_truncate __P((void *));
216 1.17 mycroft int nfs_update __P((void *));
217 1.15 christos
218 1.15 christos extern int (**nfsv2_vnodeop_p) __P((void *));
219 1.15 christos
220 1.14 jtc #endif /* _KERNEL */
221 1.16 fvdl
222 1.16 fvdl #endif
223