Remove not needed void casts.
[dragonfly.git] / sys / kern / vfs_vopops.c
1 /*
2  * 
3  * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
4  * 
5  * This code is derived from software contributed to The DragonFly Project
6  * by Matthew Dillon <dillon@backplane.com>
7  * 
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in
16  *    the documentation and/or other materials provided with the
17  *    distribution.
18  * 3. Neither the name of The DragonFly Project nor the names of its
19  *    contributors may be used to endorse or promote products derived
20  *    from this software without specific, prior written permission.
21  * 
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
26  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
30  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
31  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
32  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33  * SUCH DAMAGE.
34  * 
35  * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.9 2004/10/12 19:20:46 dillon Exp $
36  */
37
38 #include <sys/param.h>
39 #include <sys/systm.h>
40 #include <sys/buf.h>
41 #include <sys/conf.h>
42 #include <sys/dirent.h>
43 #include <sys/domain.h>
44 #include <sys/eventhandler.h>
45 #include <sys/fcntl.h>
46 #include <sys/kernel.h>
47 #include <sys/kthread.h>
48 #include <sys/malloc.h>
49 #include <sys/mbuf.h>
50 #include <sys/mount.h>
51 #include <sys/proc.h>
52 #include <sys/namei.h>
53 #include <sys/reboot.h>
54 #include <sys/socket.h>
55 #include <sys/stat.h>
56 #include <sys/sysctl.h>
57 #include <sys/syslog.h>
58 #include <sys/vmmeter.h>
59 #include <sys/vnode.h>
60 #include <sys/vfsops.h>
61
62 #include <machine/limits.h>
63
64 #include <vm/vm.h>
65 #include <vm/vm_object.h>
66 #include <vm/vm_extern.h>
67 #include <vm/vm_kern.h>
68 #include <vm/pmap.h>
69 #include <vm/vm_map.h>
70 #include <vm/vm_page.h>
71 #include <vm/vm_pager.h>
72 #include <vm/vnode_pager.h>
73 #include <vm/vm_zone.h>
74
75 #include <sys/buf2.h>
76 #include <sys/thread2.h>
77
78 #define VOFFNAME(name)  __CONCAT(__CONCAT(vop_,name),_vp_offsets)
79 #define VDESCNAME(name) __CONCAT(__CONCAT(vop_,name),_desc)
80 #define VARGSSTRUCT(name) struct __CONCAT(__CONCAT(vop_,name),_args)
81
82 #define VNODEOP_DESC_INIT(name, flags, vpoffs, vpp, cred, proc, comp)   \
83         struct vnodeop_desc VDESCNAME(name) = {                         \
84                 __offsetof(struct vop_ops, __CONCAT(vop_, name)),       \
85                 #name, flags, vpoffs, vpp, cred, proc, comp }
86
87 #define VNODEOP_DESC_INIT_SIMPLE(name)                                  \
88         VNODEOP_DESC_INIT(name, 0, NULL,                                \
89                 VDESC_NO_OFFSET,                                        \
90                 VDESC_NO_OFFSET,                                        \
91                 VDESC_NO_OFFSET,                                        \
92                 VDESC_NO_OFFSET)
93
94 #define VNODEOP_DESC_INIT_VP(name)                                      \
95         static int VOFFNAME(name)[] = {                                 \
96                 __offsetof(VARGSSTRUCT(name), a_vp),                    \
97                 VDESC_NO_OFFSET };                                      \
98         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
99                 VDESC_NO_OFFSET,                                        \
100                 VDESC_NO_OFFSET,                                        \
101                 VDESC_NO_OFFSET,                                        \
102                 VDESC_NO_OFFSET)
103
104 #define VNODEOP_DESC_INIT_VP_VPP(name)                                  \
105         static int VOFFNAME(name)[] = {                                 \
106                 __offsetof(VARGSSTRUCT(name), a_vp),                    \
107                 VDESC_NO_OFFSET };                                      \
108         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
109                 __offsetof(VARGSSTRUCT(name), a_vpp),                   \
110                 VDESC_NO_OFFSET,                                        \
111                 VDESC_NO_OFFSET,                                        \
112                 VDESC_NO_OFFSET)
113
114 #define VNODEOP_DESC_INIT_VP_CRED(name)                                 \
115         static int VOFFNAME(name)[] = {                                 \
116                 __offsetof(VARGSSTRUCT(name), a_vp),                    \
117                 VDESC_NO_OFFSET };                                      \
118         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
119                 VDESC_NO_OFFSET,                                        \
120                 __offsetof(VARGSSTRUCT(name), a_cred),                  \
121                 VDESC_NO_OFFSET,                                        \
122                 VDESC_NO_OFFSET)
123
124 #define VNODEOP_DESC_INIT_NCP(name)                                     \
125         VNODEOP_DESC_INIT(name, 0, NULL,                                \
126                 VDESC_NO_OFFSET,                                        \
127                 VDESC_NO_OFFSET,                                        \
128                 VDESC_NO_OFFSET,                                        \
129                 VDESC_NO_OFFSET)
130
131 #define VNODEOP_DESC_INIT_NCP_CRED(name)                                \
132         VNODEOP_DESC_INIT(name, 0, NULL,                                \
133                 VDESC_NO_OFFSET,                                        \
134                 __offsetof(VARGSSTRUCT(name), a_cred),                  \
135                 VDESC_NO_OFFSET,                                        \
136                 VDESC_NO_OFFSET)
137
138 #define VNODEOP_DESC_INIT_DVP_VPP_CNP(name)                             \
139         static int VOFFNAME(name)[] = {                                 \
140                 __offsetof(VARGSSTRUCT(name), a_dvp),                   \
141                 VDESC_NO_OFFSET };                                      \
142         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
143                 __offsetof(VARGSSTRUCT(name), a_vpp),                   \
144                 VDESC_NO_OFFSET,                                        \
145                 VDESC_NO_OFFSET,                                        \
146                 __offsetof(VARGSSTRUCT(name), a_cnp))
147
148 #define VNODEOP_DESC_INIT_DVP_CNP(name)                                 \
149         static int VOFFNAME(name)[] = {                                 \
150                 __offsetof(VARGSSTRUCT(name), a_dvp),                   \
151                 VDESC_NO_OFFSET };                                      \
152         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
153                 VDESC_NO_OFFSET,                                        \
154                 VDESC_NO_OFFSET,                                        \
155                 VDESC_NO_OFFSET,                                        \
156                 __offsetof(VARGSSTRUCT(name), a_cnp))
157
158 #define VNODEOP_DESC_INIT_DVP_VP_CNP(name)                              \
159         static int VOFFNAME(name)[] = {                                 \
160                 __offsetof(VARGSSTRUCT(name), a_dvp),                   \
161                 __offsetof(VARGSSTRUCT(name), a_vp),                    \
162                 VDESC_NO_OFFSET };                                      \
163         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
164                 VDESC_NO_OFFSET,                                        \
165                 VDESC_NO_OFFSET,                                        \
166                 VDESC_NO_OFFSET,                                        \
167                 __offsetof(VARGSSTRUCT(name), a_cnp))
168
169 #define VNODEOP_DESC_INIT_TDVP_VP_CNP(name)                             \
170         static int VOFFNAME(name)[] = {                                 \
171                 __offsetof(VARGSSTRUCT(name), a_tdvp),                  \
172                 __offsetof(VARGSSTRUCT(name), a_vp),                    \
173                 VDESC_NO_OFFSET };                                      \
174         VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
175                 VDESC_NO_OFFSET,                                        \
176                 VDESC_NO_OFFSET,                                        \
177                 VDESC_NO_OFFSET,                                        \
178                 __offsetof(VARGSSTRUCT(name), a_cnp))
179
180 VNODEOP_DESC_INIT_SIMPLE(default);
181 VNODEOP_DESC_INIT_VP(islocked);
182 VNODEOP_DESC_INIT_NCP_CRED(resolve);
183 VNODEOP_DESC_INIT_DVP_VPP_CNP(lookup);
184 VNODEOP_DESC_INIT_DVP_VPP_CNP(cachedlookup);
185 VNODEOP_DESC_INIT_DVP_VPP_CNP(create);
186 VNODEOP_DESC_INIT_DVP_CNP(whiteout);
187 VNODEOP_DESC_INIT_DVP_VPP_CNP(mknod);
188 VNODEOP_DESC_INIT_VP_CRED(open);
189 VNODEOP_DESC_INIT_VP(close);
190 VNODEOP_DESC_INIT_VP_CRED(access);
191 VNODEOP_DESC_INIT_VP(getattr);
192 VNODEOP_DESC_INIT_VP_CRED(setattr);
193 VNODEOP_DESC_INIT_VP_CRED(read);
194 VNODEOP_DESC_INIT_VP_CRED(write);
195 VNODEOP_DESC_INIT_VP_CRED(lease);
196 VNODEOP_DESC_INIT_VP_CRED(ioctl);
197 VNODEOP_DESC_INIT_VP_CRED(poll);
198 VNODEOP_DESC_INIT_VP(kqfilter);
199 VNODEOP_DESC_INIT_VP(revoke);
200 VNODEOP_DESC_INIT_VP_CRED(mmap);
201 VNODEOP_DESC_INIT_VP(fsync);
202 VNODEOP_DESC_INIT_DVP_VP_CNP(remove);
203 VNODEOP_DESC_INIT_NCP_CRED(nremove);
204 VNODEOP_DESC_INIT_TDVP_VP_CNP(link);
205
206 static int VOFFNAME(rename)[] = { 
207         __offsetof(VARGSSTRUCT(rename), a_fdvp),
208         __offsetof(VARGSSTRUCT(rename), a_fvp),
209         __offsetof(VARGSSTRUCT(rename), a_tdvp),
210         __offsetof(VARGSSTRUCT(rename), a_tvp),
211         VDESC_NO_OFFSET
212 };
213 VNODEOP_DESC_INIT(rename, 
214         VDESC_VP0_WILLRELE|VDESC_VP1_WILLRELE|
215          VDESC_VP2_WILLRELE|VDESC_VP3_WILLRELE|
216          VDESC_VP2_WILLUNLOCK|VDESC_VP3_WILLUNLOCK, /* tdvp and tvp */
217         VOFFNAME(rename),
218         VDESC_NO_OFFSET,
219         VDESC_NO_OFFSET,
220         VDESC_NO_OFFSET,
221         __offsetof(VARGSSTRUCT(rename), a_fcnp));
222 VNODEOP_DESC_INIT_DVP_VPP_CNP(mkdir);
223 VNODEOP_DESC_INIT_DVP_VP_CNP(rmdir);
224 VNODEOP_DESC_INIT_DVP_VPP_CNP(symlink);
225 VNODEOP_DESC_INIT_VP_CRED(readdir);
226 VNODEOP_DESC_INIT_VP_CRED(readlink);
227 VNODEOP_DESC_INIT_VP(inactive);
228 VNODEOP_DESC_INIT_VP(reclaim);
229 VNODEOP_DESC_INIT_VP(lock);
230 VNODEOP_DESC_INIT_VP(unlock);
231 VNODEOP_DESC_INIT_VP_VPP(bmap);
232 VNODEOP_DESC_INIT_VP(strategy);
233 VNODEOP_DESC_INIT_VP(print);
234 VNODEOP_DESC_INIT_VP(pathconf);
235 VNODEOP_DESC_INIT_VP(advlock);
236 VNODEOP_DESC_INIT_VP_CRED(balloc);
237 VNODEOP_DESC_INIT_VP(reallocblks);
238 VNODEOP_DESC_INIT_VP(getpages);
239 VNODEOP_DESC_INIT_VP(putpages);
240 VNODEOP_DESC_INIT_VP(freeblks);
241 VNODEOP_DESC_INIT_VP(bwrite);
242 VNODEOP_DESC_INIT_VP_CRED(getacl);
243 VNODEOP_DESC_INIT_VP_CRED(setacl);
244 VNODEOP_DESC_INIT_VP_CRED(aclcheck);
245 VNODEOP_DESC_INIT_VP_CRED(getextattr);
246 VNODEOP_DESC_INIT_VP_CRED(setextattr);
247 VNODEOP_DESC_INIT_VP(createvobject);
248 VNODEOP_DESC_INIT_VP(destroyvobject);
249 VNODEOP_DESC_INIT_VP(getvobject);
250 VNODEOP_DESC_INIT_SIMPLE(vfsset);
251
252 /*
253  * The DO_OPS macro basicallys calls ops->blah(&ap) but is also responsible
254  * for checking vv_flags and executing additional hook functions.
255  *
256  * NOTE: vop_vnoperate_ap() rolls its own DO_OPS equivalent.
257  */
258 #define DO_OPS(ops, error, ap, vop_field)                               \
259         if (ops->vv_flags & VVF_HOOK_MASK) {                            \
260                 if (ops->vv_flags & VVF_JOURNAL_HOOK)                   \
261                         error = ops->vv_jops->vop_field(ap);            \
262                 else                                                    \
263                         error = 0;                                      \
264                 if (error == 0)                                         \
265                         error = ops->vop_field(ap);                     \
266         } else {                                                        \
267                 error = ops->vop_field(ap);                             \
268         }                                                               \
269
270
271 /************************************************************************
272  *              PRIMARY HIGH LEVEL VNODE OPERATIONS CALLS               *
273  ************************************************************************
274  *
275  * These procedures are called directly from the kernel and/or fileops 
276  * code to perform file/device operations on the system.
277  */
278
279 int
280 vop_islocked(struct vop_ops *ops, struct vnode *vp, struct thread *td)
281 {
282         struct vop_islocked_args ap;
283         int error;
284
285         ap.a_head.a_desc = &vop_islocked_desc;
286         ap.a_head.a_ops = ops;
287         ap.a_vp = vp;
288         ap.a_td = td;
289
290         DO_OPS(ops, error, &ap, vop_islocked);
291         return(error);
292 }
293
294 int
295 vop_resolve(struct vop_ops *ops, struct namecache *ncp, struct ucred *cred)
296 {
297         struct vop_resolve_args ap;
298         int error;
299
300         ap.a_head.a_desc = &vop_resolve_desc;
301         ap.a_head.a_ops = ops;
302         ap.a_ncp = ncp;
303         ap.a_cred = cred;
304
305         DO_OPS(ops, error, &ap, vop_resolve);
306         return(error);
307 }
308
309 int
310 vop_lookup(struct vop_ops *ops, struct vnode *dvp,
311         struct vnode **vpp, struct componentname *cnp)
312 {
313         struct vop_lookup_args ap;
314         int error;
315
316         ap.a_head.a_desc = &vop_lookup_desc;
317         ap.a_head.a_ops = ops;
318         ap.a_dvp = dvp;
319         ap.a_vpp = vpp;
320         ap.a_cnp = cnp;
321
322         DO_OPS(ops, error, &ap, vop_lookup);
323         return(error);
324 }
325
326 int
327 vop_cachedlookup(struct vop_ops *ops, struct vnode *dvp,
328         struct vnode **vpp, struct componentname *cnp)
329 {
330         struct vop_cachedlookup_args ap;
331         int error;
332
333         ap.a_head.a_desc = &vop_cachedlookup_desc;
334         ap.a_head.a_ops = ops;
335         ap.a_dvp = dvp;
336         ap.a_vpp = vpp;
337         ap.a_cnp = cnp;
338
339         DO_OPS(ops, error, &ap, vop_cachedlookup);
340         return(error);
341 }
342
343 int
344 vop_create(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
345         struct vnode **vpp, struct componentname *cnp, struct vattr *vap)
346 {
347         struct vop_create_args ap;
348         int error;
349
350         ap.a_head.a_desc = &vop_create_desc;
351         ap.a_head.a_ops = ops;
352         ap.a_dvp = dvp;
353         ap.a_par = par;
354         ap.a_vpp = vpp;
355         ap.a_cnp = cnp;
356         ap.a_vap = vap;
357
358         DO_OPS(ops, error, &ap, vop_create);
359         return(error);
360 }
361
362 int
363 vop_whiteout(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
364         struct componentname *cnp, int flags)
365 {
366         struct vop_whiteout_args ap;
367         int error;
368
369         ap.a_head.a_desc = &vop_whiteout_desc;
370         ap.a_head.a_ops = ops;
371         ap.a_dvp = dvp;
372         ap.a_par = par;
373         ap.a_cnp = cnp;
374         ap.a_flags = flags;
375
376         DO_OPS(ops, error, &ap, vop_whiteout);
377         return(error);
378 }
379
380 int
381 vop_mknod(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
382         struct vnode **vpp, struct componentname *cnp, struct vattr *vap)
383 {
384         struct vop_mknod_args ap;
385         int error;
386
387         ap.a_head.a_desc = &vop_mknod_desc;
388         ap.a_head.a_ops = ops;
389         ap.a_dvp = dvp;
390         ap.a_par = par;
391         ap.a_vpp = vpp;
392         ap.a_cnp = cnp;
393         ap.a_vap = vap;
394
395         DO_OPS(ops, error, &ap, vop_mknod);
396         return(error);
397 }
398
399 int
400 vop_open(struct vop_ops *ops, struct vnode *vp, int mode, struct ucred *cred,
401         struct thread *td)
402 {
403         struct vop_open_args ap;
404         int error;
405
406         ap.a_head.a_desc = &vop_open_desc;
407         ap.a_head.a_ops = ops;
408         ap.a_vp = vp;
409         ap.a_mode = mode;
410         ap.a_cred = cred;
411         ap.a_td = td;
412
413         DO_OPS(ops, error, &ap, vop_open);
414         return(error);
415 }
416
417 int
418 vop_close(struct vop_ops *ops, struct vnode *vp, int fflag, struct thread *td)
419 {
420         struct vop_close_args ap;
421         int error;
422
423         ap.a_head.a_desc = &vop_close_desc;
424         ap.a_head.a_ops = ops;
425         ap.a_vp = vp;
426         ap.a_fflag = fflag;
427         ap.a_td = td;
428
429         DO_OPS(ops, error, &ap, vop_close);
430         return(error);
431 }
432
433 int
434 vop_access(struct vop_ops *ops, struct vnode *vp, int mode, struct ucred *cred,
435         struct thread *td)
436 {
437         struct vop_access_args ap;
438         int error;
439
440         ap.a_head.a_desc = &vop_access_desc;
441         ap.a_head.a_ops = ops;
442         ap.a_vp = vp;
443         ap.a_mode = mode;
444         ap.a_cred = cred;
445         ap.a_td = td;
446
447         DO_OPS(ops, error, &ap, vop_access);
448         return(error);
449 }
450
451 int
452 vop_getattr(struct vop_ops *ops, struct vnode *vp, struct vattr *vap,
453         struct thread *td)
454 {
455         struct vop_getattr_args ap;
456         int error;
457
458         ap.a_head.a_desc = &vop_getattr_desc;
459         ap.a_head.a_ops = ops;
460         ap.a_vp = vp;
461         ap.a_vap = vap;
462         ap.a_td = td;
463
464         DO_OPS(ops, error, &ap, vop_getattr);
465         return(error);
466 }
467
468 int
469 vop_setattr(struct vop_ops *ops, struct vnode *vp, struct vattr *vap,
470         struct ucred *cred, struct thread *td)
471 {
472         struct vop_setattr_args ap;
473         int error;
474
475         ap.a_head.a_desc = &vop_setattr_desc;
476         ap.a_head.a_ops = ops;
477         ap.a_vp = vp;
478         ap.a_vap = vap;
479         ap.a_cred = cred;
480         ap.a_td = td;
481
482         DO_OPS(ops, error, &ap, vop_setattr);
483         return(error);
484 }
485
486 int
487 vop_read(struct vop_ops *ops, struct vnode *vp, struct uio *uio, int ioflag,
488         struct ucred *cred)
489 {
490         struct vop_read_args ap;
491         int error;
492
493         ap.a_head.a_desc = &vop_read_desc;
494         ap.a_head.a_ops = ops;
495         ap.a_vp = vp;
496         ap.a_uio = uio;
497         ap.a_ioflag = ioflag;
498         ap.a_cred = cred;
499
500         DO_OPS(ops, error, &ap, vop_read);
501         return(error);
502 }
503
504 int
505 vop_write(struct vop_ops *ops, struct vnode *vp, struct uio *uio, int ioflag,
506         struct ucred *cred)
507 {
508         struct vop_write_args ap;
509         int error;
510
511         ap.a_head.a_desc = &vop_write_desc;
512         ap.a_head.a_ops = ops;
513         ap.a_vp = vp;
514         ap.a_uio = uio;
515         ap.a_ioflag = ioflag;
516         ap.a_cred = cred;
517
518         DO_OPS(ops, error, &ap, vop_write);
519         return(error);
520 }
521
522 int
523 vop_lease(struct vop_ops *ops, struct vnode *vp, struct thread *td,
524         struct ucred *cred, int flag)
525 {
526         struct vop_lease_args ap;
527         int error;
528
529         ap.a_head.a_desc = &vop_lease_desc;
530         ap.a_head.a_ops = ops;
531         ap.a_vp = vp;
532         ap.a_td = td;
533         ap.a_cred = cred;
534         ap.a_flag = flag;
535
536         DO_OPS(ops, error, &ap, vop_lease);
537         return(error);
538 }
539
540 int
541 vop_ioctl(struct vop_ops *ops, struct vnode *vp, u_long command, caddr_t data,
542         int fflag, struct ucred *cred,
543         struct thread *td)
544 {
545         struct vop_ioctl_args ap;
546         int error;
547
548         ap.a_head.a_desc = &vop_ioctl_desc;
549         ap.a_head.a_ops = ops;
550         ap.a_vp = vp;
551         ap.a_command = command;
552         ap.a_data = data;
553         ap.a_fflag = fflag;
554         ap.a_cred = cred;
555         ap.a_td = td;
556
557         DO_OPS(ops, error, &ap, vop_ioctl);
558         return(error);
559 }
560
561 int
562 vop_poll(struct vop_ops *ops, struct vnode *vp, int events, struct ucred *cred,
563         struct thread *td)
564 {
565         struct vop_poll_args ap;
566         int error;
567
568         ap.a_head.a_desc = &vop_poll_desc;
569         ap.a_head.a_ops = ops;
570         ap.a_vp = vp;
571         ap.a_events = events;
572         ap.a_cred = cred;
573         ap.a_td = td;
574
575         DO_OPS(ops, error, &ap, vop_poll);
576         return(error);
577 }
578
579 int
580 vop_kqfilter(struct vop_ops *ops, struct vnode *vp, struct knote *kn)
581 {
582         struct vop_kqfilter_args ap;
583         int error;
584
585         ap.a_head.a_desc = &vop_kqfilter_desc;
586         ap.a_head.a_ops = ops;
587         ap.a_vp = vp;
588         ap.a_kn = kn;
589
590         DO_OPS(ops, error, &ap, vop_kqfilter);
591         return(error);
592 }
593
594 int
595 vop_revoke(struct vop_ops *ops, struct vnode *vp, int flags)
596 {
597         struct vop_revoke_args ap;
598         int error;
599
600         ap.a_head.a_desc = &vop_revoke_desc;
601         ap.a_head.a_ops = ops;
602         ap.a_vp = vp;
603         ap.a_flags = flags;
604
605         DO_OPS(ops, error, &ap, vop_revoke);
606         return(error);
607 }
608
609 int
610 vop_mmap(struct vop_ops *ops, struct vnode *vp, int fflags, struct ucred *cred,
611         struct thread *td)
612 {
613         struct vop_mmap_args ap;
614         int error;
615
616         ap.a_head.a_desc = &vop_mmap_desc;
617         ap.a_head.a_ops = ops;
618         ap.a_vp = vp;
619         ap.a_fflags = fflags;
620         ap.a_cred = cred;
621         ap.a_td = td;
622
623         DO_OPS(ops, error, &ap, vop_mmap);
624         return(error);
625 }
626
627 int
628 vop_fsync(struct vop_ops *ops, struct vnode *vp, int waitfor, struct thread *td)
629 {
630         struct vop_fsync_args ap;
631         int error;
632
633         ap.a_head.a_desc = &vop_fsync_desc;
634         ap.a_head.a_ops = ops;
635         ap.a_vp = vp;
636         ap.a_waitfor = waitfor;
637         ap.a_td = td;
638
639         DO_OPS(ops, error, &ap, vop_fsync);
640         return(error);
641 }
642
643 int
644 vop_remove(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
645         struct vnode *vp, struct componentname *cnp)
646 {
647         struct vop_remove_args ap;
648         int error;
649
650         ap.a_head.a_desc = &vop_remove_desc;
651         ap.a_head.a_ops = ops;
652         ap.a_dvp = dvp;
653         ap.a_par = par;
654         ap.a_vp = vp;
655         ap.a_cnp = cnp;
656
657         DO_OPS(ops, error, &ap, vop_remove);
658         return(error);
659 }
660
661 int
662 vop_nremove(struct vop_ops *ops, struct namecache *ncp, struct ucred *cred)
663 {
664         struct vop_nremove_args ap;
665         int error;
666
667         ap.a_head.a_desc = &vop_nremove_desc;
668         ap.a_head.a_ops = ops;
669         ap.a_ncp = ncp;
670         ap.a_cred = cred;
671
672         DO_OPS(ops, error, &ap, vop_nremove);
673         return(error);
674 }
675
676 int
677 vop_link(struct vop_ops *ops, struct vnode *tdvp, struct namecache *par,
678         struct vnode *vp, struct componentname *cnp)
679 {
680         struct vop_link_args ap;
681         int error;
682
683         ap.a_head.a_desc = &vop_link_desc;
684         ap.a_head.a_ops = ops;
685         ap.a_tdvp = tdvp;
686         ap.a_par = par;
687         ap.a_vp = vp;
688         ap.a_cnp = cnp;
689
690         DO_OPS(ops, error, &ap, vop_link);
691         return(error);
692 }
693
694 int
695 vop_rename(struct vop_ops *ops, struct vnode *fdvp, struct namecache *fpar,
696         struct vnode *fvp, struct componentname *fcnp,
697         struct vnode *tdvp, struct namecache *tpar,
698         struct vnode *tvp, struct componentname *tcnp)
699 {
700         struct vop_rename_args ap;
701         int error;
702
703         ap.a_head.a_desc = &vop_rename_desc;
704         ap.a_head.a_ops = ops;
705         ap.a_fdvp = fdvp;
706         ap.a_fpar = fpar;
707         ap.a_fvp = fvp;
708         ap.a_fcnp = fcnp;
709         ap.a_tdvp = tdvp;
710         ap.a_tpar = tpar;
711         ap.a_tvp = tvp;
712         ap.a_tcnp = tcnp;
713
714         DO_OPS(ops, error, &ap, vop_rename);
715         return(error);
716 }
717
718 int
719 vop_mkdir(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
720         struct vnode **vpp, struct componentname *cnp, struct vattr *vap)
721 {
722         struct vop_mkdir_args ap;
723         int error;
724
725         ap.a_head.a_desc = &vop_mkdir_desc;
726         ap.a_head.a_ops = ops;
727         ap.a_dvp = dvp;
728         ap.a_par = par;
729         ap.a_vpp = vpp;
730         ap.a_cnp = cnp;
731         ap.a_vap = vap;
732
733         DO_OPS(ops, error, &ap, vop_mkdir);
734         return(error);
735 }
736
737 int
738 vop_rmdir(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
739         struct vnode *vp, struct componentname *cnp)
740 {
741         struct vop_rmdir_args ap;
742         int error;
743
744         ap.a_head.a_desc = &vop_rmdir_desc;
745         ap.a_head.a_ops = ops;
746         ap.a_dvp = dvp;
747         ap.a_par = par;
748         ap.a_vp = vp;
749         ap.a_cnp = cnp;
750
751         DO_OPS(ops, error, &ap, vop_rmdir);
752         return(error);
753 }
754
755 int
756 vop_symlink(struct vop_ops *ops, struct vnode *dvp, struct namecache *par,
757         struct vnode **vpp, struct componentname *cnp,
758         struct vattr *vap, char *target)
759 {
760         struct vop_symlink_args ap;
761         int error;
762
763         ap.a_head.a_desc = &vop_symlink_desc;
764         ap.a_head.a_ops = ops;
765         ap.a_dvp = dvp;
766         ap.a_par = par;
767         ap.a_vpp = vpp;
768         ap.a_cnp = cnp;
769         ap.a_vap = vap;
770         ap.a_target = target;
771
772         DO_OPS(ops, error, &ap, vop_symlink);
773         return(error);
774 }
775
776 int
777 vop_readdir(struct vop_ops *ops, struct vnode *vp, struct uio *uio,
778         struct ucred *cred, int *eofflag, int *ncookies, u_long **cookies)
779 {
780         struct vop_readdir_args ap;
781         int error;
782
783         ap.a_head.a_desc = &vop_readdir_desc;
784         ap.a_head.a_ops = ops;
785         ap.a_vp = vp;
786         ap.a_uio = uio;
787         ap.a_cred = cred;
788         ap.a_eofflag = eofflag;
789         ap.a_ncookies = ncookies;
790         ap.a_cookies = cookies;
791
792         DO_OPS(ops, error, &ap, vop_readdir);
793         return(error);
794 }
795
796 int
797 vop_readlink(struct vop_ops *ops, struct vnode *vp, struct uio *uio,
798         struct ucred *cred)
799 {
800         struct vop_readlink_args ap;
801         int error;
802
803         ap.a_head.a_desc = &vop_readlink_desc;
804         ap.a_head.a_ops = ops;
805         ap.a_vp = vp;
806         ap.a_uio = uio;
807         ap.a_cred = cred;
808
809         DO_OPS(ops, error, &ap, vop_readlink);
810         return(error);
811 }
812
813 int
814 vop_inactive(struct vop_ops *ops, struct vnode *vp, struct thread *td)
815 {
816         struct vop_inactive_args ap;
817         int error;
818
819         ap.a_head.a_desc = &vop_inactive_desc;
820         ap.a_head.a_ops = ops;
821         ap.a_vp = vp;
822         ap.a_td = td;
823
824         DO_OPS(ops, error, &ap, vop_inactive);
825         return(error);
826 }
827
828 int
829 vop_reclaim(struct vop_ops *ops, struct vnode *vp, struct thread *td)
830 {
831         struct vop_reclaim_args ap;
832         int error;
833
834         ap.a_head.a_desc = &vop_reclaim_desc;
835         ap.a_head.a_ops = ops;
836         ap.a_vp = vp;
837         ap.a_td = td;
838
839         DO_OPS(ops, error, &ap, vop_reclaim);
840         return(error);
841 }
842
843 int
844 vop_lock(struct vop_ops *ops, struct vnode *vp, int flags, struct thread *td)
845 {
846         struct vop_lock_args ap;
847         int error;
848
849         ap.a_head.a_desc = &vop_lock_desc;
850         ap.a_head.a_ops = ops;
851         ap.a_vp = vp;
852         ap.a_flags = flags;
853         ap.a_td = td;
854
855         DO_OPS(ops, error, &ap, vop_lock);
856         return(error);
857 }
858
859 int
860 vop_unlock(struct vop_ops *ops, struct vnode *vp, int flags, struct thread *td)
861 {
862         struct vop_unlock_args ap;
863         int error;
864
865         ap.a_head.a_desc = &vop_unlock_desc;
866         ap.a_head.a_ops = ops;
867         ap.a_vp = vp;
868         ap.a_flags = flags;
869         ap.a_td = td;
870
871         DO_OPS(ops, error, &ap, vop_unlock);
872         return(error);
873 }
874
875 int
876 vop_bmap(struct vop_ops *ops, struct vnode *vp, daddr_t bn, struct vnode **vpp,
877         daddr_t *bnp, int *runp, int *runb)
878 {
879         struct vop_bmap_args ap;
880         int error;
881
882         ap.a_head.a_desc = &vop_bmap_desc;
883         ap.a_head.a_ops = ops;
884         ap.a_vp = vp;
885         ap.a_bn = bn;
886         ap.a_vpp = vpp;
887         ap.a_bnp = bnp;
888         ap.a_runp = runp;
889         ap.a_runb = runb;
890
891         DO_OPS(ops, error, &ap, vop_bmap);
892         return(error);
893 }
894
895 int
896 vop_strategy(struct vop_ops *ops, struct vnode *vp, struct buf *bp)
897 {
898         struct vop_strategy_args ap;
899         int error;
900
901         ap.a_head.a_desc = &vop_strategy_desc;
902         ap.a_head.a_ops = ops;
903         ap.a_vp = vp;
904         ap.a_bp = bp;
905
906         DO_OPS(ops, error, &ap, vop_strategy);
907         return(error);
908 }
909
910 int
911 vop_print(struct vop_ops *ops, struct vnode *vp)
912 {
913         struct vop_print_args ap;
914         int error;
915
916         ap.a_head.a_desc = &vop_print_desc;
917         ap.a_head.a_ops = ops;
918         ap.a_vp = vp;
919
920         DO_OPS(ops, error, &ap, vop_print);
921         return(error);
922 }
923
924 int
925 vop_pathconf(struct vop_ops *ops, struct vnode *vp, int name,
926         register_t *retval)
927 {
928         struct vop_pathconf_args ap;
929         int error;
930
931         ap.a_head.a_desc = &vop_pathconf_desc;
932         ap.a_head.a_ops = ops;
933         ap.a_vp = vp;
934         ap.a_name = name;
935         ap.a_retval = retval;
936
937         DO_OPS(ops, error, &ap, vop_pathconf);
938         return(error);
939 }
940
941 int
942 vop_advlock(struct vop_ops *ops, struct vnode *vp, caddr_t id, int op,
943         struct flock *fl, int flags)
944 {
945         struct vop_advlock_args ap;
946         int error;
947
948         ap.a_head.a_desc = &vop_advlock_desc;
949         ap.a_head.a_ops = ops;
950         ap.a_vp = vp;
951         ap.a_id = id;
952         ap.a_op = op;
953         ap.a_fl = fl;
954         ap.a_flags = flags;
955
956         DO_OPS(ops, error, &ap, vop_advlock);
957         return(error);
958 }
959
960 int
961 vop_balloc(struct vop_ops *ops, struct vnode *vp, off_t startoffset,
962         int size, struct ucred *cred, int flags,
963         struct buf **bpp)
964 {
965         struct vop_balloc_args ap;
966         int error;
967
968         ap.a_head.a_desc = &vop_balloc_desc;
969         ap.a_head.a_ops = ops;
970         ap.a_vp = vp;
971         ap.a_startoffset = startoffset;
972         ap.a_size = size;
973         ap.a_cred = cred;
974         ap.a_flags = flags;
975         ap.a_bpp = bpp;
976
977         DO_OPS(ops, error, &ap, vop_balloc);
978         return(error);
979 }
980
981 int
982 vop_reallocblks(struct vop_ops *ops, struct vnode *vp,
983         struct cluster_save *buflist)
984 {
985         struct vop_reallocblks_args ap;
986         int error;
987
988         ap.a_head.a_desc = &vop_reallocblks_desc;
989         ap.a_head.a_ops = ops;
990         ap.a_vp = vp;
991         ap.a_buflist = buflist;
992
993         DO_OPS(ops, error, &ap, vop_reallocblks);
994         return(error);
995 }
996
997 int
998 vop_getpages(struct vop_ops *ops, struct vnode *vp, vm_page_t *m, int count,
999         int reqpage, vm_ooffset_t offset)
1000 {
1001         struct vop_getpages_args ap;
1002         int error;
1003
1004         ap.a_head.a_desc = &vop_getpages_desc;
1005         ap.a_head.a_ops = ops;
1006         ap.a_vp = vp;
1007         ap.a_m = m;
1008         ap.a_count = count;
1009         ap.a_reqpage = reqpage;
1010         ap.a_offset = offset;
1011
1012         DO_OPS(ops, error, &ap, vop_getpages);
1013         return(error);
1014 }
1015
1016 int
1017 vop_putpages(struct vop_ops *ops, struct vnode *vp, vm_page_t *m, int count,
1018         int sync, int *rtvals, vm_ooffset_t offset)
1019 {
1020         struct vop_putpages_args ap;
1021         int error;
1022
1023         ap.a_head.a_desc = &vop_putpages_desc;
1024         ap.a_head.a_ops = ops;
1025         ap.a_vp = vp;
1026         ap.a_m = m;
1027         ap.a_count = count;
1028         ap.a_sync = sync;
1029         ap.a_rtvals = rtvals;
1030         ap.a_offset = offset;
1031
1032         DO_OPS(ops, error, &ap, vop_putpages);
1033         return(error);
1034 }
1035
1036 int
1037 vop_freeblks(struct vop_ops *ops, struct vnode *vp,
1038         daddr_t addr, daddr_t length)
1039 {
1040         struct vop_freeblks_args ap;
1041         int error;
1042
1043         ap.a_head.a_desc = &vop_freeblks_desc;
1044         ap.a_head.a_ops = ops;
1045         ap.a_vp = vp;
1046         ap.a_addr = addr;
1047         ap.a_length = length;
1048
1049         DO_OPS(ops, error, &ap, vop_freeblks);
1050         return(error);
1051 }
1052
1053 int
1054 vop_bwrite(struct vop_ops *ops, struct vnode *vp, struct buf *bp)
1055 {
1056         struct vop_bwrite_args ap;
1057         int error;
1058
1059         ap.a_head.a_desc = &vop_bwrite_desc;
1060         ap.a_head.a_ops = ops;
1061         ap.a_vp = vp;
1062         ap.a_bp = bp;
1063
1064         DO_OPS(ops, error, &ap, vop_bwrite);
1065         return(error);
1066 }
1067
1068 int
1069 vop_getacl(struct vop_ops *ops, struct vnode *vp, acl_type_t type,
1070         struct acl *aclp, struct ucred *cred, struct thread *td)
1071 {
1072         struct vop_getacl_args ap;
1073         int error;
1074
1075         ap.a_head.a_desc = &vop_getacl_desc;
1076         ap.a_head.a_ops = ops;
1077         ap.a_vp = vp;
1078         ap.a_type = type;
1079         ap.a_aclp = aclp;
1080         ap.a_cred = cred;
1081         ap.a_td = td;
1082
1083         DO_OPS(ops, error, &ap, vop_getacl);
1084         return(error);
1085 }
1086
1087 int
1088 vop_setacl(struct vop_ops *ops, struct vnode *vp, acl_type_t type,
1089         struct acl *aclp, struct ucred *cred, struct thread *td)
1090 {
1091         struct vop_setacl_args ap;
1092         int error;
1093
1094         ap.a_head.a_desc = &vop_setacl_desc;
1095         ap.a_head.a_ops = ops;
1096         ap.a_vp = vp;
1097         ap.a_type = type;
1098         ap.a_aclp = aclp;
1099         ap.a_cred = cred;
1100         ap.a_td = td;
1101
1102         DO_OPS(ops, error, &ap, vop_setacl);
1103         return(error);
1104 }
1105
1106 int
1107 vop_aclcheck(struct vop_ops *ops, struct vnode *vp, acl_type_t type,
1108         struct acl *aclp, struct ucred *cred, struct thread *td)
1109 {
1110         struct vop_aclcheck_args ap;
1111         int error;
1112
1113         ap.a_head.a_desc = &vop_aclcheck_desc;
1114         ap.a_head.a_ops = ops;
1115         ap.a_vp = vp;
1116         ap.a_type = type;
1117         ap.a_aclp = aclp;
1118         ap.a_cred = cred;
1119         ap.a_td = td;
1120
1121         DO_OPS(ops, error, &ap, vop_aclcheck);
1122         return(error);
1123 }
1124
1125 int
1126 vop_getextattr(struct vop_ops *ops, struct vnode *vp, char *name, 
1127         struct uio *uio, struct ucred *cred, struct thread *td)
1128 {
1129         struct vop_getextattr_args ap;
1130         int error;
1131
1132         ap.a_head.a_desc = &vop_getextattr_desc;
1133         ap.a_head.a_ops = ops;
1134         ap.a_vp = vp;
1135         ap.a_name = name;
1136         ap.a_uio = uio;
1137         ap.a_cred = cred;
1138         ap.a_td = td;
1139
1140         DO_OPS(ops, error, &ap, vop_getextattr);
1141         return(error);
1142 }
1143
1144 int
1145 vop_setextattr(struct vop_ops *ops, struct vnode *vp, char *name, 
1146         struct uio *uio, struct ucred *cred, struct thread *td)
1147 {
1148         struct vop_setextattr_args ap;
1149         int error;
1150
1151         ap.a_head.a_desc = &vop_setextattr_desc;
1152         ap.a_head.a_ops = ops;
1153         ap.a_vp = vp;
1154         ap.a_name = name;
1155         ap.a_uio = uio;
1156         ap.a_cred = cred;
1157         ap.a_td = td;
1158
1159         DO_OPS(ops, error, &ap, vop_setextattr);
1160         return(error);
1161 }
1162
1163 int
1164 vop_createvobject(struct vop_ops *ops, struct vnode *vp, struct thread *td)
1165 {
1166         struct vop_createvobject_args ap;
1167         int error;
1168
1169         ap.a_head.a_desc = &vop_createvobject_desc;
1170         ap.a_head.a_ops = ops;
1171         ap.a_vp = vp;
1172         ap.a_td = td;
1173
1174         DO_OPS(ops, error, &ap, vop_createvobject);
1175         return(error);
1176 }
1177
1178 int
1179 vop_destroyvobject(struct vop_ops *ops, struct vnode *vp)
1180 {
1181         struct vop_destroyvobject_args ap;
1182         int error;
1183
1184         ap.a_head.a_desc = &vop_destroyvobject_desc;
1185         ap.a_head.a_ops = ops;
1186         ap.a_vp = vp;
1187
1188         DO_OPS(ops, error, &ap, vop_destroyvobject);
1189         return(error);
1190 }
1191
1192 int
1193 vop_getvobject(struct vop_ops *ops, struct vnode *vp, struct vm_object **objpp)
1194 {
1195         struct vop_getvobject_args ap;
1196         int error;
1197
1198         ap.a_head.a_desc = &vop_getvobject_desc;
1199         ap.a_head.a_ops = ops;
1200         ap.a_vp = vp;
1201         ap.a_objpp = objpp;
1202
1203         DO_OPS(ops, error, &ap, vop_getvobject);
1204         return(error);
1205 }
1206
1207 int
1208 vop_vfsset(struct vop_ops *ops, int op, const char *opstr)
1209 {
1210         struct vop_vfsset_args ap;
1211         int error;
1212
1213         ap.a_head.a_desc = &vop_vfsset_desc;
1214         ap.a_head.a_ops = ops;
1215         ap.a_op = op;
1216         ap.a_opstr = opstr;
1217
1218         DO_OPS(ops, error, &ap, vop_vfsset);
1219         return(error);
1220 }
1221
1222 /************************************************************************
1223  *              PRIMARY VNODE OPERATIONS FORWARDING CALLS               *
1224  ************************************************************************
1225  *
1226  * These procedures are called from VFSs such as unionfs and nullfs
1227  * when they wish to forward an operation on one VFS to another.  The
1228  * argument structure/message is modified and then directly passed to the
1229  * appropriate routine.  This routines may also be called by initiators
1230  * who have an argument structure in hand rather then discreet arguments.
1231  */
1232 int
1233 vop_vnoperate_ap(struct vop_generic_args *ap)
1234 {
1235         struct vop_ops *ops;
1236         int error;
1237
1238         ops = ap->a_ops;
1239         if (ops->vv_flags & VVF_HOOK_MASK) {
1240                 if (ops->vv_flags & VVF_JOURNAL_HOOK)
1241                         error = VOCALL(ops->vv_jops, ap);
1242                 else
1243                         error = 0;
1244                 if (error == 0)
1245                         error = VOCALL(ops, ap);
1246         } else {
1247                 error = VOCALL(ops, ap);
1248         }
1249         return (error);
1250 }
1251
1252 int
1253 vop_islocked_ap(struct vop_islocked_args *ap)
1254 {
1255         int error;
1256
1257         DO_OPS(ap->a_head.a_ops, error, ap, vop_islocked);
1258         return(error);
1259 }
1260
1261 int
1262 vop_resolve_ap(struct vop_resolve_args *ap)
1263 {
1264         int error;
1265
1266         DO_OPS(ap->a_head.a_ops, error, ap, vop_resolve);
1267         return(error);
1268 }
1269
1270
1271 int
1272 vop_lookup_ap(struct vop_lookup_args *ap)
1273 {
1274         int error;
1275
1276         DO_OPS(ap->a_head.a_ops, error, ap, vop_lookup);
1277         return(error);
1278 }
1279
1280 int
1281 vop_cachedlookup_ap(struct vop_cachedlookup_args *ap)
1282 {
1283         int error;
1284
1285         DO_OPS(ap->a_head.a_ops, error, ap, vop_cachedlookup);
1286         return(error);
1287 }
1288
1289 int
1290 vop_create_ap(struct vop_create_args *ap)
1291 {
1292         int error;
1293
1294         DO_OPS(ap->a_head.a_ops, error, ap, vop_create);
1295         return(error);
1296 }
1297
1298 int
1299 vop_whiteout_ap(struct vop_whiteout_args *ap)
1300 {
1301         int error;
1302
1303         DO_OPS(ap->a_head.a_ops, error, ap, vop_whiteout);
1304         return(error);
1305 }
1306
1307 int
1308 vop_mknod_ap(struct vop_mknod_args *ap)
1309 {
1310         int error;
1311
1312         DO_OPS(ap->a_head.a_ops, error, ap, vop_mknod);
1313         return(error);
1314 }
1315
1316 int
1317 vop_open_ap(struct vop_open_args *ap)
1318 {
1319         int error;
1320
1321         DO_OPS(ap->a_head.a_ops, error, ap, vop_open);
1322         return(error);
1323 }
1324
1325 int
1326 vop_close_ap(struct vop_close_args *ap)
1327 {
1328         int error;
1329
1330         DO_OPS(ap->a_head.a_ops, error, ap, vop_close);
1331         return(error);
1332 }
1333
1334 int
1335 vop_access_ap(struct vop_access_args *ap)
1336 {
1337         int error;
1338
1339         DO_OPS(ap->a_head.a_ops, error, ap, vop_access);
1340         return(error);
1341 }
1342
1343 int
1344 vop_getattr_ap(struct vop_getattr_args *ap)
1345 {
1346         int error;
1347
1348         DO_OPS(ap->a_head.a_ops, error, ap, vop_getattr);
1349         return(error);
1350 }
1351
1352 int
1353 vop_setattr_ap(struct vop_setattr_args *ap)
1354 {
1355         int error;
1356
1357         DO_OPS(ap->a_head.a_ops, error, ap, vop_setattr);
1358         return(error);
1359 }
1360
1361 int
1362 vop_read_ap(struct vop_read_args *ap)
1363 {
1364         int error;
1365
1366         DO_OPS(ap->a_head.a_ops, error, ap, vop_read);
1367         return(error);
1368 }
1369
1370 int
1371 vop_write_ap(struct vop_write_args *ap)
1372 {
1373         int error;
1374
1375         DO_OPS(ap->a_head.a_ops, error, ap, vop_write);
1376         return(error);
1377 }
1378
1379 int
1380 vop_lease_ap(struct vop_lease_args *ap)
1381 {
1382         int error;
1383
1384         DO_OPS(ap->a_head.a_ops, error, ap, vop_lease);
1385         return(error);
1386 }
1387
1388 int
1389 vop_ioctl_ap(struct vop_ioctl_args *ap)
1390 {
1391         int error;
1392
1393         DO_OPS(ap->a_head.a_ops, error, ap, vop_ioctl);
1394         return(error);
1395 }
1396
1397 int
1398 vop_poll_ap(struct vop_poll_args *ap)
1399 {
1400         int error;
1401
1402         DO_OPS(ap->a_head.a_ops, error, ap, vop_poll);
1403         return(error);
1404 }
1405
1406 int
1407 vop_kqfilter_ap(struct vop_kqfilter_args *ap)
1408 {
1409         int error;
1410
1411         DO_OPS(ap->a_head.a_ops, error, ap, vop_kqfilter);
1412         return(error);
1413 }
1414
1415 int
1416 vop_revoke_ap(struct vop_revoke_args *ap)
1417 {
1418         int error;
1419
1420         DO_OPS(ap->a_head.a_ops, error, ap, vop_revoke);
1421         return(error);
1422 }
1423
1424 int
1425 vop_mmap_ap(struct vop_mmap_args *ap)
1426 {
1427         int error;
1428
1429         DO_OPS(ap->a_head.a_ops, error, ap, vop_mmap);
1430         return(error);
1431 }
1432
1433 int
1434 vop_fsync_ap(struct vop_fsync_args *ap)
1435 {
1436         int error;
1437
1438         DO_OPS(ap->a_head.a_ops, error, ap, vop_fsync);
1439         return(error);
1440 }
1441
1442 int
1443 vop_remove_ap(struct vop_remove_args *ap)
1444 {
1445         int error;
1446
1447         DO_OPS(ap->a_head.a_ops, error, ap, vop_remove);
1448         return(error);
1449 }
1450
1451 int
1452 vop_nremove_ap(struct vop_nremove_args *ap)
1453 {
1454         int error;
1455
1456         DO_OPS(ap->a_head.a_ops, error, ap, vop_nremove);
1457         return(error);
1458 }
1459
1460 int
1461 vop_link_ap(struct vop_link_args *ap)
1462 {
1463         int error;
1464
1465         DO_OPS(ap->a_head.a_ops, error, ap, vop_link);
1466         return(error);
1467 }
1468
1469 int
1470 vop_rename_ap(struct vop_rename_args *ap)
1471 {
1472         int error;
1473
1474         DO_OPS(ap->a_head.a_ops, error, ap, vop_rename);
1475         return(error);
1476 }
1477
1478 int
1479 vop_mkdir_ap(struct vop_mkdir_args *ap)
1480 {
1481         int error;
1482
1483         DO_OPS(ap->a_head.a_ops, error, ap, vop_mkdir);
1484         return(error);
1485 }
1486
1487 int
1488 vop_rmdir_ap(struct vop_rmdir_args *ap)
1489 {
1490         int error;
1491
1492         DO_OPS(ap->a_head.a_ops, error, ap, vop_rmdir);
1493         return(error);
1494 }
1495
1496 int
1497 vop_symlink_ap(struct vop_symlink_args *ap)
1498 {
1499         int error;
1500
1501         DO_OPS(ap->a_head.a_ops, error, ap, vop_symlink);
1502         return(error);
1503 }
1504
1505 int
1506 vop_readdir_ap(struct vop_readdir_args *ap)
1507 {
1508         int error;
1509
1510         DO_OPS(ap->a_head.a_ops, error, ap, vop_readdir);
1511         return(error);
1512 }
1513
1514 int
1515 vop_readlink_ap(struct vop_readlink_args *ap)
1516 {
1517         int error;
1518
1519         DO_OPS(ap->a_head.a_ops, error, ap, vop_readlink);
1520         return(error);
1521 }
1522
1523 int
1524 vop_inactive_ap(struct vop_inactive_args *ap)
1525 {
1526         int error;
1527
1528         DO_OPS(ap->a_head.a_ops, error, ap, vop_inactive);
1529         return(error);
1530 }
1531
1532 int
1533 vop_reclaim_ap(struct vop_reclaim_args *ap)
1534 {
1535         int error;
1536
1537         DO_OPS(ap->a_head.a_ops, error, ap, vop_reclaim);
1538         return(error);
1539 }
1540
1541 int
1542 vop_lock_ap(struct vop_lock_args *ap)
1543 {
1544         int error;
1545
1546         DO_OPS(ap->a_head.a_ops, error, ap, vop_lock);
1547         return(error);
1548 }
1549
1550 int
1551 vop_unlock_ap(struct vop_unlock_args *ap)
1552 {
1553         int error;
1554
1555         DO_OPS(ap->a_head.a_ops, error, ap, vop_unlock);
1556         return(error);
1557 }
1558
1559 int
1560 vop_bmap_ap(struct vop_bmap_args *ap)
1561 {
1562         int error;
1563
1564         DO_OPS(ap->a_head.a_ops, error, ap, vop_bmap);
1565         return(error);
1566 }
1567
1568 int
1569 vop_strategy_ap(struct vop_strategy_args *ap)
1570 {
1571         int error;
1572
1573         DO_OPS(ap->a_head.a_ops, error, ap, vop_strategy);
1574         return(error);
1575 }
1576
1577 int
1578 vop_print_ap(struct vop_print_args *ap)
1579 {
1580         int error;
1581
1582         DO_OPS(ap->a_head.a_ops, error, ap, vop_print);
1583         return(error);
1584 }
1585
1586 int
1587 vop_pathconf_ap(struct vop_pathconf_args *ap)
1588 {
1589         int error;
1590
1591         DO_OPS(ap->a_head.a_ops, error, ap, vop_pathconf);
1592         return(error);
1593 }
1594
1595 int
1596 vop_advlock_ap(struct vop_advlock_args *ap)
1597 {
1598         int error;
1599
1600         DO_OPS(ap->a_head.a_ops, error, ap, vop_advlock);
1601         return(error);
1602 }
1603
1604 int
1605 vop_balloc_ap(struct vop_balloc_args *ap)
1606 {
1607         int error;
1608
1609         DO_OPS(ap->a_head.a_ops, error, ap, vop_balloc);
1610         return(error);
1611 }
1612
1613 int
1614 vop_reallocblks_ap(struct vop_reallocblks_args *ap)
1615 {
1616         int error;
1617
1618         DO_OPS(ap->a_head.a_ops, error, ap, vop_reallocblks);
1619         return(error);
1620 }
1621
1622 int
1623 vop_getpages_ap(struct vop_getpages_args *ap)
1624 {
1625         int error;
1626
1627         DO_OPS(ap->a_head.a_ops, error, ap, vop_getpages);
1628         return(error);
1629 }
1630
1631 int
1632 vop_putpages_ap(struct vop_putpages_args *ap)
1633 {
1634         int error;
1635
1636         DO_OPS(ap->a_head.a_ops, error, ap, vop_putpages);
1637         return(error);
1638 }
1639
1640 int
1641 vop_freeblks_ap(struct vop_freeblks_args *ap)
1642 {
1643         int error;
1644
1645         DO_OPS(ap->a_head.a_ops, error, ap, vop_freeblks);
1646         return(error);
1647 }
1648
1649 int
1650 vop_bwrite_ap(struct vop_bwrite_args *ap)
1651 {
1652         int error;
1653
1654         DO_OPS(ap->a_head.a_ops, error, ap, vop_bwrite);
1655         return(error);
1656 }
1657
1658 int
1659 vop_getacl_ap(struct vop_getacl_args *ap)
1660 {
1661         int error;
1662
1663         DO_OPS(ap->a_head.a_ops, error, ap, vop_getacl);
1664         return(error);
1665 }
1666
1667 int
1668 vop_setacl_ap(struct vop_setacl_args *ap)
1669 {
1670         int error;
1671
1672         DO_OPS(ap->a_head.a_ops, error, ap, vop_setacl);
1673         return(error);
1674 }
1675
1676 int
1677 vop_aclcheck_ap(struct vop_aclcheck_args *ap)
1678 {
1679         int error;
1680
1681         DO_OPS(ap->a_head.a_ops, error, ap, vop_aclcheck);
1682         return(error);
1683 }
1684
1685 int
1686 vop_getextattr_ap(struct vop_getextattr_args *ap)
1687 {
1688         int error;
1689
1690         DO_OPS(ap->a_head.a_ops, error, ap, vop_getextattr);
1691         return(error);
1692 }
1693
1694 int
1695 vop_setextattr_ap(struct vop_setextattr_args *ap)
1696 {
1697         int error;
1698
1699         DO_OPS(ap->a_head.a_ops, error, ap, vop_setextattr);
1700         return(error);
1701 }
1702
1703 int
1704 vop_createvobject_ap(struct vop_createvobject_args *ap)
1705 {
1706         int error;
1707
1708         DO_OPS(ap->a_head.a_ops, error, ap, vop_createvobject);
1709         return(error);
1710 }
1711
1712 int
1713 vop_destroyvobject_ap(struct vop_destroyvobject_args *ap)
1714 {
1715         int error;
1716
1717         DO_OPS(ap->a_head.a_ops, error, ap, vop_destroyvobject);
1718         return(error);
1719 }
1720
1721 int
1722 vop_getvobject_ap(struct vop_getvobject_args *ap)
1723 {
1724         int error;
1725
1726         DO_OPS(ap->a_head.a_ops, error, ap, vop_getvobject);
1727         return(error);
1728 }
1729
1730 int
1731 vop_vfsset_ap(struct vop_vfsset_args *ap)
1732 {
1733         int error;
1734
1735         DO_OPS(ap->a_head.a_ops, error, ap, vop_vfsset);
1736         return(error);
1737 }
1738