Annotation of sys/xfs/xfs_locl.h, Revision 1.1.1.1
1.1 nbrk 1: /*
2: * Copyright (c) 1995 - 2002 Kungliga Tekniska Högskolan
3: * (Royal Institute of Technology, Stockholm, Sweden).
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions
8: * are met:
9: *
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: *
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: *
17: * 3. Neither the name of the Institute nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: */
33:
34: /* $arla: xfs_locl.h,v 1.72 2003/02/15 16:40:00 lha Exp $ */
35:
36: #ifdef HAVE_CONFIG_H
37: #include <config.h>
38: #else
39: #include <xfs/xfs_config.h>
40: #endif
41:
42: #ifndef RCSID
43: #define RCSID(x)
44: #endif
45:
46: #ifdef __osf__
47:
48: #ifdef __GNUC__
49: #define asm __foo_asm
50: #endif
51: #include <sys/types.h>
52: #include <sys/errno.h>
53: #include <sys/uio.h>
54: #include <machine/cpu.h>
55: #include <sys/conf.h>
56: #include <sys/sysconfig.h>
57: #include <sys/file.h>
58: #include <sys/malloc.h>
59: #include <sys/poll.h>
60: #include <sys/ioctl.h>
61: #include <sys/fcntl.h>
62: #include <sys/vfs_proto.h>
63: #include <io/common/devdriver.h>
64: #include <vm/vm_page.h>
65: #include <vm/vm_vppage.h>
66: #include <vm/vm_ubc.h>
67:
68: typedef short int16_t;
69: typedef unsigned short uint16_t;
70: typedef int int32_t;
71: typedef unsigned int uint32_t;
72:
73: #define VT_AFS VT_ADDON
74: #define MOUNT_NNPFS MOUNT_PC
75:
76: typedef struct nameidata xfs_componentname;
77:
78: /* XXX this is gross, but makes the code considerably more readable */
79: #if 0
80: #define componentname nameidata
81: #endif
82:
83: #define cn_nameptr ni_ptr
84: #define cn_namelen ni_namelen
85: #define cn_hash ni_hash
86: #define cn_cred ni_cred
87: #define cn_nameiop ni_nameiop
88: #define cn_flags ni_flags
89:
90: #define mnt_stat m_stat
91: #define mnt_flag m_flag
92:
93: #define NDINIT(ndp, op, flags, segflg, namep, p) \
94: (ndp)->ni_nameiop = (op) | (flags); \
95: (ndp)->ni_segflg = segflg; \
96: (ndp)->ni_dirp = namep;
97:
98: #define LOCKLEAF 0
99:
100: #define FFLAGS(mode) ((mode) - FOPEN)
101:
102: /* 4.4BSD vput does VOP_UNLOCK + vrele, but it seems as if we only
103: should do a vrele here */
104: #define vput(VP) vrele(VP)
105:
106: #define xfs_uio_to_proc(uiop) (u.u_procp)
107: #define xfs_cnp_to_proc(cnp) (u.u_procp)
108: #define xfs_proc_to_cred(p) ((p)->p_rcred)
109: #define xfs_proc_to_euid(p) ((p)->p_rcred->cr_uid)
110:
111: #define xfs_curproc() (u.u_procp)
112:
113: #define xfs_vop_read VOP_READ
114: #define xfs_vop_write VOP_WRITE
115: #define xfs_vop_getattr(t, attr, cred, proc, error) VOP_GETATTR((t), (attr), (cred), (error))
116: #define xfs_vop_access(dvp, mode, cred, proc, error) VOP_ACCESS((dvp), (mode), (cred), (error))
117:
118: struct vop_generic_args;
119:
120: typedef u_long va_size_t;
121:
122: #else /* !__osf__ */
123:
124: typedef struct componentname xfs_componentname;
125:
126: #include <sys/types.h>
127: #include <sys/param.h>
128: #include <sys/time.h>
129: #include <sys/proc.h>
130: #include <sys/filedesc.h>
131: #include <sys/kernel.h>
132: #ifdef HAVE_SYS_MODULE_H
133: #include <sys/module.h>
134: #endif
135: #include <sys/systm.h>
136: #include <sys/fcntl.h>
137: #ifdef HAVE_SYS_SYSPROTO_H
138: #include <sys/sysproto.h>
139: #endif
140: #include <sys/conf.h>
141: #include <sys/mount.h>
142: #include <sys/exec.h>
143: #ifdef HAVE_SYS_SYSENT_H
144: #include <sys/sysent.h>
145: #endif
146: #ifdef HAVE_SYS_LKM_H
147: #include <sys/lkm.h>
148: #endif
149: #ifdef HAVE_SYS_LOCK_H
150: #include <sys/lock.h>
151: #endif
152: #ifdef HAVE_SYS_MUTEX_H
153: #include <sys/mutex.h>
154: #endif
155: #include <sys/vnode.h>
156: #include <sys/errno.h>
157: #include <sys/file.h>
158: #include <sys/namei.h>
159: #include <sys/dirent.h>
160: #include <sys/ucred.h>
161: #include <sys/selinfo.h>
162: #include <sys/uio.h>
163: #ifdef HAVE_SYS_POLL_H
164: #include <sys/poll.h>
165: #endif
166: #ifdef HAVE_SYS_SIGNALVAR_H
167: #include <sys/signalvar.h>
168: #endif
169: #ifdef HAVE_SYS_INTTYPES_H
170: #include <sys/inttypes.h>
171: #endif
172: #include <sys/syscall.h>
173: #include <sys/queue.h>
174: #include <sys/malloc.h>
175: #ifdef HAVE_SYS_SYSCALLARGS_H
176: #include <sys/syscallargs.h>
177: #endif
178: #ifdef HAVE_SYS_ATTR_H
179: #include <sys/attr.h>
180: #endif
181:
182: #ifdef HAVE_MISCFS_GENFS_GENFS_H
183: #include <miscfs/genfs/genfs.h>
184: #endif
185: #ifdef HAVE_MISCFS_SYNCFS_SYNCFS_H
186: #include <miscfs/syncfs/syncfs.h>
187: #endif
188: #ifndef HAVE_KERNEL_UVM_ONLY
189: #ifdef HAVE_VM_VM_H
190: #include <vm/vm.h>
191: #endif
192: #ifdef HAVE_VM_VM_EXTERN_H
193: #include <vm/vm_extern.h>
194: #endif
195: #ifdef HAVE_VM_VM_ZONE_H
196: #include <vm/vm_zone.h>
197: #endif
198: #ifdef HAVE_VM_VM_OBJECT_H
199: #include <vm/vm_object.h>
200: #endif
201: #endif
202: #ifdef HAVE_UVM_UVM_EXTERN_H
203: #include <uvm/uvm_extern.h>
204: #endif
205: #ifdef HAVE_VM_UMA_H
206: #include <vm/uma.h>
207: #endif
208:
209: #if defined(__APPLE__)
210: #include <machine/machine_routines.h>
211: #include <mach/machine/vm_types.h>
212: #include <sys/ubc.h>
213: void cache_purge(struct vnode *);
214: int cache_lookup(struct vnode *, struct vnode **, struct componentname *);
215: void cache_enter(struct vnode *, struct vnode *, struct componentname *);
216: void cache_purgevfs(struct mount *);
217: #endif
218:
219: #define xfs_vop_read(t, uio, ioflag, cred, error) (error) = VOP_READ((t), (uio), (ioflag), (cred))
220: #define xfs_vop_write(t, uio, ioflag, cred, error) (error) = VOP_WRITE((t), (uio), (ioflag), (cred))
221: #define xfs_vop_getattr(t, attr, cred, proc, error) (error) = VOP_GETATTR((t), (attr), (cred), (proc))
222: #define xfs_vop_access(dvp, mode, cred, proc, error) (error) = VOP_ACCESS((dvp), (mode), (cred), (proc))
223:
224: typedef u_quad_t va_size_t;
225:
226: #endif /* !__osf__ */
227:
228: #ifdef __FreeBSD_version
229: #if __FreeBSD_version < 400000
230: # error This version is unsupported
231: #elif __FreeBSD_version < 440001 || (__FreeBSD_version >= 500000 && __FreeBSD_version < 500023)
232: typedef struct proc d_thread_t;
233: #elif __FreeBSD_version == 500023
234: # define HAVE_FREEBSD_THREAD
235: typedef struct thread d_thread_t;
236: #elif __FreeBSD_version >= 500024
237: # define HAVE_FREEBSD_THREAD
238: #endif
239: typedef d_thread_t syscall_d_thread_t;
240: #define syscall_thread_to_thread(x) (x)
241: #else /* !__FreeBSD_version */
242: #if defined(__NetBSD__) && __NetBSD_Version__ >= 106130000
243: typedef struct lwp syscall_d_thread_t;
244: #define syscall_thread_to_thread(x) ((x)->l_proc)
245: #else
246: typedef struct proc syscall_d_thread_t;
247: #define syscall_thread_to_thread(x) (x)
248: #endif
249: typedef struct proc d_thread_t;
250: #endif /* !__FreeBSD_version */
251:
252: #ifdef VV_ROOT
253: #define NNPFS_MAKE_VROOT(v) ((v)->v_vflag |= VV_ROOT) /* FreeBSD 5 */
254: #else
255: #define NNPFS_MAKE_VROOT(v) ((v)->v_flag |= VROOT)
256: #endif
257:
258: #if defined(__NetBSD__) && __NetBSD_Version__ >= 105280000
259: #include <miscfs/genfs/genfs.h>
260: #include <miscfs/genfs/genfs_node.h>
261:
262: struct genfs_ops xfs_genfsops;
263: #endif
264:
265:
266: #if defined(HAVE_FREEBSD_THREAD)
267: #define xfs_uio_to_thread(uiop) ((uiop)->uio_td)
268: #define xfs_cnp_to_thread(cnp) ((cnp)->cn_thread)
269: #define xfs_thread_to_cred(td) ((td)->td_proc->p_ucred)
270: #define xfs_thread_to_euid(td) ((td)->td_proc->p_ucred->cr_uid)
271: #else
272: #define xfs_uio_to_proc(uiop) ((uiop)->uio_procp)
273: #define xfs_cnp_to_proc(cnp) ((cnp)->cn_proc)
274: #define xfs_proc_to_cred(p) ((p)->p_ucred)
275: #define xfs_proc_to_euid(p) ((p)->p_ucred->cr_uid)
276: #endif
277:
278: #if defined(__FreeBSD_version) && __FreeBSD_version >= 500043
279: extern const char *VT_AFS;
280: #endif
281:
282: #if defined(__FreeBSD__)
283: typedef void * xfs_malloc_type;
284: #elif defined(__NetBSD__) && __NetBSD_Version__ >= 106140000 /* 1.6N */
285: typedef struct malloc_type * xfs_malloc_type;
286: #else
287: typedef int xfs_malloc_type;
288: #endif
289:
290: #ifdef __APPLE__
291: #define xfs_curproc() (current_proc())
292: #else
293: #if defined(HAVE_FREEBSD_THREAD)
294: #define xfs_curthread() (curthread)
295: #else
296: #define xfs_curproc() (curproc)
297: #endif
298: #endif
299:
300: #ifdef __osf__
301: #define xfs_pushdirty(vp, cred, p)
302: #else
303: void xfs_pushdirty(struct vnode *, struct ucred *, d_thread_t *);
304: #endif
305:
306:
307: #if defined(HAVE_UINTPTR_T) /* c99 enviroment */
308: #define xfs_uintptr_t uintptr_t
309: #else
310: #if defined(_LP64) || defined(alpha) || defined(__alpha__) || defined(__sparc64__) || defined(__sparcv9__)
311: #define xfs_uintptr_t unsigned long long
312: #else /* !LP64 */
313: #define xfs_uintptr_t unsigned long
314: #endif /* LP64 */
315: #endif
316:
317: /*
318: * XXX
319: */
320:
321: #ifndef SCARG
322: #if defined(__FreeBSD_version) && __FreeBSD_version > 500042
323: #define SCARG(a, b) ((a)->b)
324: #define syscallarg(x) x
325: #else
326: #define SCARG(a, b) ((a)->b.datum)
327: #define syscallarg(x) union { x datum; register_t pad; }
328: #endif /* __FreeBSD_version */
329: #endif /* SCARG */
330:
331: #ifndef syscallarg
332: #define syscallarg(x) x
333: #endif
334:
335: #ifndef HAVE_REGISTER_T
336: typedef int register_t;
337: #endif
338:
339: /* malloc(9) waits by default, freebsd post 5.0 choose to remove the flag */
340: #ifndef M_WAITOK
341: #define M_WAITOK 0
342: #endif
343:
344: #if defined(HAVE_DEF_STRUCT_SETGROUPS_ARGS)
345: #define xfs_setgroups_args setgroups_args
346: #elif defined(HAVE_DEF_STRUCT_SYS_SETGROUPS_ARGS)
347: #define xfs_setgroups_args sys_setgroups_args
348: #elif __osf__
349: struct xfs_setgroups_args {
350: syscallarg(int) gidsetsize;
351: syscallarg(gid_t) *gidset;
352: };
353: #elif defined(__APPLE__)
354: struct xfs_setgroups_args{
355: syscallarg(u_int) gidsetsize;
356: syscallarg(gid_t) *gidset;
357: };
358: #else
359: #error what is you setgroups named ?
360: #endif
361:
362:
363: #ifdef HAVE_KERNEL_VFS_GETVFS
364: #define xfs_vfs_getvfs vfs_getvfs
365: #else
366: #define xfs_vfs_getvfs getvfs
367: #endif
368:
369: #ifdef HAVE_FOUR_ARGUMENT_VFS_OBJECT_CREATE
370: #define xfs_vfs_object_create(vp,proc,ucred) vfs_object_create(vp,proc,ucred,TRUE)
371: #else
372: #define xfs_vfs_object_create(vp,proc,ucred) vfs_object_create(vp,proc,ucred)
373: #endif
374:
375: #if defined(UVM) || (defined(__NetBSD__) && __NetBSD_Version__ >= 105280000)
376: #define xfs_set_vp_size(vp, sz) uvm_vnp_setsize(vp, sz)
377: #elif HAVE_KERNEL_VNODE_PAGER_SETSIZE
378: #define xfs_set_vp_size(vp, sz) vnode_pager_setsize(vp, sz)
379: #elif defined(__APPLE__)
380: #define xfs_set_vp_size(vp, sz) ubc_setsize(vp, sz)
381: #else
382: #define xfs_set_vp_size(vp, sz)
383: #endif
384:
385: /* namei flag */
386: #ifdef LOCKLEAF
387: #define NNPFS_LOCKLEAF LOCKLEAF
388: #else
389: #define NNPFS_LOCKLEAF 0
390: #endif
391:
392: #ifdef NEED_VGONEL_PROTO
393: void vgonel (struct vnode *vp, d_thread_t *p);
394: #endif
395:
396: #ifdef NEED_ISSIGNAL_PROTO
397: int issignal (d_thread_t *);
398: #endif
399:
400: #ifdef NEED_STRNCMP_PROTO
401: int strncmp (const char *, const char *, size_t);
402: #endif
403:
404: #ifdef NEED_VN_WRITECHK_PROTO
405: int vn_writechk (struct vnode *);
406: #endif
407:
408: #ifdef NEED_UBC_PUSHDIRTY_PROTO
409: int ubc_pushdirty (struct vnode *);
410: #endif
411:
412: #include <xfs/xfs_syscalls.h>
413:
414: /*
415: * The VOP table
416: *
417: * What VOPs do we have today ?
418: */
419:
420: #define NNPFS_VOP_DEF(n) \
421: struct vop_##n##_args; \
422: int xfs_##n(struct vop_##n##_args *);
423:
424: #include "xfs/xfs_vopdefs.h"
CVSweb