xref: /netbsd-src/sys/kern/vnode_if.c (revision 21e37cc72a480a47828990a439cde7ac9ffaf0c6)
1 /*	$NetBSD: vnode_if.c,v 1.48 2004/05/27 12:50:35 yamt Exp $	*/
2 
3 /*
4  * Warning: This file is generated automatically.
5  * (Modifications made here may easily be lost!)
6  *
7  * Created from the file:
8  *	NetBSD: vnode_if.src,v 1.39 2004/05/27 12:49:09 yamt Exp
9  * by the script:
10  *	NetBSD: vnode_if.sh,v 1.34 2004/01/25 18:02:04 hannken Exp
11  */
12 
13 /*
14  * Copyright (c) 1992, 1993, 1994, 1995
15  *	The Regents of the University of California.  All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions
19  * are met:
20  * 1. Redistributions of source code must retain the above copyright
21  *    notice, this list of conditions and the following disclaimer.
22  * 2. Redistributions in binary form must reproduce the above copyright
23  *    notice, this list of conditions and the following disclaimer in the
24  *    documentation and/or other materials provided with the distribution.
25  * 3. Neither the name of the University nor the names of its contributors
26  *    may be used to endorse or promote products derived from this software
27  *    without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39  * SUCH DAMAGE.
40  */
41 
42 #include <sys/cdefs.h>
43 __KERNEL_RCSID(0, "$NetBSD: vnode_if.c,v 1.48 2004/05/27 12:50:35 yamt Exp $");
44 
45 
46 /*
47  * If we have LKM support, always include the non-inline versions for
48  * LKMs.  Otherwise, do it based on the option.
49  */
50 #ifdef LKM
51 #define	VNODE_OP_NOINLINE
52 #else
53 #include "opt_vnode_op_noinline.h"
54 #endif
55 
56 #include <sys/param.h>
57 #include <sys/mount.h>
58 #include <sys/buf.h>
59 #include <sys/vnode.h>
60 
61 const struct vnodeop_desc vop_default_desc = {
62 	0,
63 	"default",
64 	0,
65 	NULL,
66 	VDESC_NO_OFFSET,
67 	VDESC_NO_OFFSET,
68 	VDESC_NO_OFFSET,
69 	VDESC_NO_OFFSET,
70 	NULL,
71 };
72 
73 
74 /* Special cases: */
75 
76 const int vop_bwrite_vp_offsets[] = {
77 	VDESC_NO_OFFSET
78 };
79 const struct vnodeop_desc vop_bwrite_desc = {
80 	1,
81 	"vop_bwrite",
82 	0,
83 	vop_bwrite_vp_offsets,
84 	VDESC_NO_OFFSET,
85 	VDESC_NO_OFFSET,
86 	VDESC_NO_OFFSET,
87 	VDESC_NO_OFFSET,
88 	NULL,
89 };
90 #ifdef VNODE_OP_NOINLINE
91 int
92 VOP_BWRITE(bp)
93 	struct buf *bp;
94 {
95 	struct vop_bwrite_args a;
96 	a.a_desc = VDESC(vop_bwrite);
97 	a.a_bp = bp;
98 	return (VCALL(bp->b_vp, VOFFSET(vop_bwrite), &a));
99 }
100 #endif
101 
102 /* End of special cases */
103 
104 const int vop_lookup_vp_offsets[] = {
105 	VOPARG_OFFSETOF(struct vop_lookup_args,a_dvp),
106 	VDESC_NO_OFFSET
107 };
108 const struct vnodeop_desc vop_lookup_desc = {
109 	2,
110 	"vop_lookup",
111 	0,
112 	vop_lookup_vp_offsets,
113 	VOPARG_OFFSETOF(struct vop_lookup_args, a_vpp),
114 	VDESC_NO_OFFSET,
115 	VDESC_NO_OFFSET,
116 	VOPARG_OFFSETOF(struct vop_lookup_args, a_cnp),
117 	NULL,
118 };
119 #ifdef VNODE_OP_NOINLINE
120 int
121 VOP_LOOKUP(dvp, vpp, cnp)
122 	struct vnode *dvp;
123 	struct vnode **vpp;
124 	struct componentname *cnp;
125 {
126 	struct vop_lookup_args a;
127 	a.a_desc = VDESC(vop_lookup);
128 	a.a_dvp = dvp;
129 	a.a_vpp = vpp;
130 	a.a_cnp = cnp;
131 	return (VCALL(dvp, VOFFSET(vop_lookup), &a));
132 }
133 #endif
134 
135 const int vop_create_vp_offsets[] = {
136 	VOPARG_OFFSETOF(struct vop_create_args,a_dvp),
137 	VDESC_NO_OFFSET
138 };
139 const struct vnodeop_desc vop_create_desc = {
140 	3,
141 	"vop_create",
142 	0 | VDESC_VP0_WILLPUT,
143 	vop_create_vp_offsets,
144 	VOPARG_OFFSETOF(struct vop_create_args, a_vpp),
145 	VDESC_NO_OFFSET,
146 	VDESC_NO_OFFSET,
147 	VOPARG_OFFSETOF(struct vop_create_args, a_cnp),
148 	NULL,
149 };
150 #ifdef VNODE_OP_NOINLINE
151 int
152 VOP_CREATE(dvp, vpp, cnp, vap)
153 	struct vnode *dvp;
154 	struct vnode **vpp;
155 	struct componentname *cnp;
156 	struct vattr *vap;
157 {
158 	struct vop_create_args a;
159 	a.a_desc = VDESC(vop_create);
160 	a.a_dvp = dvp;
161 	a.a_vpp = vpp;
162 	a.a_cnp = cnp;
163 	a.a_vap = vap;
164 	return (VCALL(dvp, VOFFSET(vop_create), &a));
165 }
166 #endif
167 
168 const int vop_mknod_vp_offsets[] = {
169 	VOPARG_OFFSETOF(struct vop_mknod_args,a_dvp),
170 	VDESC_NO_OFFSET
171 };
172 const struct vnodeop_desc vop_mknod_desc = {
173 	4,
174 	"vop_mknod",
175 	0 | VDESC_VP0_WILLPUT,
176 	vop_mknod_vp_offsets,
177 	VOPARG_OFFSETOF(struct vop_mknod_args, a_vpp),
178 	VDESC_NO_OFFSET,
179 	VDESC_NO_OFFSET,
180 	VOPARG_OFFSETOF(struct vop_mknod_args, a_cnp),
181 	NULL,
182 };
183 #ifdef VNODE_OP_NOINLINE
184 int
185 VOP_MKNOD(dvp, vpp, cnp, vap)
186 	struct vnode *dvp;
187 	struct vnode **vpp;
188 	struct componentname *cnp;
189 	struct vattr *vap;
190 {
191 	struct vop_mknod_args a;
192 	a.a_desc = VDESC(vop_mknod);
193 	a.a_dvp = dvp;
194 	a.a_vpp = vpp;
195 	a.a_cnp = cnp;
196 	a.a_vap = vap;
197 	return (VCALL(dvp, VOFFSET(vop_mknod), &a));
198 }
199 #endif
200 
201 const int vop_open_vp_offsets[] = {
202 	VOPARG_OFFSETOF(struct vop_open_args,a_vp),
203 	VDESC_NO_OFFSET
204 };
205 const struct vnodeop_desc vop_open_desc = {
206 	5,
207 	"vop_open",
208 	0,
209 	vop_open_vp_offsets,
210 	VDESC_NO_OFFSET,
211 	VOPARG_OFFSETOF(struct vop_open_args, a_cred),
212 	VOPARG_OFFSETOF(struct vop_open_args, a_p),
213 	VDESC_NO_OFFSET,
214 	NULL,
215 };
216 #ifdef VNODE_OP_NOINLINE
217 int
218 VOP_OPEN(vp, mode, cred, p)
219 	struct vnode *vp;
220 	int mode;
221 	struct ucred *cred;
222 	struct proc *p;
223 {
224 	struct vop_open_args a;
225 	a.a_desc = VDESC(vop_open);
226 	a.a_vp = vp;
227 	a.a_mode = mode;
228 	a.a_cred = cred;
229 	a.a_p = p;
230 	return (VCALL(vp, VOFFSET(vop_open), &a));
231 }
232 #endif
233 
234 const int vop_close_vp_offsets[] = {
235 	VOPARG_OFFSETOF(struct vop_close_args,a_vp),
236 	VDESC_NO_OFFSET
237 };
238 const struct vnodeop_desc vop_close_desc = {
239 	6,
240 	"vop_close",
241 	0,
242 	vop_close_vp_offsets,
243 	VDESC_NO_OFFSET,
244 	VOPARG_OFFSETOF(struct vop_close_args, a_cred),
245 	VOPARG_OFFSETOF(struct vop_close_args, a_p),
246 	VDESC_NO_OFFSET,
247 	NULL,
248 };
249 #ifdef VNODE_OP_NOINLINE
250 int
251 VOP_CLOSE(vp, fflag, cred, p)
252 	struct vnode *vp;
253 	int fflag;
254 	struct ucred *cred;
255 	struct proc *p;
256 {
257 	struct vop_close_args a;
258 	a.a_desc = VDESC(vop_close);
259 	a.a_vp = vp;
260 	a.a_fflag = fflag;
261 	a.a_cred = cred;
262 	a.a_p = p;
263 	return (VCALL(vp, VOFFSET(vop_close), &a));
264 }
265 #endif
266 
267 const int vop_access_vp_offsets[] = {
268 	VOPARG_OFFSETOF(struct vop_access_args,a_vp),
269 	VDESC_NO_OFFSET
270 };
271 const struct vnodeop_desc vop_access_desc = {
272 	7,
273 	"vop_access",
274 	0,
275 	vop_access_vp_offsets,
276 	VDESC_NO_OFFSET,
277 	VOPARG_OFFSETOF(struct vop_access_args, a_cred),
278 	VOPARG_OFFSETOF(struct vop_access_args, a_p),
279 	VDESC_NO_OFFSET,
280 	NULL,
281 };
282 #ifdef VNODE_OP_NOINLINE
283 int
284 VOP_ACCESS(vp, mode, cred, p)
285 	struct vnode *vp;
286 	int mode;
287 	struct ucred *cred;
288 	struct proc *p;
289 {
290 	struct vop_access_args a;
291 	a.a_desc = VDESC(vop_access);
292 	a.a_vp = vp;
293 	a.a_mode = mode;
294 	a.a_cred = cred;
295 	a.a_p = p;
296 	return (VCALL(vp, VOFFSET(vop_access), &a));
297 }
298 #endif
299 
300 const int vop_getattr_vp_offsets[] = {
301 	VOPARG_OFFSETOF(struct vop_getattr_args,a_vp),
302 	VDESC_NO_OFFSET
303 };
304 const struct vnodeop_desc vop_getattr_desc = {
305 	8,
306 	"vop_getattr",
307 	0,
308 	vop_getattr_vp_offsets,
309 	VDESC_NO_OFFSET,
310 	VOPARG_OFFSETOF(struct vop_getattr_args, a_cred),
311 	VOPARG_OFFSETOF(struct vop_getattr_args, a_p),
312 	VDESC_NO_OFFSET,
313 	NULL,
314 };
315 #ifdef VNODE_OP_NOINLINE
316 int
317 VOP_GETATTR(vp, vap, cred, p)
318 	struct vnode *vp;
319 	struct vattr *vap;
320 	struct ucred *cred;
321 	struct proc *p;
322 {
323 	struct vop_getattr_args a;
324 	a.a_desc = VDESC(vop_getattr);
325 	a.a_vp = vp;
326 	a.a_vap = vap;
327 	a.a_cred = cred;
328 	a.a_p = p;
329 	return (VCALL(vp, VOFFSET(vop_getattr), &a));
330 }
331 #endif
332 
333 const int vop_setattr_vp_offsets[] = {
334 	VOPARG_OFFSETOF(struct vop_setattr_args,a_vp),
335 	VDESC_NO_OFFSET
336 };
337 const struct vnodeop_desc vop_setattr_desc = {
338 	9,
339 	"vop_setattr",
340 	0,
341 	vop_setattr_vp_offsets,
342 	VDESC_NO_OFFSET,
343 	VOPARG_OFFSETOF(struct vop_setattr_args, a_cred),
344 	VOPARG_OFFSETOF(struct vop_setattr_args, a_p),
345 	VDESC_NO_OFFSET,
346 	NULL,
347 };
348 #ifdef VNODE_OP_NOINLINE
349 int
350 VOP_SETATTR(vp, vap, cred, p)
351 	struct vnode *vp;
352 	struct vattr *vap;
353 	struct ucred *cred;
354 	struct proc *p;
355 {
356 	struct vop_setattr_args a;
357 	a.a_desc = VDESC(vop_setattr);
358 	a.a_vp = vp;
359 	a.a_vap = vap;
360 	a.a_cred = cred;
361 	a.a_p = p;
362 	return (VCALL(vp, VOFFSET(vop_setattr), &a));
363 }
364 #endif
365 
366 const int vop_read_vp_offsets[] = {
367 	VOPARG_OFFSETOF(struct vop_read_args,a_vp),
368 	VDESC_NO_OFFSET
369 };
370 const struct vnodeop_desc vop_read_desc = {
371 	10,
372 	"vop_read",
373 	0,
374 	vop_read_vp_offsets,
375 	VDESC_NO_OFFSET,
376 	VOPARG_OFFSETOF(struct vop_read_args, a_cred),
377 	VDESC_NO_OFFSET,
378 	VDESC_NO_OFFSET,
379 	NULL,
380 };
381 #ifdef VNODE_OP_NOINLINE
382 int
383 VOP_READ(vp, uio, ioflag, cred)
384 	struct vnode *vp;
385 	struct uio *uio;
386 	int ioflag;
387 	struct ucred *cred;
388 {
389 	struct vop_read_args a;
390 	a.a_desc = VDESC(vop_read);
391 	a.a_vp = vp;
392 	a.a_uio = uio;
393 	a.a_ioflag = ioflag;
394 	a.a_cred = cred;
395 	return (VCALL(vp, VOFFSET(vop_read), &a));
396 }
397 #endif
398 
399 const int vop_write_vp_offsets[] = {
400 	VOPARG_OFFSETOF(struct vop_write_args,a_vp),
401 	VDESC_NO_OFFSET
402 };
403 const struct vnodeop_desc vop_write_desc = {
404 	11,
405 	"vop_write",
406 	0,
407 	vop_write_vp_offsets,
408 	VDESC_NO_OFFSET,
409 	VOPARG_OFFSETOF(struct vop_write_args, a_cred),
410 	VDESC_NO_OFFSET,
411 	VDESC_NO_OFFSET,
412 	NULL,
413 };
414 #ifdef VNODE_OP_NOINLINE
415 int
416 VOP_WRITE(vp, uio, ioflag, cred)
417 	struct vnode *vp;
418 	struct uio *uio;
419 	int ioflag;
420 	struct ucred *cred;
421 {
422 	struct vop_write_args a;
423 	a.a_desc = VDESC(vop_write);
424 	a.a_vp = vp;
425 	a.a_uio = uio;
426 	a.a_ioflag = ioflag;
427 	a.a_cred = cred;
428 	return (VCALL(vp, VOFFSET(vop_write), &a));
429 }
430 #endif
431 
432 const int vop_ioctl_vp_offsets[] = {
433 	VOPARG_OFFSETOF(struct vop_ioctl_args,a_vp),
434 	VDESC_NO_OFFSET
435 };
436 const struct vnodeop_desc vop_ioctl_desc = {
437 	12,
438 	"vop_ioctl",
439 	0,
440 	vop_ioctl_vp_offsets,
441 	VDESC_NO_OFFSET,
442 	VOPARG_OFFSETOF(struct vop_ioctl_args, a_cred),
443 	VOPARG_OFFSETOF(struct vop_ioctl_args, a_p),
444 	VDESC_NO_OFFSET,
445 	NULL,
446 };
447 #ifdef VNODE_OP_NOINLINE
448 int
449 VOP_IOCTL(vp, command, data, fflag, cred, p)
450 	struct vnode *vp;
451 	u_long command;
452 	void *data;
453 	int fflag;
454 	struct ucred *cred;
455 	struct proc *p;
456 {
457 	struct vop_ioctl_args a;
458 	a.a_desc = VDESC(vop_ioctl);
459 	a.a_vp = vp;
460 	a.a_command = command;
461 	a.a_data = data;
462 	a.a_fflag = fflag;
463 	a.a_cred = cred;
464 	a.a_p = p;
465 	return (VCALL(vp, VOFFSET(vop_ioctl), &a));
466 }
467 #endif
468 
469 const int vop_fcntl_vp_offsets[] = {
470 	VOPARG_OFFSETOF(struct vop_fcntl_args,a_vp),
471 	VDESC_NO_OFFSET
472 };
473 const struct vnodeop_desc vop_fcntl_desc = {
474 	13,
475 	"vop_fcntl",
476 	0,
477 	vop_fcntl_vp_offsets,
478 	VDESC_NO_OFFSET,
479 	VOPARG_OFFSETOF(struct vop_fcntl_args, a_cred),
480 	VOPARG_OFFSETOF(struct vop_fcntl_args, a_p),
481 	VDESC_NO_OFFSET,
482 	NULL,
483 };
484 #ifdef VNODE_OP_NOINLINE
485 int
486 VOP_FCNTL(vp, command, data, fflag, cred, p)
487 	struct vnode *vp;
488 	u_int command;
489 	void *data;
490 	int fflag;
491 	struct ucred *cred;
492 	struct proc *p;
493 {
494 	struct vop_fcntl_args a;
495 	a.a_desc = VDESC(vop_fcntl);
496 	a.a_vp = vp;
497 	a.a_command = command;
498 	a.a_data = data;
499 	a.a_fflag = fflag;
500 	a.a_cred = cred;
501 	a.a_p = p;
502 	return (VCALL(vp, VOFFSET(vop_fcntl), &a));
503 }
504 #endif
505 
506 const int vop_poll_vp_offsets[] = {
507 	VOPARG_OFFSETOF(struct vop_poll_args,a_vp),
508 	VDESC_NO_OFFSET
509 };
510 const struct vnodeop_desc vop_poll_desc = {
511 	14,
512 	"vop_poll",
513 	0,
514 	vop_poll_vp_offsets,
515 	VDESC_NO_OFFSET,
516 	VDESC_NO_OFFSET,
517 	VOPARG_OFFSETOF(struct vop_poll_args, a_p),
518 	VDESC_NO_OFFSET,
519 	NULL,
520 };
521 #ifdef VNODE_OP_NOINLINE
522 int
523 VOP_POLL(vp, events, p)
524 	struct vnode *vp;
525 	int events;
526 	struct proc *p;
527 {
528 	struct vop_poll_args a;
529 	a.a_desc = VDESC(vop_poll);
530 	a.a_vp = vp;
531 	a.a_events = events;
532 	a.a_p = p;
533 	return (VCALL(vp, VOFFSET(vop_poll), &a));
534 }
535 #endif
536 
537 const int vop_kqfilter_vp_offsets[] = {
538 	VOPARG_OFFSETOF(struct vop_kqfilter_args,a_vp),
539 	VDESC_NO_OFFSET
540 };
541 const struct vnodeop_desc vop_kqfilter_desc = {
542 	15,
543 	"vop_kqfilter",
544 	0,
545 	vop_kqfilter_vp_offsets,
546 	VDESC_NO_OFFSET,
547 	VDESC_NO_OFFSET,
548 	VDESC_NO_OFFSET,
549 	VDESC_NO_OFFSET,
550 	NULL,
551 };
552 #ifdef VNODE_OP_NOINLINE
553 int
554 VOP_KQFILTER(vp, kn)
555 	struct vnode *vp;
556 	struct knote *kn;
557 {
558 	struct vop_kqfilter_args a;
559 	a.a_desc = VDESC(vop_kqfilter);
560 	a.a_vp = vp;
561 	a.a_kn = kn;
562 	return (VCALL(vp, VOFFSET(vop_kqfilter), &a));
563 }
564 #endif
565 
566 const int vop_revoke_vp_offsets[] = {
567 	VOPARG_OFFSETOF(struct vop_revoke_args,a_vp),
568 	VDESC_NO_OFFSET
569 };
570 const struct vnodeop_desc vop_revoke_desc = {
571 	16,
572 	"vop_revoke",
573 	0,
574 	vop_revoke_vp_offsets,
575 	VDESC_NO_OFFSET,
576 	VDESC_NO_OFFSET,
577 	VDESC_NO_OFFSET,
578 	VDESC_NO_OFFSET,
579 	NULL,
580 };
581 #ifdef VNODE_OP_NOINLINE
582 int
583 VOP_REVOKE(vp, flags)
584 	struct vnode *vp;
585 	int flags;
586 {
587 	struct vop_revoke_args a;
588 	a.a_desc = VDESC(vop_revoke);
589 	a.a_vp = vp;
590 	a.a_flags = flags;
591 	return (VCALL(vp, VOFFSET(vop_revoke), &a));
592 }
593 #endif
594 
595 const int vop_mmap_vp_offsets[] = {
596 	VOPARG_OFFSETOF(struct vop_mmap_args,a_vp),
597 	VDESC_NO_OFFSET
598 };
599 const struct vnodeop_desc vop_mmap_desc = {
600 	17,
601 	"vop_mmap",
602 	0,
603 	vop_mmap_vp_offsets,
604 	VDESC_NO_OFFSET,
605 	VOPARG_OFFSETOF(struct vop_mmap_args, a_cred),
606 	VOPARG_OFFSETOF(struct vop_mmap_args, a_p),
607 	VDESC_NO_OFFSET,
608 	NULL,
609 };
610 #ifdef VNODE_OP_NOINLINE
611 int
612 VOP_MMAP(vp, fflags, cred, p)
613 	struct vnode *vp;
614 	int fflags;
615 	struct ucred *cred;
616 	struct proc *p;
617 {
618 	struct vop_mmap_args a;
619 	a.a_desc = VDESC(vop_mmap);
620 	a.a_vp = vp;
621 	a.a_fflags = fflags;
622 	a.a_cred = cred;
623 	a.a_p = p;
624 	return (VCALL(vp, VOFFSET(vop_mmap), &a));
625 }
626 #endif
627 
628 const int vop_fsync_vp_offsets[] = {
629 	VOPARG_OFFSETOF(struct vop_fsync_args,a_vp),
630 	VDESC_NO_OFFSET
631 };
632 const struct vnodeop_desc vop_fsync_desc = {
633 	18,
634 	"vop_fsync",
635 	0,
636 	vop_fsync_vp_offsets,
637 	VDESC_NO_OFFSET,
638 	VOPARG_OFFSETOF(struct vop_fsync_args, a_cred),
639 	VOPARG_OFFSETOF(struct vop_fsync_args, a_p),
640 	VDESC_NO_OFFSET,
641 	NULL,
642 };
643 #ifdef VNODE_OP_NOINLINE
644 int
645 VOP_FSYNC(vp, cred, flags, offlo, offhi, p)
646 	struct vnode *vp;
647 	struct ucred *cred;
648 	int flags;
649 	off_t offlo;
650 	off_t offhi;
651 	struct proc *p;
652 {
653 	struct vop_fsync_args a;
654 	a.a_desc = VDESC(vop_fsync);
655 	a.a_vp = vp;
656 	a.a_cred = cred;
657 	a.a_flags = flags;
658 	a.a_offlo = offlo;
659 	a.a_offhi = offhi;
660 	a.a_p = p;
661 	return (VCALL(vp, VOFFSET(vop_fsync), &a));
662 }
663 #endif
664 
665 const int vop_seek_vp_offsets[] = {
666 	VOPARG_OFFSETOF(struct vop_seek_args,a_vp),
667 	VDESC_NO_OFFSET
668 };
669 const struct vnodeop_desc vop_seek_desc = {
670 	19,
671 	"vop_seek",
672 	0,
673 	vop_seek_vp_offsets,
674 	VDESC_NO_OFFSET,
675 	VOPARG_OFFSETOF(struct vop_seek_args, a_cred),
676 	VDESC_NO_OFFSET,
677 	VDESC_NO_OFFSET,
678 	NULL,
679 };
680 #ifdef VNODE_OP_NOINLINE
681 int
682 VOP_SEEK(vp, oldoff, newoff, cred)
683 	struct vnode *vp;
684 	off_t oldoff;
685 	off_t newoff;
686 	struct ucred *cred;
687 {
688 	struct vop_seek_args a;
689 	a.a_desc = VDESC(vop_seek);
690 	a.a_vp = vp;
691 	a.a_oldoff = oldoff;
692 	a.a_newoff = newoff;
693 	a.a_cred = cred;
694 	return (VCALL(vp, VOFFSET(vop_seek), &a));
695 }
696 #endif
697 
698 const int vop_remove_vp_offsets[] = {
699 	VOPARG_OFFSETOF(struct vop_remove_args,a_dvp),
700 	VOPARG_OFFSETOF(struct vop_remove_args,a_vp),
701 	VDESC_NO_OFFSET
702 };
703 const struct vnodeop_desc vop_remove_desc = {
704 	20,
705 	"vop_remove",
706 	0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
707 	vop_remove_vp_offsets,
708 	VDESC_NO_OFFSET,
709 	VDESC_NO_OFFSET,
710 	VDESC_NO_OFFSET,
711 	VOPARG_OFFSETOF(struct vop_remove_args, a_cnp),
712 	NULL,
713 };
714 #ifdef VNODE_OP_NOINLINE
715 int
716 VOP_REMOVE(dvp, vp, cnp)
717 	struct vnode *dvp;
718 	struct vnode *vp;
719 	struct componentname *cnp;
720 {
721 	struct vop_remove_args a;
722 	a.a_desc = VDESC(vop_remove);
723 	a.a_dvp = dvp;
724 	a.a_vp = vp;
725 	a.a_cnp = cnp;
726 	return (VCALL(dvp, VOFFSET(vop_remove), &a));
727 }
728 #endif
729 
730 const int vop_link_vp_offsets[] = {
731 	VOPARG_OFFSETOF(struct vop_link_args,a_dvp),
732 	VOPARG_OFFSETOF(struct vop_link_args,a_vp),
733 	VDESC_NO_OFFSET
734 };
735 const struct vnodeop_desc vop_link_desc = {
736 	21,
737 	"vop_link",
738 	0 | VDESC_VP0_WILLPUT,
739 	vop_link_vp_offsets,
740 	VDESC_NO_OFFSET,
741 	VDESC_NO_OFFSET,
742 	VDESC_NO_OFFSET,
743 	VOPARG_OFFSETOF(struct vop_link_args, a_cnp),
744 	NULL,
745 };
746 #ifdef VNODE_OP_NOINLINE
747 int
748 VOP_LINK(dvp, vp, cnp)
749 	struct vnode *dvp;
750 	struct vnode *vp;
751 	struct componentname *cnp;
752 {
753 	struct vop_link_args a;
754 	a.a_desc = VDESC(vop_link);
755 	a.a_dvp = dvp;
756 	a.a_vp = vp;
757 	a.a_cnp = cnp;
758 	return (VCALL(dvp, VOFFSET(vop_link), &a));
759 }
760 #endif
761 
762 const int vop_rename_vp_offsets[] = {
763 	VOPARG_OFFSETOF(struct vop_rename_args,a_fdvp),
764 	VOPARG_OFFSETOF(struct vop_rename_args,a_fvp),
765 	VOPARG_OFFSETOF(struct vop_rename_args,a_tdvp),
766 	VOPARG_OFFSETOF(struct vop_rename_args,a_tvp),
767 	VDESC_NO_OFFSET
768 };
769 const struct vnodeop_desc vop_rename_desc = {
770 	22,
771 	"vop_rename",
772 	0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLPUT | VDESC_VP3_WILLPUT,
773 	vop_rename_vp_offsets,
774 	VDESC_NO_OFFSET,
775 	VDESC_NO_OFFSET,
776 	VDESC_NO_OFFSET,
777 	VOPARG_OFFSETOF(struct vop_rename_args, a_fcnp),
778 	NULL,
779 };
780 #ifdef VNODE_OP_NOINLINE
781 int
782 VOP_RENAME(fdvp, fvp, fcnp, tdvp, tvp, tcnp)
783 	struct vnode *fdvp;
784 	struct vnode *fvp;
785 	struct componentname *fcnp;
786 	struct vnode *tdvp;
787 	struct vnode *tvp;
788 	struct componentname *tcnp;
789 {
790 	struct vop_rename_args a;
791 	a.a_desc = VDESC(vop_rename);
792 	a.a_fdvp = fdvp;
793 	a.a_fvp = fvp;
794 	a.a_fcnp = fcnp;
795 	a.a_tdvp = tdvp;
796 	a.a_tvp = tvp;
797 	a.a_tcnp = tcnp;
798 	return (VCALL(fdvp, VOFFSET(vop_rename), &a));
799 }
800 #endif
801 
802 const int vop_mkdir_vp_offsets[] = {
803 	VOPARG_OFFSETOF(struct vop_mkdir_args,a_dvp),
804 	VDESC_NO_OFFSET
805 };
806 const struct vnodeop_desc vop_mkdir_desc = {
807 	23,
808 	"vop_mkdir",
809 	0 | VDESC_VP0_WILLPUT,
810 	vop_mkdir_vp_offsets,
811 	VOPARG_OFFSETOF(struct vop_mkdir_args, a_vpp),
812 	VDESC_NO_OFFSET,
813 	VDESC_NO_OFFSET,
814 	VOPARG_OFFSETOF(struct vop_mkdir_args, a_cnp),
815 	NULL,
816 };
817 #ifdef VNODE_OP_NOINLINE
818 int
819 VOP_MKDIR(dvp, vpp, cnp, vap)
820 	struct vnode *dvp;
821 	struct vnode **vpp;
822 	struct componentname *cnp;
823 	struct vattr *vap;
824 {
825 	struct vop_mkdir_args a;
826 	a.a_desc = VDESC(vop_mkdir);
827 	a.a_dvp = dvp;
828 	a.a_vpp = vpp;
829 	a.a_cnp = cnp;
830 	a.a_vap = vap;
831 	return (VCALL(dvp, VOFFSET(vop_mkdir), &a));
832 }
833 #endif
834 
835 const int vop_rmdir_vp_offsets[] = {
836 	VOPARG_OFFSETOF(struct vop_rmdir_args,a_dvp),
837 	VOPARG_OFFSETOF(struct vop_rmdir_args,a_vp),
838 	VDESC_NO_OFFSET
839 };
840 const struct vnodeop_desc vop_rmdir_desc = {
841 	24,
842 	"vop_rmdir",
843 	0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
844 	vop_rmdir_vp_offsets,
845 	VDESC_NO_OFFSET,
846 	VDESC_NO_OFFSET,
847 	VDESC_NO_OFFSET,
848 	VOPARG_OFFSETOF(struct vop_rmdir_args, a_cnp),
849 	NULL,
850 };
851 #ifdef VNODE_OP_NOINLINE
852 int
853 VOP_RMDIR(dvp, vp, cnp)
854 	struct vnode *dvp;
855 	struct vnode *vp;
856 	struct componentname *cnp;
857 {
858 	struct vop_rmdir_args a;
859 	a.a_desc = VDESC(vop_rmdir);
860 	a.a_dvp = dvp;
861 	a.a_vp = vp;
862 	a.a_cnp = cnp;
863 	return (VCALL(dvp, VOFFSET(vop_rmdir), &a));
864 }
865 #endif
866 
867 const int vop_symlink_vp_offsets[] = {
868 	VOPARG_OFFSETOF(struct vop_symlink_args,a_dvp),
869 	VDESC_NO_OFFSET
870 };
871 const struct vnodeop_desc vop_symlink_desc = {
872 	25,
873 	"vop_symlink",
874 	0 | VDESC_VP0_WILLPUT,
875 	vop_symlink_vp_offsets,
876 	VOPARG_OFFSETOF(struct vop_symlink_args, a_vpp),
877 	VDESC_NO_OFFSET,
878 	VDESC_NO_OFFSET,
879 	VOPARG_OFFSETOF(struct vop_symlink_args, a_cnp),
880 	NULL,
881 };
882 #ifdef VNODE_OP_NOINLINE
883 int
884 VOP_SYMLINK(dvp, vpp, cnp, vap, target)
885 	struct vnode *dvp;
886 	struct vnode **vpp;
887 	struct componentname *cnp;
888 	struct vattr *vap;
889 	char *target;
890 {
891 	struct vop_symlink_args a;
892 	a.a_desc = VDESC(vop_symlink);
893 	a.a_dvp = dvp;
894 	a.a_vpp = vpp;
895 	a.a_cnp = cnp;
896 	a.a_vap = vap;
897 	a.a_target = target;
898 	return (VCALL(dvp, VOFFSET(vop_symlink), &a));
899 }
900 #endif
901 
902 const int vop_readdir_vp_offsets[] = {
903 	VOPARG_OFFSETOF(struct vop_readdir_args,a_vp),
904 	VDESC_NO_OFFSET
905 };
906 const struct vnodeop_desc vop_readdir_desc = {
907 	26,
908 	"vop_readdir",
909 	0,
910 	vop_readdir_vp_offsets,
911 	VDESC_NO_OFFSET,
912 	VOPARG_OFFSETOF(struct vop_readdir_args, a_cred),
913 	VDESC_NO_OFFSET,
914 	VDESC_NO_OFFSET,
915 	NULL,
916 };
917 #ifdef VNODE_OP_NOINLINE
918 int
919 VOP_READDIR(vp, uio, cred, eofflag, cookies, ncookies)
920 	struct vnode *vp;
921 	struct uio *uio;
922 	struct ucred *cred;
923 	int *eofflag;
924 	off_t **cookies;
925 	int *ncookies;
926 {
927 	struct vop_readdir_args a;
928 	a.a_desc = VDESC(vop_readdir);
929 	a.a_vp = vp;
930 	a.a_uio = uio;
931 	a.a_cred = cred;
932 	a.a_eofflag = eofflag;
933 	a.a_cookies = cookies;
934 	a.a_ncookies = ncookies;
935 	return (VCALL(vp, VOFFSET(vop_readdir), &a));
936 }
937 #endif
938 
939 const int vop_readlink_vp_offsets[] = {
940 	VOPARG_OFFSETOF(struct vop_readlink_args,a_vp),
941 	VDESC_NO_OFFSET
942 };
943 const struct vnodeop_desc vop_readlink_desc = {
944 	27,
945 	"vop_readlink",
946 	0,
947 	vop_readlink_vp_offsets,
948 	VDESC_NO_OFFSET,
949 	VOPARG_OFFSETOF(struct vop_readlink_args, a_cred),
950 	VDESC_NO_OFFSET,
951 	VDESC_NO_OFFSET,
952 	NULL,
953 };
954 #ifdef VNODE_OP_NOINLINE
955 int
956 VOP_READLINK(vp, uio, cred)
957 	struct vnode *vp;
958 	struct uio *uio;
959 	struct ucred *cred;
960 {
961 	struct vop_readlink_args a;
962 	a.a_desc = VDESC(vop_readlink);
963 	a.a_vp = vp;
964 	a.a_uio = uio;
965 	a.a_cred = cred;
966 	return (VCALL(vp, VOFFSET(vop_readlink), &a));
967 }
968 #endif
969 
970 const int vop_abortop_vp_offsets[] = {
971 	VOPARG_OFFSETOF(struct vop_abortop_args,a_dvp),
972 	VDESC_NO_OFFSET
973 };
974 const struct vnodeop_desc vop_abortop_desc = {
975 	28,
976 	"vop_abortop",
977 	0,
978 	vop_abortop_vp_offsets,
979 	VDESC_NO_OFFSET,
980 	VDESC_NO_OFFSET,
981 	VDESC_NO_OFFSET,
982 	VOPARG_OFFSETOF(struct vop_abortop_args, a_cnp),
983 	NULL,
984 };
985 #ifdef VNODE_OP_NOINLINE
986 int
987 VOP_ABORTOP(dvp, cnp)
988 	struct vnode *dvp;
989 	struct componentname *cnp;
990 {
991 	struct vop_abortop_args a;
992 	a.a_desc = VDESC(vop_abortop);
993 	a.a_dvp = dvp;
994 	a.a_cnp = cnp;
995 	return (VCALL(dvp, VOFFSET(vop_abortop), &a));
996 }
997 #endif
998 
999 const int vop_inactive_vp_offsets[] = {
1000 	VOPARG_OFFSETOF(struct vop_inactive_args,a_vp),
1001 	VDESC_NO_OFFSET
1002 };
1003 const struct vnodeop_desc vop_inactive_desc = {
1004 	29,
1005 	"vop_inactive",
1006 	0 | VDESC_VP0_WILLUNLOCK,
1007 	vop_inactive_vp_offsets,
1008 	VDESC_NO_OFFSET,
1009 	VDESC_NO_OFFSET,
1010 	VOPARG_OFFSETOF(struct vop_inactive_args, a_p),
1011 	VDESC_NO_OFFSET,
1012 	NULL,
1013 };
1014 #ifdef VNODE_OP_NOINLINE
1015 int
1016 VOP_INACTIVE(vp, p)
1017 	struct vnode *vp;
1018 	struct proc *p;
1019 {
1020 	struct vop_inactive_args a;
1021 	a.a_desc = VDESC(vop_inactive);
1022 	a.a_vp = vp;
1023 	a.a_p = p;
1024 	return (VCALL(vp, VOFFSET(vop_inactive), &a));
1025 }
1026 #endif
1027 
1028 const int vop_reclaim_vp_offsets[] = {
1029 	VOPARG_OFFSETOF(struct vop_reclaim_args,a_vp),
1030 	VDESC_NO_OFFSET
1031 };
1032 const struct vnodeop_desc vop_reclaim_desc = {
1033 	30,
1034 	"vop_reclaim",
1035 	0,
1036 	vop_reclaim_vp_offsets,
1037 	VDESC_NO_OFFSET,
1038 	VDESC_NO_OFFSET,
1039 	VOPARG_OFFSETOF(struct vop_reclaim_args, a_p),
1040 	VDESC_NO_OFFSET,
1041 	NULL,
1042 };
1043 #ifdef VNODE_OP_NOINLINE
1044 int
1045 VOP_RECLAIM(vp, p)
1046 	struct vnode *vp;
1047 	struct proc *p;
1048 {
1049 	struct vop_reclaim_args a;
1050 	a.a_desc = VDESC(vop_reclaim);
1051 	a.a_vp = vp;
1052 	a.a_p = p;
1053 	return (VCALL(vp, VOFFSET(vop_reclaim), &a));
1054 }
1055 #endif
1056 
1057 const int vop_lock_vp_offsets[] = {
1058 	VOPARG_OFFSETOF(struct vop_lock_args,a_vp),
1059 	VDESC_NO_OFFSET
1060 };
1061 const struct vnodeop_desc vop_lock_desc = {
1062 	31,
1063 	"vop_lock",
1064 	0,
1065 	vop_lock_vp_offsets,
1066 	VDESC_NO_OFFSET,
1067 	VDESC_NO_OFFSET,
1068 	VDESC_NO_OFFSET,
1069 	VDESC_NO_OFFSET,
1070 	NULL,
1071 };
1072 #ifdef VNODE_OP_NOINLINE
1073 int
1074 VOP_LOCK(vp, flags)
1075 	struct vnode *vp;
1076 	int flags;
1077 {
1078 	struct vop_lock_args a;
1079 	a.a_desc = VDESC(vop_lock);
1080 	a.a_vp = vp;
1081 	a.a_flags = flags;
1082 	return (VCALL(vp, VOFFSET(vop_lock), &a));
1083 }
1084 #endif
1085 
1086 const int vop_unlock_vp_offsets[] = {
1087 	VOPARG_OFFSETOF(struct vop_unlock_args,a_vp),
1088 	VDESC_NO_OFFSET
1089 };
1090 const struct vnodeop_desc vop_unlock_desc = {
1091 	32,
1092 	"vop_unlock",
1093 	0,
1094 	vop_unlock_vp_offsets,
1095 	VDESC_NO_OFFSET,
1096 	VDESC_NO_OFFSET,
1097 	VDESC_NO_OFFSET,
1098 	VDESC_NO_OFFSET,
1099 	NULL,
1100 };
1101 #ifdef VNODE_OP_NOINLINE
1102 int
1103 VOP_UNLOCK(vp, flags)
1104 	struct vnode *vp;
1105 	int flags;
1106 {
1107 	struct vop_unlock_args a;
1108 	a.a_desc = VDESC(vop_unlock);
1109 	a.a_vp = vp;
1110 	a.a_flags = flags;
1111 	return (VCALL(vp, VOFFSET(vop_unlock), &a));
1112 }
1113 #endif
1114 
1115 const int vop_bmap_vp_offsets[] = {
1116 	VOPARG_OFFSETOF(struct vop_bmap_args,a_vp),
1117 	VDESC_NO_OFFSET
1118 };
1119 const struct vnodeop_desc vop_bmap_desc = {
1120 	33,
1121 	"vop_bmap",
1122 	0,
1123 	vop_bmap_vp_offsets,
1124 	VOPARG_OFFSETOF(struct vop_bmap_args, a_vpp),
1125 	VDESC_NO_OFFSET,
1126 	VDESC_NO_OFFSET,
1127 	VDESC_NO_OFFSET,
1128 	NULL,
1129 };
1130 #ifdef VNODE_OP_NOINLINE
1131 int
1132 VOP_BMAP(vp, bn, vpp, bnp, runp)
1133 	struct vnode *vp;
1134 	daddr_t bn;
1135 	struct vnode **vpp;
1136 	daddr_t *bnp;
1137 	int *runp;
1138 {
1139 	struct vop_bmap_args a;
1140 	a.a_desc = VDESC(vop_bmap);
1141 	a.a_vp = vp;
1142 	a.a_bn = bn;
1143 	a.a_vpp = vpp;
1144 	a.a_bnp = bnp;
1145 	a.a_runp = runp;
1146 	return (VCALL(vp, VOFFSET(vop_bmap), &a));
1147 }
1148 #endif
1149 
1150 const int vop_strategy_vp_offsets[] = {
1151 	VOPARG_OFFSETOF(struct vop_strategy_args,a_vp),
1152 	VDESC_NO_OFFSET
1153 };
1154 const struct vnodeop_desc vop_strategy_desc = {
1155 	34,
1156 	"vop_strategy",
1157 	0,
1158 	vop_strategy_vp_offsets,
1159 	VDESC_NO_OFFSET,
1160 	VDESC_NO_OFFSET,
1161 	VDESC_NO_OFFSET,
1162 	VDESC_NO_OFFSET,
1163 	NULL,
1164 };
1165 #ifdef VNODE_OP_NOINLINE
1166 int
1167 VOP_STRATEGY(vp, bp)
1168 	struct vnode *vp;
1169 	struct buf *bp;
1170 {
1171 	struct vop_strategy_args a;
1172 	a.a_desc = VDESC(vop_strategy);
1173 	a.a_vp = vp;
1174 	a.a_bp = bp;
1175 	return (VCALL(vp, VOFFSET(vop_strategy), &a));
1176 }
1177 #endif
1178 
1179 const int vop_print_vp_offsets[] = {
1180 	VOPARG_OFFSETOF(struct vop_print_args,a_vp),
1181 	VDESC_NO_OFFSET
1182 };
1183 const struct vnodeop_desc vop_print_desc = {
1184 	35,
1185 	"vop_print",
1186 	0,
1187 	vop_print_vp_offsets,
1188 	VDESC_NO_OFFSET,
1189 	VDESC_NO_OFFSET,
1190 	VDESC_NO_OFFSET,
1191 	VDESC_NO_OFFSET,
1192 	NULL,
1193 };
1194 #ifdef VNODE_OP_NOINLINE
1195 int
1196 VOP_PRINT(vp)
1197 	struct vnode *vp;
1198 {
1199 	struct vop_print_args a;
1200 	a.a_desc = VDESC(vop_print);
1201 	a.a_vp = vp;
1202 	return (VCALL(vp, VOFFSET(vop_print), &a));
1203 }
1204 #endif
1205 
1206 const int vop_islocked_vp_offsets[] = {
1207 	VOPARG_OFFSETOF(struct vop_islocked_args,a_vp),
1208 	VDESC_NO_OFFSET
1209 };
1210 const struct vnodeop_desc vop_islocked_desc = {
1211 	36,
1212 	"vop_islocked",
1213 	0,
1214 	vop_islocked_vp_offsets,
1215 	VDESC_NO_OFFSET,
1216 	VDESC_NO_OFFSET,
1217 	VDESC_NO_OFFSET,
1218 	VDESC_NO_OFFSET,
1219 	NULL,
1220 };
1221 #ifdef VNODE_OP_NOINLINE
1222 int
1223 VOP_ISLOCKED(vp)
1224 	struct vnode *vp;
1225 {
1226 	struct vop_islocked_args a;
1227 	a.a_desc = VDESC(vop_islocked);
1228 	a.a_vp = vp;
1229 	return (VCALL(vp, VOFFSET(vop_islocked), &a));
1230 }
1231 #endif
1232 
1233 const int vop_pathconf_vp_offsets[] = {
1234 	VOPARG_OFFSETOF(struct vop_pathconf_args,a_vp),
1235 	VDESC_NO_OFFSET
1236 };
1237 const struct vnodeop_desc vop_pathconf_desc = {
1238 	37,
1239 	"vop_pathconf",
1240 	0,
1241 	vop_pathconf_vp_offsets,
1242 	VDESC_NO_OFFSET,
1243 	VDESC_NO_OFFSET,
1244 	VDESC_NO_OFFSET,
1245 	VDESC_NO_OFFSET,
1246 	NULL,
1247 };
1248 #ifdef VNODE_OP_NOINLINE
1249 int
1250 VOP_PATHCONF(vp, name, retval)
1251 	struct vnode *vp;
1252 	int name;
1253 	register_t *retval;
1254 {
1255 	struct vop_pathconf_args a;
1256 	a.a_desc = VDESC(vop_pathconf);
1257 	a.a_vp = vp;
1258 	a.a_name = name;
1259 	a.a_retval = retval;
1260 	return (VCALL(vp, VOFFSET(vop_pathconf), &a));
1261 }
1262 #endif
1263 
1264 const int vop_advlock_vp_offsets[] = {
1265 	VOPARG_OFFSETOF(struct vop_advlock_args,a_vp),
1266 	VDESC_NO_OFFSET
1267 };
1268 const struct vnodeop_desc vop_advlock_desc = {
1269 	38,
1270 	"vop_advlock",
1271 	0,
1272 	vop_advlock_vp_offsets,
1273 	VDESC_NO_OFFSET,
1274 	VDESC_NO_OFFSET,
1275 	VDESC_NO_OFFSET,
1276 	VDESC_NO_OFFSET,
1277 	NULL,
1278 };
1279 #ifdef VNODE_OP_NOINLINE
1280 int
1281 VOP_ADVLOCK(vp, id, op, fl, flags)
1282 	struct vnode *vp;
1283 	void *id;
1284 	int op;
1285 	struct flock *fl;
1286 	int flags;
1287 {
1288 	struct vop_advlock_args a;
1289 	a.a_desc = VDESC(vop_advlock);
1290 	a.a_vp = vp;
1291 	a.a_id = id;
1292 	a.a_op = op;
1293 	a.a_fl = fl;
1294 	a.a_flags = flags;
1295 	return (VCALL(vp, VOFFSET(vop_advlock), &a));
1296 }
1297 #endif
1298 
1299 const int vop_blkatoff_vp_offsets[] = {
1300 	VOPARG_OFFSETOF(struct vop_blkatoff_args,a_vp),
1301 	VDESC_NO_OFFSET
1302 };
1303 const struct vnodeop_desc vop_blkatoff_desc = {
1304 	39,
1305 	"vop_blkatoff",
1306 	0,
1307 	vop_blkatoff_vp_offsets,
1308 	VDESC_NO_OFFSET,
1309 	VDESC_NO_OFFSET,
1310 	VDESC_NO_OFFSET,
1311 	VDESC_NO_OFFSET,
1312 	NULL,
1313 };
1314 #ifdef VNODE_OP_NOINLINE
1315 int
1316 VOP_BLKATOFF(vp, offset, res, bpp)
1317 	struct vnode *vp;
1318 	off_t offset;
1319 	char **res;
1320 	struct buf **bpp;
1321 {
1322 	struct vop_blkatoff_args a;
1323 	a.a_desc = VDESC(vop_blkatoff);
1324 	a.a_vp = vp;
1325 	a.a_offset = offset;
1326 	a.a_res = res;
1327 	a.a_bpp = bpp;
1328 	return (VCALL(vp, VOFFSET(vop_blkatoff), &a));
1329 }
1330 #endif
1331 
1332 const int vop_valloc_vp_offsets[] = {
1333 	VOPARG_OFFSETOF(struct vop_valloc_args,a_pvp),
1334 	VDESC_NO_OFFSET
1335 };
1336 const struct vnodeop_desc vop_valloc_desc = {
1337 	40,
1338 	"vop_valloc",
1339 	0,
1340 	vop_valloc_vp_offsets,
1341 	VOPARG_OFFSETOF(struct vop_valloc_args, a_vpp),
1342 	VOPARG_OFFSETOF(struct vop_valloc_args, a_cred),
1343 	VDESC_NO_OFFSET,
1344 	VDESC_NO_OFFSET,
1345 	NULL,
1346 };
1347 #ifdef VNODE_OP_NOINLINE
1348 int
1349 VOP_VALLOC(pvp, mode, cred, vpp)
1350 	struct vnode *pvp;
1351 	int mode;
1352 	struct ucred *cred;
1353 	struct vnode **vpp;
1354 {
1355 	struct vop_valloc_args a;
1356 	a.a_desc = VDESC(vop_valloc);
1357 	a.a_pvp = pvp;
1358 	a.a_mode = mode;
1359 	a.a_cred = cred;
1360 	a.a_vpp = vpp;
1361 	return (VCALL(pvp, VOFFSET(vop_valloc), &a));
1362 }
1363 #endif
1364 
1365 const int vop_balloc_vp_offsets[] = {
1366 	VOPARG_OFFSETOF(struct vop_balloc_args,a_vp),
1367 	VDESC_NO_OFFSET
1368 };
1369 const struct vnodeop_desc vop_balloc_desc = {
1370 	41,
1371 	"vop_balloc",
1372 	0,
1373 	vop_balloc_vp_offsets,
1374 	VDESC_NO_OFFSET,
1375 	VOPARG_OFFSETOF(struct vop_balloc_args, a_cred),
1376 	VDESC_NO_OFFSET,
1377 	VDESC_NO_OFFSET,
1378 	NULL,
1379 };
1380 #ifdef VNODE_OP_NOINLINE
1381 int
1382 VOP_BALLOC(vp, startoffset, size, cred, flags, bpp)
1383 	struct vnode *vp;
1384 	off_t startoffset;
1385 	int size;
1386 	struct ucred *cred;
1387 	int flags;
1388 	struct buf **bpp;
1389 {
1390 	struct vop_balloc_args a;
1391 	a.a_desc = VDESC(vop_balloc);
1392 	a.a_vp = vp;
1393 	a.a_startoffset = startoffset;
1394 	a.a_size = size;
1395 	a.a_cred = cred;
1396 	a.a_flags = flags;
1397 	a.a_bpp = bpp;
1398 	return (VCALL(vp, VOFFSET(vop_balloc), &a));
1399 }
1400 #endif
1401 
1402 const int vop_reallocblks_vp_offsets[] = {
1403 	VOPARG_OFFSETOF(struct vop_reallocblks_args,a_vp),
1404 	VDESC_NO_OFFSET
1405 };
1406 const struct vnodeop_desc vop_reallocblks_desc = {
1407 	42,
1408 	"vop_reallocblks",
1409 	0,
1410 	vop_reallocblks_vp_offsets,
1411 	VDESC_NO_OFFSET,
1412 	VDESC_NO_OFFSET,
1413 	VDESC_NO_OFFSET,
1414 	VDESC_NO_OFFSET,
1415 	NULL,
1416 };
1417 #ifdef VNODE_OP_NOINLINE
1418 int
1419 VOP_REALLOCBLKS(vp, buflist)
1420 	struct vnode *vp;
1421 	struct cluster_save *buflist;
1422 {
1423 	struct vop_reallocblks_args a;
1424 	a.a_desc = VDESC(vop_reallocblks);
1425 	a.a_vp = vp;
1426 	a.a_buflist = buflist;
1427 	return (VCALL(vp, VOFFSET(vop_reallocblks), &a));
1428 }
1429 #endif
1430 
1431 const int vop_vfree_vp_offsets[] = {
1432 	VOPARG_OFFSETOF(struct vop_vfree_args,a_pvp),
1433 	VDESC_NO_OFFSET
1434 };
1435 const struct vnodeop_desc vop_vfree_desc = {
1436 	43,
1437 	"vop_vfree",
1438 	0,
1439 	vop_vfree_vp_offsets,
1440 	VDESC_NO_OFFSET,
1441 	VDESC_NO_OFFSET,
1442 	VDESC_NO_OFFSET,
1443 	VDESC_NO_OFFSET,
1444 	NULL,
1445 };
1446 #ifdef VNODE_OP_NOINLINE
1447 int
1448 VOP_VFREE(pvp, ino, mode)
1449 	struct vnode *pvp;
1450 	ino_t ino;
1451 	int mode;
1452 {
1453 	struct vop_vfree_args a;
1454 	a.a_desc = VDESC(vop_vfree);
1455 	a.a_pvp = pvp;
1456 	a.a_ino = ino;
1457 	a.a_mode = mode;
1458 	return (VCALL(pvp, VOFFSET(vop_vfree), &a));
1459 }
1460 #endif
1461 
1462 const int vop_truncate_vp_offsets[] = {
1463 	VOPARG_OFFSETOF(struct vop_truncate_args,a_vp),
1464 	VDESC_NO_OFFSET
1465 };
1466 const struct vnodeop_desc vop_truncate_desc = {
1467 	44,
1468 	"vop_truncate",
1469 	0,
1470 	vop_truncate_vp_offsets,
1471 	VDESC_NO_OFFSET,
1472 	VOPARG_OFFSETOF(struct vop_truncate_args, a_cred),
1473 	VOPARG_OFFSETOF(struct vop_truncate_args, a_p),
1474 	VDESC_NO_OFFSET,
1475 	NULL,
1476 };
1477 #ifdef VNODE_OP_NOINLINE
1478 int
1479 VOP_TRUNCATE(vp, length, flags, cred, p)
1480 	struct vnode *vp;
1481 	off_t length;
1482 	int flags;
1483 	struct ucred *cred;
1484 	struct proc *p;
1485 {
1486 	struct vop_truncate_args a;
1487 	a.a_desc = VDESC(vop_truncate);
1488 	a.a_vp = vp;
1489 	a.a_length = length;
1490 	a.a_flags = flags;
1491 	a.a_cred = cred;
1492 	a.a_p = p;
1493 	return (VCALL(vp, VOFFSET(vop_truncate), &a));
1494 }
1495 #endif
1496 
1497 const int vop_update_vp_offsets[] = {
1498 	VOPARG_OFFSETOF(struct vop_update_args,a_vp),
1499 	VDESC_NO_OFFSET
1500 };
1501 const struct vnodeop_desc vop_update_desc = {
1502 	45,
1503 	"vop_update",
1504 	0,
1505 	vop_update_vp_offsets,
1506 	VDESC_NO_OFFSET,
1507 	VDESC_NO_OFFSET,
1508 	VDESC_NO_OFFSET,
1509 	VDESC_NO_OFFSET,
1510 	NULL,
1511 };
1512 #ifdef VNODE_OP_NOINLINE
1513 int
1514 VOP_UPDATE(vp, access, modify, flags)
1515 	struct vnode *vp;
1516 	struct timespec *access;
1517 	struct timespec *modify;
1518 	int flags;
1519 {
1520 	struct vop_update_args a;
1521 	a.a_desc = VDESC(vop_update);
1522 	a.a_vp = vp;
1523 	a.a_access = access;
1524 	a.a_modify = modify;
1525 	a.a_flags = flags;
1526 	return (VCALL(vp, VOFFSET(vop_update), &a));
1527 }
1528 #endif
1529 
1530 const int vop_lease_vp_offsets[] = {
1531 	VOPARG_OFFSETOF(struct vop_lease_args,a_vp),
1532 	VDESC_NO_OFFSET
1533 };
1534 const struct vnodeop_desc vop_lease_desc = {
1535 	46,
1536 	"vop_lease",
1537 	0,
1538 	vop_lease_vp_offsets,
1539 	VDESC_NO_OFFSET,
1540 	VOPARG_OFFSETOF(struct vop_lease_args, a_cred),
1541 	VOPARG_OFFSETOF(struct vop_lease_args, a_p),
1542 	VDESC_NO_OFFSET,
1543 	NULL,
1544 };
1545 #ifdef VNODE_OP_NOINLINE
1546 int
1547 VOP_LEASE(vp, p, cred, flag)
1548 	struct vnode *vp;
1549 	struct proc *p;
1550 	struct ucred *cred;
1551 	int flag;
1552 {
1553 	struct vop_lease_args a;
1554 	a.a_desc = VDESC(vop_lease);
1555 	a.a_vp = vp;
1556 	a.a_p = p;
1557 	a.a_cred = cred;
1558 	a.a_flag = flag;
1559 	return (VCALL(vp, VOFFSET(vop_lease), &a));
1560 }
1561 #endif
1562 
1563 const int vop_whiteout_vp_offsets[] = {
1564 	VOPARG_OFFSETOF(struct vop_whiteout_args,a_dvp),
1565 	VDESC_NO_OFFSET
1566 };
1567 const struct vnodeop_desc vop_whiteout_desc = {
1568 	47,
1569 	"vop_whiteout",
1570 	0,
1571 	vop_whiteout_vp_offsets,
1572 	VDESC_NO_OFFSET,
1573 	VDESC_NO_OFFSET,
1574 	VDESC_NO_OFFSET,
1575 	VOPARG_OFFSETOF(struct vop_whiteout_args, a_cnp),
1576 	NULL,
1577 };
1578 #ifdef VNODE_OP_NOINLINE
1579 int
1580 VOP_WHITEOUT(dvp, cnp, flags)
1581 	struct vnode *dvp;
1582 	struct componentname *cnp;
1583 	int flags;
1584 {
1585 	struct vop_whiteout_args a;
1586 	a.a_desc = VDESC(vop_whiteout);
1587 	a.a_dvp = dvp;
1588 	a.a_cnp = cnp;
1589 	a.a_flags = flags;
1590 	return (VCALL(dvp, VOFFSET(vop_whiteout), &a));
1591 }
1592 #endif
1593 
1594 const int vop_getpages_vp_offsets[] = {
1595 	VOPARG_OFFSETOF(struct vop_getpages_args,a_vp),
1596 	VDESC_NO_OFFSET
1597 };
1598 const struct vnodeop_desc vop_getpages_desc = {
1599 	48,
1600 	"vop_getpages",
1601 	0,
1602 	vop_getpages_vp_offsets,
1603 	VDESC_NO_OFFSET,
1604 	VDESC_NO_OFFSET,
1605 	VDESC_NO_OFFSET,
1606 	VDESC_NO_OFFSET,
1607 	NULL,
1608 };
1609 #ifdef VNODE_OP_NOINLINE
1610 int
1611 VOP_GETPAGES(vp, offset, m, count, centeridx, access_type, advice, flags)
1612 	struct vnode *vp;
1613 	voff_t offset;
1614 	struct vm_page **m;
1615 	int *count;
1616 	int centeridx;
1617 	vm_prot_t access_type;
1618 	int advice;
1619 	int flags;
1620 {
1621 	struct vop_getpages_args a;
1622 	a.a_desc = VDESC(vop_getpages);
1623 	a.a_vp = vp;
1624 	a.a_offset = offset;
1625 	a.a_m = m;
1626 	a.a_count = count;
1627 	a.a_centeridx = centeridx;
1628 	a.a_access_type = access_type;
1629 	a.a_advice = advice;
1630 	a.a_flags = flags;
1631 	return (VCALL(vp, VOFFSET(vop_getpages), &a));
1632 }
1633 #endif
1634 
1635 const int vop_putpages_vp_offsets[] = {
1636 	VOPARG_OFFSETOF(struct vop_putpages_args,a_vp),
1637 	VDESC_NO_OFFSET
1638 };
1639 const struct vnodeop_desc vop_putpages_desc = {
1640 	49,
1641 	"vop_putpages",
1642 	0,
1643 	vop_putpages_vp_offsets,
1644 	VDESC_NO_OFFSET,
1645 	VDESC_NO_OFFSET,
1646 	VDESC_NO_OFFSET,
1647 	VDESC_NO_OFFSET,
1648 	NULL,
1649 };
1650 #ifdef VNODE_OP_NOINLINE
1651 int
1652 VOP_PUTPAGES(vp, offlo, offhi, flags)
1653 	struct vnode *vp;
1654 	voff_t offlo;
1655 	voff_t offhi;
1656 	int flags;
1657 {
1658 	struct vop_putpages_args a;
1659 	a.a_desc = VDESC(vop_putpages);
1660 	a.a_vp = vp;
1661 	a.a_offlo = offlo;
1662 	a.a_offhi = offhi;
1663 	a.a_flags = flags;
1664 	return (VCALL(vp, VOFFSET(vop_putpages), &a));
1665 }
1666 #endif
1667 
1668 /* End of special cases. */
1669 
1670 const struct vnodeop_desc * const vfs_op_descs[] = {
1671 	&vop_default_desc,	/* MUST BE FIRST */
1672 	&vop_bwrite_desc,	/* XXX: SPECIAL CASE */
1673 
1674 	&vop_lookup_desc,
1675 	&vop_create_desc,
1676 	&vop_mknod_desc,
1677 	&vop_open_desc,
1678 	&vop_close_desc,
1679 	&vop_access_desc,
1680 	&vop_getattr_desc,
1681 	&vop_setattr_desc,
1682 	&vop_read_desc,
1683 	&vop_write_desc,
1684 	&vop_ioctl_desc,
1685 	&vop_fcntl_desc,
1686 	&vop_poll_desc,
1687 	&vop_kqfilter_desc,
1688 	&vop_revoke_desc,
1689 	&vop_mmap_desc,
1690 	&vop_fsync_desc,
1691 	&vop_seek_desc,
1692 	&vop_remove_desc,
1693 	&vop_link_desc,
1694 	&vop_rename_desc,
1695 	&vop_mkdir_desc,
1696 	&vop_rmdir_desc,
1697 	&vop_symlink_desc,
1698 	&vop_readdir_desc,
1699 	&vop_readlink_desc,
1700 	&vop_abortop_desc,
1701 	&vop_inactive_desc,
1702 	&vop_reclaim_desc,
1703 	&vop_lock_desc,
1704 	&vop_unlock_desc,
1705 	&vop_bmap_desc,
1706 	&vop_strategy_desc,
1707 	&vop_print_desc,
1708 	&vop_islocked_desc,
1709 	&vop_pathconf_desc,
1710 	&vop_advlock_desc,
1711 	&vop_blkatoff_desc,
1712 	&vop_valloc_desc,
1713 	&vop_balloc_desc,
1714 	&vop_reallocblks_desc,
1715 	&vop_vfree_desc,
1716 	&vop_truncate_desc,
1717 	&vop_update_desc,
1718 	&vop_lease_desc,
1719 	&vop_whiteout_desc,
1720 	&vop_getpages_desc,
1721 	&vop_putpages_desc,
1722 	NULL
1723 };
1724 
1725