No empty .Rs/.Re
[netbsd-mini2440.git] / sys / kern / vnode_if.c
blobfd260f1b651753e2c67f250e42396ea5c8216fdc
1 /* $NetBSD$ */
3 /*
4 * Warning: DO NOT EDIT! This file is automatically generated!
5 * (Modifications made here may easily be lost!)
7 * Created from the file:
8 * NetBSD: vnode_if.src,v 1.58 2008/11/15 19:08:12 pooka Exp
9 * by the script:
10 * NetBSD: vnode_if.sh,v 1.52 2009/09/29 11:51:02 pooka Exp
14 * Copyright (c) 1992, 1993, 1994, 1995
15 * The Regents of the University of California. All rights reserved.
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.
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.
42 #include <sys/cdefs.h>
43 __KERNEL_RCSID(0, "$NetBSD$");
45 #include <sys/param.h>
46 #include <sys/mount.h>
47 #include <sys/buf.h>
48 #include <sys/vnode.h>
49 #include <sys/lock.h>
51 const struct vnodeop_desc vop_default_desc = {
53 "default",
55 NULL,
56 VDESC_NO_OFFSET,
57 VDESC_NO_OFFSET,
58 VDESC_NO_OFFSET,
59 NULL,
63 /* Special cases: */
65 const int vop_bwrite_vp_offsets[] = {
66 VDESC_NO_OFFSET
68 const struct vnodeop_desc vop_bwrite_desc = {
69 VOP_BWRITE_DESCOFFSET,
70 "vop_bwrite",
72 vop_bwrite_vp_offsets,
73 VDESC_NO_OFFSET,
74 VDESC_NO_OFFSET,
75 VDESC_NO_OFFSET,
76 NULL,
78 int
79 VOP_BWRITE(struct buf *bp)
81 int error;
82 bool mpsafe;
83 struct vop_bwrite_args a;
84 a.a_desc = VDESC(vop_bwrite);
85 a.a_bp = bp;
86 mpsafe = (bp->b_vp->v_vflag & VV_MPSAFE);
87 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
88 error = (VCALL(bp->b_vp, VOFFSET(vop_bwrite), &a));
89 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
90 return error;
93 /* End of special cases */
95 const int vop_lookup_vp_offsets[] = {
96 VOPARG_OFFSETOF(struct vop_lookup_args,a_dvp),
97 VDESC_NO_OFFSET
99 const struct vnodeop_desc vop_lookup_desc = {
100 VOP_LOOKUP_DESCOFFSET,
101 "vop_lookup",
103 vop_lookup_vp_offsets,
104 VOPARG_OFFSETOF(struct vop_lookup_args, a_vpp),
105 VDESC_NO_OFFSET,
106 VOPARG_OFFSETOF(struct vop_lookup_args, a_cnp),
107 NULL,
110 VOP_LOOKUP(struct vnode *dvp,
111 struct vnode **vpp,
112 struct componentname *cnp)
114 int error;
115 bool mpsafe;
116 struct vop_lookup_args a;
117 a.a_desc = VDESC(vop_lookup);
118 a.a_dvp = dvp;
119 a.a_vpp = vpp;
120 a.a_cnp = cnp;
121 mpsafe = (dvp->v_vflag & VV_MPSAFE);
122 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
123 error = (VCALL(dvp, VOFFSET(vop_lookup), &a));
124 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
125 #ifdef DIAGNOSTIC
126 if (error == 0)
127 KASSERT((*vpp)->v_size != VSIZENOTSET
128 && (*vpp)->v_writesize != VSIZENOTSET);
129 #endif /* DIAGNOSTIC */
130 return error;
133 const int vop_create_vp_offsets[] = {
134 VOPARG_OFFSETOF(struct vop_create_args,a_dvp),
135 VDESC_NO_OFFSET
137 const struct vnodeop_desc vop_create_desc = {
138 VOP_CREATE_DESCOFFSET,
139 "vop_create",
140 0 | VDESC_VP0_WILLPUT,
141 vop_create_vp_offsets,
142 VOPARG_OFFSETOF(struct vop_create_args, a_vpp),
143 VDESC_NO_OFFSET,
144 VOPARG_OFFSETOF(struct vop_create_args, a_cnp),
145 NULL,
148 VOP_CREATE(struct vnode *dvp,
149 struct vnode **vpp,
150 struct componentname *cnp,
151 struct vattr *vap)
153 int error;
154 bool mpsafe;
155 struct vop_create_args a;
156 a.a_desc = VDESC(vop_create);
157 a.a_dvp = dvp;
158 a.a_vpp = vpp;
159 a.a_cnp = cnp;
160 a.a_vap = vap;
161 mpsafe = (dvp->v_vflag & VV_MPSAFE);
162 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
163 error = (VCALL(dvp, VOFFSET(vop_create), &a));
164 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
165 #ifdef DIAGNOSTIC
166 if (error == 0)
167 KASSERT((*vpp)->v_size != VSIZENOTSET
168 && (*vpp)->v_writesize != VSIZENOTSET);
169 #endif /* DIAGNOSTIC */
170 return error;
173 const int vop_mknod_vp_offsets[] = {
174 VOPARG_OFFSETOF(struct vop_mknod_args,a_dvp),
175 VDESC_NO_OFFSET
177 const struct vnodeop_desc vop_mknod_desc = {
178 VOP_MKNOD_DESCOFFSET,
179 "vop_mknod",
180 0 | VDESC_VP0_WILLPUT,
181 vop_mknod_vp_offsets,
182 VOPARG_OFFSETOF(struct vop_mknod_args, a_vpp),
183 VDESC_NO_OFFSET,
184 VOPARG_OFFSETOF(struct vop_mknod_args, a_cnp),
185 NULL,
188 VOP_MKNOD(struct vnode *dvp,
189 struct vnode **vpp,
190 struct componentname *cnp,
191 struct vattr *vap)
193 int error;
194 bool mpsafe;
195 struct vop_mknod_args a;
196 a.a_desc = VDESC(vop_mknod);
197 a.a_dvp = dvp;
198 a.a_vpp = vpp;
199 a.a_cnp = cnp;
200 a.a_vap = vap;
201 mpsafe = (dvp->v_vflag & VV_MPSAFE);
202 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
203 error = (VCALL(dvp, VOFFSET(vop_mknod), &a));
204 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
205 #ifdef DIAGNOSTIC
206 if (error == 0)
207 KASSERT((*vpp)->v_size != VSIZENOTSET
208 && (*vpp)->v_writesize != VSIZENOTSET);
209 #endif /* DIAGNOSTIC */
210 return error;
213 const int vop_open_vp_offsets[] = {
214 VOPARG_OFFSETOF(struct vop_open_args,a_vp),
215 VDESC_NO_OFFSET
217 const struct vnodeop_desc vop_open_desc = {
218 VOP_OPEN_DESCOFFSET,
219 "vop_open",
221 vop_open_vp_offsets,
222 VDESC_NO_OFFSET,
223 VOPARG_OFFSETOF(struct vop_open_args, a_cred),
224 VDESC_NO_OFFSET,
225 NULL,
228 VOP_OPEN(struct vnode *vp,
229 int mode,
230 kauth_cred_t cred)
232 int error;
233 bool mpsafe;
234 struct vop_open_args a;
235 a.a_desc = VDESC(vop_open);
236 a.a_vp = vp;
237 a.a_mode = mode;
238 a.a_cred = cred;
239 mpsafe = (vp->v_vflag & VV_MPSAFE);
240 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
241 error = (VCALL(vp, VOFFSET(vop_open), &a));
242 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
243 return error;
246 const int vop_close_vp_offsets[] = {
247 VOPARG_OFFSETOF(struct vop_close_args,a_vp),
248 VDESC_NO_OFFSET
250 const struct vnodeop_desc vop_close_desc = {
251 VOP_CLOSE_DESCOFFSET,
252 "vop_close",
254 vop_close_vp_offsets,
255 VDESC_NO_OFFSET,
256 VOPARG_OFFSETOF(struct vop_close_args, a_cred),
257 VDESC_NO_OFFSET,
258 NULL,
261 VOP_CLOSE(struct vnode *vp,
262 int fflag,
263 kauth_cred_t cred)
265 int error;
266 bool mpsafe;
267 struct vop_close_args a;
268 a.a_desc = VDESC(vop_close);
269 a.a_vp = vp;
270 a.a_fflag = fflag;
271 a.a_cred = cred;
272 mpsafe = (vp->v_vflag & VV_MPSAFE);
273 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
274 error = (VCALL(vp, VOFFSET(vop_close), &a));
275 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
276 return error;
279 const int vop_access_vp_offsets[] = {
280 VOPARG_OFFSETOF(struct vop_access_args,a_vp),
281 VDESC_NO_OFFSET
283 const struct vnodeop_desc vop_access_desc = {
284 VOP_ACCESS_DESCOFFSET,
285 "vop_access",
287 vop_access_vp_offsets,
288 VDESC_NO_OFFSET,
289 VOPARG_OFFSETOF(struct vop_access_args, a_cred),
290 VDESC_NO_OFFSET,
291 NULL,
294 VOP_ACCESS(struct vnode *vp,
295 int mode,
296 kauth_cred_t cred)
298 int error;
299 bool mpsafe;
300 struct vop_access_args a;
301 a.a_desc = VDESC(vop_access);
302 a.a_vp = vp;
303 a.a_mode = mode;
304 a.a_cred = cred;
305 mpsafe = (vp->v_vflag & VV_MPSAFE);
306 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
307 error = (VCALL(vp, VOFFSET(vop_access), &a));
308 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
309 return error;
312 const int vop_getattr_vp_offsets[] = {
313 VOPARG_OFFSETOF(struct vop_getattr_args,a_vp),
314 VDESC_NO_OFFSET
316 const struct vnodeop_desc vop_getattr_desc = {
317 VOP_GETATTR_DESCOFFSET,
318 "vop_getattr",
320 vop_getattr_vp_offsets,
321 VDESC_NO_OFFSET,
322 VOPARG_OFFSETOF(struct vop_getattr_args, a_cred),
323 VDESC_NO_OFFSET,
324 NULL,
327 VOP_GETATTR(struct vnode *vp,
328 struct vattr *vap,
329 kauth_cred_t cred)
331 int error;
332 bool mpsafe;
333 struct vop_getattr_args a;
334 a.a_desc = VDESC(vop_getattr);
335 a.a_vp = vp;
336 a.a_vap = vap;
337 a.a_cred = cred;
338 mpsafe = (vp->v_vflag & VV_MPSAFE);
339 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
340 error = (VCALL(vp, VOFFSET(vop_getattr), &a));
341 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
342 return error;
345 const int vop_setattr_vp_offsets[] = {
346 VOPARG_OFFSETOF(struct vop_setattr_args,a_vp),
347 VDESC_NO_OFFSET
349 const struct vnodeop_desc vop_setattr_desc = {
350 VOP_SETATTR_DESCOFFSET,
351 "vop_setattr",
353 vop_setattr_vp_offsets,
354 VDESC_NO_OFFSET,
355 VOPARG_OFFSETOF(struct vop_setattr_args, a_cred),
356 VDESC_NO_OFFSET,
357 NULL,
360 VOP_SETATTR(struct vnode *vp,
361 struct vattr *vap,
362 kauth_cred_t cred)
364 int error;
365 bool mpsafe;
366 struct vop_setattr_args a;
367 a.a_desc = VDESC(vop_setattr);
368 a.a_vp = vp;
369 a.a_vap = vap;
370 a.a_cred = cred;
371 mpsafe = (vp->v_vflag & VV_MPSAFE);
372 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
373 error = (VCALL(vp, VOFFSET(vop_setattr), &a));
374 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
375 return error;
378 const int vop_read_vp_offsets[] = {
379 VOPARG_OFFSETOF(struct vop_read_args,a_vp),
380 VDESC_NO_OFFSET
382 const struct vnodeop_desc vop_read_desc = {
383 VOP_READ_DESCOFFSET,
384 "vop_read",
386 vop_read_vp_offsets,
387 VDESC_NO_OFFSET,
388 VOPARG_OFFSETOF(struct vop_read_args, a_cred),
389 VDESC_NO_OFFSET,
390 NULL,
393 VOP_READ(struct vnode *vp,
394 struct uio *uio,
395 int ioflag,
396 kauth_cred_t cred)
398 int error;
399 bool mpsafe;
400 struct vop_read_args a;
401 a.a_desc = VDESC(vop_read);
402 a.a_vp = vp;
403 a.a_uio = uio;
404 a.a_ioflag = ioflag;
405 a.a_cred = cred;
406 mpsafe = (vp->v_vflag & VV_MPSAFE);
407 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
408 error = (VCALL(vp, VOFFSET(vop_read), &a));
409 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
410 return error;
413 const int vop_write_vp_offsets[] = {
414 VOPARG_OFFSETOF(struct vop_write_args,a_vp),
415 VDESC_NO_OFFSET
417 const struct vnodeop_desc vop_write_desc = {
418 VOP_WRITE_DESCOFFSET,
419 "vop_write",
421 vop_write_vp_offsets,
422 VDESC_NO_OFFSET,
423 VOPARG_OFFSETOF(struct vop_write_args, a_cred),
424 VDESC_NO_OFFSET,
425 NULL,
428 VOP_WRITE(struct vnode *vp,
429 struct uio *uio,
430 int ioflag,
431 kauth_cred_t cred)
433 int error;
434 bool mpsafe;
435 struct vop_write_args a;
436 a.a_desc = VDESC(vop_write);
437 a.a_vp = vp;
438 a.a_uio = uio;
439 a.a_ioflag = ioflag;
440 a.a_cred = cred;
441 mpsafe = (vp->v_vflag & VV_MPSAFE);
442 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
443 error = (VCALL(vp, VOFFSET(vop_write), &a));
444 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
445 return error;
448 const int vop_ioctl_vp_offsets[] = {
449 VOPARG_OFFSETOF(struct vop_ioctl_args,a_vp),
450 VDESC_NO_OFFSET
452 const struct vnodeop_desc vop_ioctl_desc = {
453 VOP_IOCTL_DESCOFFSET,
454 "vop_ioctl",
456 vop_ioctl_vp_offsets,
457 VDESC_NO_OFFSET,
458 VOPARG_OFFSETOF(struct vop_ioctl_args, a_cred),
459 VDESC_NO_OFFSET,
460 NULL,
463 VOP_IOCTL(struct vnode *vp,
464 u_long command,
465 void *data,
466 int fflag,
467 kauth_cred_t cred)
469 int error;
470 bool mpsafe;
471 struct vop_ioctl_args a;
472 a.a_desc = VDESC(vop_ioctl);
473 a.a_vp = vp;
474 a.a_command = command;
475 a.a_data = data;
476 a.a_fflag = fflag;
477 a.a_cred = cred;
478 mpsafe = (vp->v_vflag & VV_MPSAFE);
479 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
480 error = (VCALL(vp, VOFFSET(vop_ioctl), &a));
481 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
482 return error;
485 const int vop_fcntl_vp_offsets[] = {
486 VOPARG_OFFSETOF(struct vop_fcntl_args,a_vp),
487 VDESC_NO_OFFSET
489 const struct vnodeop_desc vop_fcntl_desc = {
490 VOP_FCNTL_DESCOFFSET,
491 "vop_fcntl",
493 vop_fcntl_vp_offsets,
494 VDESC_NO_OFFSET,
495 VOPARG_OFFSETOF(struct vop_fcntl_args, a_cred),
496 VDESC_NO_OFFSET,
497 NULL,
500 VOP_FCNTL(struct vnode *vp,
501 u_int command,
502 void *data,
503 int fflag,
504 kauth_cred_t cred)
506 int error;
507 bool mpsafe;
508 struct vop_fcntl_args a;
509 a.a_desc = VDESC(vop_fcntl);
510 a.a_vp = vp;
511 a.a_command = command;
512 a.a_data = data;
513 a.a_fflag = fflag;
514 a.a_cred = cred;
515 mpsafe = (vp->v_vflag & VV_MPSAFE);
516 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
517 error = (VCALL(vp, VOFFSET(vop_fcntl), &a));
518 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
519 return error;
522 const int vop_poll_vp_offsets[] = {
523 VOPARG_OFFSETOF(struct vop_poll_args,a_vp),
524 VDESC_NO_OFFSET
526 const struct vnodeop_desc vop_poll_desc = {
527 VOP_POLL_DESCOFFSET,
528 "vop_poll",
530 vop_poll_vp_offsets,
531 VDESC_NO_OFFSET,
532 VDESC_NO_OFFSET,
533 VDESC_NO_OFFSET,
534 NULL,
537 VOP_POLL(struct vnode *vp,
538 int events)
540 int error;
541 bool mpsafe;
542 struct vop_poll_args a;
543 a.a_desc = VDESC(vop_poll);
544 a.a_vp = vp;
545 a.a_events = events;
546 mpsafe = (vp->v_vflag & VV_MPSAFE);
547 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
548 error = (VCALL(vp, VOFFSET(vop_poll), &a));
549 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
550 return error;
553 const int vop_kqfilter_vp_offsets[] = {
554 VOPARG_OFFSETOF(struct vop_kqfilter_args,a_vp),
555 VDESC_NO_OFFSET
557 const struct vnodeop_desc vop_kqfilter_desc = {
558 VOP_KQFILTER_DESCOFFSET,
559 "vop_kqfilter",
561 vop_kqfilter_vp_offsets,
562 VDESC_NO_OFFSET,
563 VDESC_NO_OFFSET,
564 VDESC_NO_OFFSET,
565 NULL,
568 VOP_KQFILTER(struct vnode *vp,
569 struct knote *kn)
571 int error;
572 bool mpsafe;
573 struct vop_kqfilter_args a;
574 a.a_desc = VDESC(vop_kqfilter);
575 a.a_vp = vp;
576 a.a_kn = kn;
577 mpsafe = (vp->v_vflag & VV_MPSAFE);
578 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
579 error = (VCALL(vp, VOFFSET(vop_kqfilter), &a));
580 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
581 return error;
584 const int vop_revoke_vp_offsets[] = {
585 VOPARG_OFFSETOF(struct vop_revoke_args,a_vp),
586 VDESC_NO_OFFSET
588 const struct vnodeop_desc vop_revoke_desc = {
589 VOP_REVOKE_DESCOFFSET,
590 "vop_revoke",
592 vop_revoke_vp_offsets,
593 VDESC_NO_OFFSET,
594 VDESC_NO_OFFSET,
595 VDESC_NO_OFFSET,
596 NULL,
599 VOP_REVOKE(struct vnode *vp,
600 int flags)
602 int error;
603 bool mpsafe;
604 struct vop_revoke_args a;
605 a.a_desc = VDESC(vop_revoke);
606 a.a_vp = vp;
607 a.a_flags = flags;
608 mpsafe = (vp->v_vflag & VV_MPSAFE);
609 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
610 error = (VCALL(vp, VOFFSET(vop_revoke), &a));
611 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
612 return error;
615 const int vop_mmap_vp_offsets[] = {
616 VOPARG_OFFSETOF(struct vop_mmap_args,a_vp),
617 VDESC_NO_OFFSET
619 const struct vnodeop_desc vop_mmap_desc = {
620 VOP_MMAP_DESCOFFSET,
621 "vop_mmap",
623 vop_mmap_vp_offsets,
624 VDESC_NO_OFFSET,
625 VOPARG_OFFSETOF(struct vop_mmap_args, a_cred),
626 VDESC_NO_OFFSET,
627 NULL,
630 VOP_MMAP(struct vnode *vp,
631 vm_prot_t prot,
632 kauth_cred_t cred)
634 int error;
635 bool mpsafe;
636 struct vop_mmap_args a;
637 a.a_desc = VDESC(vop_mmap);
638 a.a_vp = vp;
639 a.a_prot = prot;
640 a.a_cred = cred;
641 mpsafe = (vp->v_vflag & VV_MPSAFE);
642 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
643 error = (VCALL(vp, VOFFSET(vop_mmap), &a));
644 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
645 return error;
648 const int vop_fsync_vp_offsets[] = {
649 VOPARG_OFFSETOF(struct vop_fsync_args,a_vp),
650 VDESC_NO_OFFSET
652 const struct vnodeop_desc vop_fsync_desc = {
653 VOP_FSYNC_DESCOFFSET,
654 "vop_fsync",
656 vop_fsync_vp_offsets,
657 VDESC_NO_OFFSET,
658 VOPARG_OFFSETOF(struct vop_fsync_args, a_cred),
659 VDESC_NO_OFFSET,
660 NULL,
663 VOP_FSYNC(struct vnode *vp,
664 kauth_cred_t cred,
665 int flags,
666 off_t offlo,
667 off_t offhi)
669 int error;
670 bool mpsafe;
671 struct vop_fsync_args a;
672 a.a_desc = VDESC(vop_fsync);
673 a.a_vp = vp;
674 a.a_cred = cred;
675 a.a_flags = flags;
676 a.a_offlo = offlo;
677 a.a_offhi = offhi;
678 mpsafe = (vp->v_vflag & VV_MPSAFE);
679 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
680 error = (VCALL(vp, VOFFSET(vop_fsync), &a));
681 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
682 return error;
685 const int vop_seek_vp_offsets[] = {
686 VOPARG_OFFSETOF(struct vop_seek_args,a_vp),
687 VDESC_NO_OFFSET
689 const struct vnodeop_desc vop_seek_desc = {
690 VOP_SEEK_DESCOFFSET,
691 "vop_seek",
693 vop_seek_vp_offsets,
694 VDESC_NO_OFFSET,
695 VOPARG_OFFSETOF(struct vop_seek_args, a_cred),
696 VDESC_NO_OFFSET,
697 NULL,
700 VOP_SEEK(struct vnode *vp,
701 off_t oldoff,
702 off_t newoff,
703 kauth_cred_t cred)
705 int error;
706 bool mpsafe;
707 struct vop_seek_args a;
708 a.a_desc = VDESC(vop_seek);
709 a.a_vp = vp;
710 a.a_oldoff = oldoff;
711 a.a_newoff = newoff;
712 a.a_cred = cred;
713 mpsafe = (vp->v_vflag & VV_MPSAFE);
714 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
715 error = (VCALL(vp, VOFFSET(vop_seek), &a));
716 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
717 return error;
720 const int vop_remove_vp_offsets[] = {
721 VOPARG_OFFSETOF(struct vop_remove_args,a_dvp),
722 VOPARG_OFFSETOF(struct vop_remove_args,a_vp),
723 VDESC_NO_OFFSET
725 const struct vnodeop_desc vop_remove_desc = {
726 VOP_REMOVE_DESCOFFSET,
727 "vop_remove",
728 0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
729 vop_remove_vp_offsets,
730 VDESC_NO_OFFSET,
731 VDESC_NO_OFFSET,
732 VOPARG_OFFSETOF(struct vop_remove_args, a_cnp),
733 NULL,
736 VOP_REMOVE(struct vnode *dvp,
737 struct vnode *vp,
738 struct componentname *cnp)
740 int error;
741 bool mpsafe;
742 struct vop_remove_args a;
743 a.a_desc = VDESC(vop_remove);
744 a.a_dvp = dvp;
745 a.a_vp = vp;
746 a.a_cnp = cnp;
747 mpsafe = (dvp->v_vflag & VV_MPSAFE);
748 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
749 error = (VCALL(dvp, VOFFSET(vop_remove), &a));
750 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
751 return error;
754 const int vop_link_vp_offsets[] = {
755 VOPARG_OFFSETOF(struct vop_link_args,a_dvp),
756 VOPARG_OFFSETOF(struct vop_link_args,a_vp),
757 VDESC_NO_OFFSET
759 const struct vnodeop_desc vop_link_desc = {
760 VOP_LINK_DESCOFFSET,
761 "vop_link",
762 0 | VDESC_VP0_WILLPUT,
763 vop_link_vp_offsets,
764 VDESC_NO_OFFSET,
765 VDESC_NO_OFFSET,
766 VOPARG_OFFSETOF(struct vop_link_args, a_cnp),
767 NULL,
770 VOP_LINK(struct vnode *dvp,
771 struct vnode *vp,
772 struct componentname *cnp)
774 int error;
775 bool mpsafe;
776 struct vop_link_args a;
777 a.a_desc = VDESC(vop_link);
778 a.a_dvp = dvp;
779 a.a_vp = vp;
780 a.a_cnp = cnp;
781 mpsafe = (dvp->v_vflag & VV_MPSAFE);
782 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
783 error = (VCALL(dvp, VOFFSET(vop_link), &a));
784 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
785 return error;
788 const int vop_rename_vp_offsets[] = {
789 VOPARG_OFFSETOF(struct vop_rename_args,a_fdvp),
790 VOPARG_OFFSETOF(struct vop_rename_args,a_fvp),
791 VOPARG_OFFSETOF(struct vop_rename_args,a_tdvp),
792 VOPARG_OFFSETOF(struct vop_rename_args,a_tvp),
793 VDESC_NO_OFFSET
795 const struct vnodeop_desc vop_rename_desc = {
796 VOP_RENAME_DESCOFFSET,
797 "vop_rename",
798 0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLPUT | VDESC_VP3_WILLPUT,
799 vop_rename_vp_offsets,
800 VDESC_NO_OFFSET,
801 VDESC_NO_OFFSET,
802 VOPARG_OFFSETOF(struct vop_rename_args, a_fcnp),
803 NULL,
806 VOP_RENAME(struct vnode *fdvp,
807 struct vnode *fvp,
808 struct componentname *fcnp,
809 struct vnode *tdvp,
810 struct vnode *tvp,
811 struct componentname *tcnp)
813 int error;
814 bool mpsafe;
815 struct vop_rename_args a;
816 a.a_desc = VDESC(vop_rename);
817 a.a_fdvp = fdvp;
818 a.a_fvp = fvp;
819 a.a_fcnp = fcnp;
820 a.a_tdvp = tdvp;
821 a.a_tvp = tvp;
822 a.a_tcnp = tcnp;
823 mpsafe = (fdvp->v_vflag & VV_MPSAFE);
824 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
825 error = (VCALL(fdvp, VOFFSET(vop_rename), &a));
826 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
827 return error;
830 const int vop_mkdir_vp_offsets[] = {
831 VOPARG_OFFSETOF(struct vop_mkdir_args,a_dvp),
832 VDESC_NO_OFFSET
834 const struct vnodeop_desc vop_mkdir_desc = {
835 VOP_MKDIR_DESCOFFSET,
836 "vop_mkdir",
837 0 | VDESC_VP0_WILLPUT,
838 vop_mkdir_vp_offsets,
839 VOPARG_OFFSETOF(struct vop_mkdir_args, a_vpp),
840 VDESC_NO_OFFSET,
841 VOPARG_OFFSETOF(struct vop_mkdir_args, a_cnp),
842 NULL,
845 VOP_MKDIR(struct vnode *dvp,
846 struct vnode **vpp,
847 struct componentname *cnp,
848 struct vattr *vap)
850 int error;
851 bool mpsafe;
852 struct vop_mkdir_args a;
853 a.a_desc = VDESC(vop_mkdir);
854 a.a_dvp = dvp;
855 a.a_vpp = vpp;
856 a.a_cnp = cnp;
857 a.a_vap = vap;
858 mpsafe = (dvp->v_vflag & VV_MPSAFE);
859 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
860 error = (VCALL(dvp, VOFFSET(vop_mkdir), &a));
861 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
862 #ifdef DIAGNOSTIC
863 if (error == 0)
864 KASSERT((*vpp)->v_size != VSIZENOTSET
865 && (*vpp)->v_writesize != VSIZENOTSET);
866 #endif /* DIAGNOSTIC */
867 return error;
870 const int vop_rmdir_vp_offsets[] = {
871 VOPARG_OFFSETOF(struct vop_rmdir_args,a_dvp),
872 VOPARG_OFFSETOF(struct vop_rmdir_args,a_vp),
873 VDESC_NO_OFFSET
875 const struct vnodeop_desc vop_rmdir_desc = {
876 VOP_RMDIR_DESCOFFSET,
877 "vop_rmdir",
878 0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
879 vop_rmdir_vp_offsets,
880 VDESC_NO_OFFSET,
881 VDESC_NO_OFFSET,
882 VOPARG_OFFSETOF(struct vop_rmdir_args, a_cnp),
883 NULL,
886 VOP_RMDIR(struct vnode *dvp,
887 struct vnode *vp,
888 struct componentname *cnp)
890 int error;
891 bool mpsafe;
892 struct vop_rmdir_args a;
893 a.a_desc = VDESC(vop_rmdir);
894 a.a_dvp = dvp;
895 a.a_vp = vp;
896 a.a_cnp = cnp;
897 mpsafe = (dvp->v_vflag & VV_MPSAFE);
898 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
899 error = (VCALL(dvp, VOFFSET(vop_rmdir), &a));
900 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
901 return error;
904 const int vop_symlink_vp_offsets[] = {
905 VOPARG_OFFSETOF(struct vop_symlink_args,a_dvp),
906 VDESC_NO_OFFSET
908 const struct vnodeop_desc vop_symlink_desc = {
909 VOP_SYMLINK_DESCOFFSET,
910 "vop_symlink",
911 0 | VDESC_VP0_WILLPUT,
912 vop_symlink_vp_offsets,
913 VOPARG_OFFSETOF(struct vop_symlink_args, a_vpp),
914 VDESC_NO_OFFSET,
915 VOPARG_OFFSETOF(struct vop_symlink_args, a_cnp),
916 NULL,
919 VOP_SYMLINK(struct vnode *dvp,
920 struct vnode **vpp,
921 struct componentname *cnp,
922 struct vattr *vap,
923 char *target)
925 int error;
926 bool mpsafe;
927 struct vop_symlink_args a;
928 a.a_desc = VDESC(vop_symlink);
929 a.a_dvp = dvp;
930 a.a_vpp = vpp;
931 a.a_cnp = cnp;
932 a.a_vap = vap;
933 a.a_target = target;
934 mpsafe = (dvp->v_vflag & VV_MPSAFE);
935 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
936 error = (VCALL(dvp, VOFFSET(vop_symlink), &a));
937 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
938 #ifdef DIAGNOSTIC
939 if (error == 0)
940 KASSERT((*vpp)->v_size != VSIZENOTSET
941 && (*vpp)->v_writesize != VSIZENOTSET);
942 #endif /* DIAGNOSTIC */
943 return error;
946 const int vop_readdir_vp_offsets[] = {
947 VOPARG_OFFSETOF(struct vop_readdir_args,a_vp),
948 VDESC_NO_OFFSET
950 const struct vnodeop_desc vop_readdir_desc = {
951 VOP_READDIR_DESCOFFSET,
952 "vop_readdir",
954 vop_readdir_vp_offsets,
955 VDESC_NO_OFFSET,
956 VOPARG_OFFSETOF(struct vop_readdir_args, a_cred),
957 VDESC_NO_OFFSET,
958 NULL,
961 VOP_READDIR(struct vnode *vp,
962 struct uio *uio,
963 kauth_cred_t cred,
964 int *eofflag,
965 off_t **cookies,
966 int *ncookies)
968 int error;
969 bool mpsafe;
970 struct vop_readdir_args a;
971 a.a_desc = VDESC(vop_readdir);
972 a.a_vp = vp;
973 a.a_uio = uio;
974 a.a_cred = cred;
975 a.a_eofflag = eofflag;
976 a.a_cookies = cookies;
977 a.a_ncookies = ncookies;
978 mpsafe = (vp->v_vflag & VV_MPSAFE);
979 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
980 error = (VCALL(vp, VOFFSET(vop_readdir), &a));
981 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
982 return error;
985 const int vop_readlink_vp_offsets[] = {
986 VOPARG_OFFSETOF(struct vop_readlink_args,a_vp),
987 VDESC_NO_OFFSET
989 const struct vnodeop_desc vop_readlink_desc = {
990 VOP_READLINK_DESCOFFSET,
991 "vop_readlink",
993 vop_readlink_vp_offsets,
994 VDESC_NO_OFFSET,
995 VOPARG_OFFSETOF(struct vop_readlink_args, a_cred),
996 VDESC_NO_OFFSET,
997 NULL,
1000 VOP_READLINK(struct vnode *vp,
1001 struct uio *uio,
1002 kauth_cred_t cred)
1004 int error;
1005 bool mpsafe;
1006 struct vop_readlink_args a;
1007 a.a_desc = VDESC(vop_readlink);
1008 a.a_vp = vp;
1009 a.a_uio = uio;
1010 a.a_cred = cred;
1011 mpsafe = (vp->v_vflag & VV_MPSAFE);
1012 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1013 error = (VCALL(vp, VOFFSET(vop_readlink), &a));
1014 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1015 return error;
1018 const int vop_abortop_vp_offsets[] = {
1019 VOPARG_OFFSETOF(struct vop_abortop_args,a_dvp),
1020 VDESC_NO_OFFSET
1022 const struct vnodeop_desc vop_abortop_desc = {
1023 VOP_ABORTOP_DESCOFFSET,
1024 "vop_abortop",
1026 vop_abortop_vp_offsets,
1027 VDESC_NO_OFFSET,
1028 VDESC_NO_OFFSET,
1029 VOPARG_OFFSETOF(struct vop_abortop_args, a_cnp),
1030 NULL,
1033 VOP_ABORTOP(struct vnode *dvp,
1034 struct componentname *cnp)
1036 int error;
1037 bool mpsafe;
1038 struct vop_abortop_args a;
1039 a.a_desc = VDESC(vop_abortop);
1040 a.a_dvp = dvp;
1041 a.a_cnp = cnp;
1042 mpsafe = (dvp->v_vflag & VV_MPSAFE);
1043 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1044 error = (VCALL(dvp, VOFFSET(vop_abortop), &a));
1045 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1046 return error;
1049 const int vop_inactive_vp_offsets[] = {
1050 VOPARG_OFFSETOF(struct vop_inactive_args,a_vp),
1051 VDESC_NO_OFFSET
1053 const struct vnodeop_desc vop_inactive_desc = {
1054 VOP_INACTIVE_DESCOFFSET,
1055 "vop_inactive",
1056 0 | VDESC_VP0_WILLUNLOCK,
1057 vop_inactive_vp_offsets,
1058 VDESC_NO_OFFSET,
1059 VDESC_NO_OFFSET,
1060 VDESC_NO_OFFSET,
1061 NULL,
1064 VOP_INACTIVE(struct vnode *vp,
1065 bool *recycle)
1067 int error;
1068 bool mpsafe;
1069 struct vop_inactive_args a;
1070 a.a_desc = VDESC(vop_inactive);
1071 a.a_vp = vp;
1072 a.a_recycle = recycle;
1073 mpsafe = (vp->v_vflag & VV_MPSAFE);
1074 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1075 error = (VCALL(vp, VOFFSET(vop_inactive), &a));
1076 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1077 return error;
1080 const int vop_reclaim_vp_offsets[] = {
1081 VOPARG_OFFSETOF(struct vop_reclaim_args,a_vp),
1082 VDESC_NO_OFFSET
1084 const struct vnodeop_desc vop_reclaim_desc = {
1085 VOP_RECLAIM_DESCOFFSET,
1086 "vop_reclaim",
1088 vop_reclaim_vp_offsets,
1089 VDESC_NO_OFFSET,
1090 VDESC_NO_OFFSET,
1091 VDESC_NO_OFFSET,
1092 NULL,
1095 VOP_RECLAIM(struct vnode *vp)
1097 int error;
1098 bool mpsafe;
1099 struct vop_reclaim_args a;
1100 a.a_desc = VDESC(vop_reclaim);
1101 a.a_vp = vp;
1102 mpsafe = (vp->v_vflag & VV_MPSAFE);
1103 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1104 error = (VCALL(vp, VOFFSET(vop_reclaim), &a));
1105 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1106 return error;
1109 const int vop_lock_vp_offsets[] = {
1110 VOPARG_OFFSETOF(struct vop_lock_args,a_vp),
1111 VDESC_NO_OFFSET
1113 const struct vnodeop_desc vop_lock_desc = {
1114 VOP_LOCK_DESCOFFSET,
1115 "vop_lock",
1117 vop_lock_vp_offsets,
1118 VDESC_NO_OFFSET,
1119 VDESC_NO_OFFSET,
1120 VDESC_NO_OFFSET,
1121 NULL,
1124 VOP_LOCK(struct vnode *vp,
1125 int flags)
1127 int error;
1128 bool mpsafe;
1129 struct vop_lock_args a;
1130 a.a_desc = VDESC(vop_lock);
1131 a.a_vp = vp;
1132 a.a_flags = flags;
1133 mpsafe = (vp->v_vflag & VV_MPSAFE);
1134 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1135 error = (VCALL(vp, VOFFSET(vop_lock), &a));
1136 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1137 return error;
1140 const int vop_unlock_vp_offsets[] = {
1141 VOPARG_OFFSETOF(struct vop_unlock_args,a_vp),
1142 VDESC_NO_OFFSET
1144 const struct vnodeop_desc vop_unlock_desc = {
1145 VOP_UNLOCK_DESCOFFSET,
1146 "vop_unlock",
1148 vop_unlock_vp_offsets,
1149 VDESC_NO_OFFSET,
1150 VDESC_NO_OFFSET,
1151 VDESC_NO_OFFSET,
1152 NULL,
1155 VOP_UNLOCK(struct vnode *vp,
1156 int flags)
1158 int error;
1159 bool mpsafe;
1160 struct vop_unlock_args a;
1161 a.a_desc = VDESC(vop_unlock);
1162 a.a_vp = vp;
1163 a.a_flags = flags;
1164 mpsafe = (vp->v_vflag & VV_MPSAFE);
1165 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1166 error = (VCALL(vp, VOFFSET(vop_unlock), &a));
1167 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1168 return error;
1171 const int vop_bmap_vp_offsets[] = {
1172 VOPARG_OFFSETOF(struct vop_bmap_args,a_vp),
1173 VDESC_NO_OFFSET
1175 const struct vnodeop_desc vop_bmap_desc = {
1176 VOP_BMAP_DESCOFFSET,
1177 "vop_bmap",
1179 vop_bmap_vp_offsets,
1180 VOPARG_OFFSETOF(struct vop_bmap_args, a_vpp),
1181 VDESC_NO_OFFSET,
1182 VDESC_NO_OFFSET,
1183 NULL,
1186 VOP_BMAP(struct vnode *vp,
1187 daddr_t bn,
1188 struct vnode **vpp,
1189 daddr_t *bnp,
1190 int *runp)
1192 int error;
1193 bool mpsafe;
1194 struct vop_bmap_args a;
1195 a.a_desc = VDESC(vop_bmap);
1196 a.a_vp = vp;
1197 a.a_bn = bn;
1198 a.a_vpp = vpp;
1199 a.a_bnp = bnp;
1200 a.a_runp = runp;
1201 mpsafe = (vp->v_vflag & VV_MPSAFE);
1202 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1203 error = (VCALL(vp, VOFFSET(vop_bmap), &a));
1204 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1205 return error;
1208 const int vop_strategy_vp_offsets[] = {
1209 VOPARG_OFFSETOF(struct vop_strategy_args,a_vp),
1210 VDESC_NO_OFFSET
1212 const struct vnodeop_desc vop_strategy_desc = {
1213 VOP_STRATEGY_DESCOFFSET,
1214 "vop_strategy",
1216 vop_strategy_vp_offsets,
1217 VDESC_NO_OFFSET,
1218 VDESC_NO_OFFSET,
1219 VDESC_NO_OFFSET,
1220 NULL,
1223 VOP_STRATEGY(struct vnode *vp,
1224 struct buf *bp)
1226 int error;
1227 bool mpsafe;
1228 struct vop_strategy_args a;
1229 a.a_desc = VDESC(vop_strategy);
1230 a.a_vp = vp;
1231 a.a_bp = bp;
1232 mpsafe = (vp->v_vflag & VV_MPSAFE);
1233 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1234 error = (VCALL(vp, VOFFSET(vop_strategy), &a));
1235 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1236 return error;
1239 const int vop_print_vp_offsets[] = {
1240 VOPARG_OFFSETOF(struct vop_print_args,a_vp),
1241 VDESC_NO_OFFSET
1243 const struct vnodeop_desc vop_print_desc = {
1244 VOP_PRINT_DESCOFFSET,
1245 "vop_print",
1247 vop_print_vp_offsets,
1248 VDESC_NO_OFFSET,
1249 VDESC_NO_OFFSET,
1250 VDESC_NO_OFFSET,
1251 NULL,
1254 VOP_PRINT(struct vnode *vp)
1256 int error;
1257 bool mpsafe;
1258 struct vop_print_args a;
1259 a.a_desc = VDESC(vop_print);
1260 a.a_vp = vp;
1261 mpsafe = (vp->v_vflag & VV_MPSAFE);
1262 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1263 error = (VCALL(vp, VOFFSET(vop_print), &a));
1264 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1265 return error;
1268 const int vop_islocked_vp_offsets[] = {
1269 VOPARG_OFFSETOF(struct vop_islocked_args,a_vp),
1270 VDESC_NO_OFFSET
1272 const struct vnodeop_desc vop_islocked_desc = {
1273 VOP_ISLOCKED_DESCOFFSET,
1274 "vop_islocked",
1276 vop_islocked_vp_offsets,
1277 VDESC_NO_OFFSET,
1278 VDESC_NO_OFFSET,
1279 VDESC_NO_OFFSET,
1280 NULL,
1283 VOP_ISLOCKED(struct vnode *vp)
1285 int error;
1286 bool mpsafe;
1287 struct vop_islocked_args a;
1288 a.a_desc = VDESC(vop_islocked);
1289 a.a_vp = vp;
1290 mpsafe = (vp->v_vflag & VV_MPSAFE);
1291 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1292 error = (VCALL(vp, VOFFSET(vop_islocked), &a));
1293 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1294 return error;
1297 const int vop_pathconf_vp_offsets[] = {
1298 VOPARG_OFFSETOF(struct vop_pathconf_args,a_vp),
1299 VDESC_NO_OFFSET
1301 const struct vnodeop_desc vop_pathconf_desc = {
1302 VOP_PATHCONF_DESCOFFSET,
1303 "vop_pathconf",
1305 vop_pathconf_vp_offsets,
1306 VDESC_NO_OFFSET,
1307 VDESC_NO_OFFSET,
1308 VDESC_NO_OFFSET,
1309 NULL,
1312 VOP_PATHCONF(struct vnode *vp,
1313 int name,
1314 register_t *retval)
1316 int error;
1317 bool mpsafe;
1318 struct vop_pathconf_args a;
1319 a.a_desc = VDESC(vop_pathconf);
1320 a.a_vp = vp;
1321 a.a_name = name;
1322 a.a_retval = retval;
1323 mpsafe = (vp->v_vflag & VV_MPSAFE);
1324 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1325 error = (VCALL(vp, VOFFSET(vop_pathconf), &a));
1326 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1327 return error;
1330 const int vop_advlock_vp_offsets[] = {
1331 VOPARG_OFFSETOF(struct vop_advlock_args,a_vp),
1332 VDESC_NO_OFFSET
1334 const struct vnodeop_desc vop_advlock_desc = {
1335 VOP_ADVLOCK_DESCOFFSET,
1336 "vop_advlock",
1338 vop_advlock_vp_offsets,
1339 VDESC_NO_OFFSET,
1340 VDESC_NO_OFFSET,
1341 VDESC_NO_OFFSET,
1342 NULL,
1345 VOP_ADVLOCK(struct vnode *vp,
1346 void *id,
1347 int op,
1348 struct flock *fl,
1349 int flags)
1351 int error;
1352 bool mpsafe;
1353 struct vop_advlock_args a;
1354 a.a_desc = VDESC(vop_advlock);
1355 a.a_vp = vp;
1356 a.a_id = id;
1357 a.a_op = op;
1358 a.a_fl = fl;
1359 a.a_flags = flags;
1360 mpsafe = (vp->v_vflag & VV_MPSAFE);
1361 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1362 error = (VCALL(vp, VOFFSET(vop_advlock), &a));
1363 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1364 return error;
1367 const int vop_whiteout_vp_offsets[] = {
1368 VOPARG_OFFSETOF(struct vop_whiteout_args,a_dvp),
1369 VDESC_NO_OFFSET
1371 const struct vnodeop_desc vop_whiteout_desc = {
1372 VOP_WHITEOUT_DESCOFFSET,
1373 "vop_whiteout",
1375 vop_whiteout_vp_offsets,
1376 VDESC_NO_OFFSET,
1377 VDESC_NO_OFFSET,
1378 VOPARG_OFFSETOF(struct vop_whiteout_args, a_cnp),
1379 NULL,
1382 VOP_WHITEOUT(struct vnode *dvp,
1383 struct componentname *cnp,
1384 int flags)
1386 int error;
1387 bool mpsafe;
1388 struct vop_whiteout_args a;
1389 a.a_desc = VDESC(vop_whiteout);
1390 a.a_dvp = dvp;
1391 a.a_cnp = cnp;
1392 a.a_flags = flags;
1393 mpsafe = (dvp->v_vflag & VV_MPSAFE);
1394 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1395 error = (VCALL(dvp, VOFFSET(vop_whiteout), &a));
1396 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1397 return error;
1400 const int vop_getpages_vp_offsets[] = {
1401 VOPARG_OFFSETOF(struct vop_getpages_args,a_vp),
1402 VDESC_NO_OFFSET
1404 const struct vnodeop_desc vop_getpages_desc = {
1405 VOP_GETPAGES_DESCOFFSET,
1406 "vop_getpages",
1408 vop_getpages_vp_offsets,
1409 VDESC_NO_OFFSET,
1410 VDESC_NO_OFFSET,
1411 VDESC_NO_OFFSET,
1412 NULL,
1415 VOP_GETPAGES(struct vnode *vp,
1416 voff_t offset,
1417 struct vm_page **m,
1418 int *count,
1419 int centeridx,
1420 vm_prot_t access_type,
1421 int advice,
1422 int flags)
1424 int error;
1425 bool mpsafe;
1426 struct vop_getpages_args a;
1427 a.a_desc = VDESC(vop_getpages);
1428 a.a_vp = vp;
1429 a.a_offset = offset;
1430 a.a_m = m;
1431 a.a_count = count;
1432 a.a_centeridx = centeridx;
1433 a.a_access_type = access_type;
1434 a.a_advice = advice;
1435 a.a_flags = flags;
1436 mpsafe = (vp->v_vflag & VV_MPSAFE);
1437 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1438 error = (VCALL(vp, VOFFSET(vop_getpages), &a));
1439 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1440 return error;
1443 const int vop_putpages_vp_offsets[] = {
1444 VOPARG_OFFSETOF(struct vop_putpages_args,a_vp),
1445 VDESC_NO_OFFSET
1447 const struct vnodeop_desc vop_putpages_desc = {
1448 VOP_PUTPAGES_DESCOFFSET,
1449 "vop_putpages",
1451 vop_putpages_vp_offsets,
1452 VDESC_NO_OFFSET,
1453 VDESC_NO_OFFSET,
1454 VDESC_NO_OFFSET,
1455 NULL,
1458 VOP_PUTPAGES(struct vnode *vp,
1459 voff_t offlo,
1460 voff_t offhi,
1461 int flags)
1463 int error;
1464 bool mpsafe;
1465 struct vop_putpages_args a;
1466 a.a_desc = VDESC(vop_putpages);
1467 a.a_vp = vp;
1468 a.a_offlo = offlo;
1469 a.a_offhi = offhi;
1470 a.a_flags = flags;
1471 mpsafe = (vp->v_vflag & VV_MPSAFE);
1472 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1473 error = (VCALL(vp, VOFFSET(vop_putpages), &a));
1474 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1475 return error;
1478 const int vop_closeextattr_vp_offsets[] = {
1479 VOPARG_OFFSETOF(struct vop_closeextattr_args,a_vp),
1480 VDESC_NO_OFFSET
1482 const struct vnodeop_desc vop_closeextattr_desc = {
1483 VOP_CLOSEEXTATTR_DESCOFFSET,
1484 "vop_closeextattr",
1486 vop_closeextattr_vp_offsets,
1487 VDESC_NO_OFFSET,
1488 VOPARG_OFFSETOF(struct vop_closeextattr_args, a_cred),
1489 VDESC_NO_OFFSET,
1490 NULL,
1493 VOP_CLOSEEXTATTR(struct vnode *vp,
1494 int commit,
1495 kauth_cred_t cred)
1497 int error;
1498 bool mpsafe;
1499 struct vop_closeextattr_args a;
1500 a.a_desc = VDESC(vop_closeextattr);
1501 a.a_vp = vp;
1502 a.a_commit = commit;
1503 a.a_cred = cred;
1504 mpsafe = (vp->v_vflag & VV_MPSAFE);
1505 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1506 error = (VCALL(vp, VOFFSET(vop_closeextattr), &a));
1507 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1508 return error;
1511 const int vop_getextattr_vp_offsets[] = {
1512 VOPARG_OFFSETOF(struct vop_getextattr_args,a_vp),
1513 VDESC_NO_OFFSET
1515 const struct vnodeop_desc vop_getextattr_desc = {
1516 VOP_GETEXTATTR_DESCOFFSET,
1517 "vop_getextattr",
1519 vop_getextattr_vp_offsets,
1520 VDESC_NO_OFFSET,
1521 VOPARG_OFFSETOF(struct vop_getextattr_args, a_cred),
1522 VDESC_NO_OFFSET,
1523 NULL,
1526 VOP_GETEXTATTR(struct vnode *vp,
1527 int attrnamespace,
1528 const char *name,
1529 struct uio *uio,
1530 size_t *size,
1531 kauth_cred_t cred)
1533 int error;
1534 bool mpsafe;
1535 struct vop_getextattr_args a;
1536 a.a_desc = VDESC(vop_getextattr);
1537 a.a_vp = vp;
1538 a.a_attrnamespace = attrnamespace;
1539 a.a_name = name;
1540 a.a_uio = uio;
1541 a.a_size = size;
1542 a.a_cred = cred;
1543 mpsafe = (vp->v_vflag & VV_MPSAFE);
1544 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1545 error = (VCALL(vp, VOFFSET(vop_getextattr), &a));
1546 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1547 return error;
1550 const int vop_listextattr_vp_offsets[] = {
1551 VOPARG_OFFSETOF(struct vop_listextattr_args,a_vp),
1552 VDESC_NO_OFFSET
1554 const struct vnodeop_desc vop_listextattr_desc = {
1555 VOP_LISTEXTATTR_DESCOFFSET,
1556 "vop_listextattr",
1558 vop_listextattr_vp_offsets,
1559 VDESC_NO_OFFSET,
1560 VOPARG_OFFSETOF(struct vop_listextattr_args, a_cred),
1561 VDESC_NO_OFFSET,
1562 NULL,
1565 VOP_LISTEXTATTR(struct vnode *vp,
1566 int attrnamespace,
1567 struct uio *uio,
1568 size_t *size,
1569 kauth_cred_t cred)
1571 int error;
1572 bool mpsafe;
1573 struct vop_listextattr_args a;
1574 a.a_desc = VDESC(vop_listextattr);
1575 a.a_vp = vp;
1576 a.a_attrnamespace = attrnamespace;
1577 a.a_uio = uio;
1578 a.a_size = size;
1579 a.a_cred = cred;
1580 mpsafe = (vp->v_vflag & VV_MPSAFE);
1581 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1582 error = (VCALL(vp, VOFFSET(vop_listextattr), &a));
1583 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1584 return error;
1587 const int vop_openextattr_vp_offsets[] = {
1588 VOPARG_OFFSETOF(struct vop_openextattr_args,a_vp),
1589 VDESC_NO_OFFSET
1591 const struct vnodeop_desc vop_openextattr_desc = {
1592 VOP_OPENEXTATTR_DESCOFFSET,
1593 "vop_openextattr",
1595 vop_openextattr_vp_offsets,
1596 VDESC_NO_OFFSET,
1597 VOPARG_OFFSETOF(struct vop_openextattr_args, a_cred),
1598 VDESC_NO_OFFSET,
1599 NULL,
1602 VOP_OPENEXTATTR(struct vnode *vp,
1603 kauth_cred_t cred)
1605 int error;
1606 bool mpsafe;
1607 struct vop_openextattr_args a;
1608 a.a_desc = VDESC(vop_openextattr);
1609 a.a_vp = vp;
1610 a.a_cred = cred;
1611 mpsafe = (vp->v_vflag & VV_MPSAFE);
1612 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1613 error = (VCALL(vp, VOFFSET(vop_openextattr), &a));
1614 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1615 return error;
1618 const int vop_deleteextattr_vp_offsets[] = {
1619 VOPARG_OFFSETOF(struct vop_deleteextattr_args,a_vp),
1620 VDESC_NO_OFFSET
1622 const struct vnodeop_desc vop_deleteextattr_desc = {
1623 VOP_DELETEEXTATTR_DESCOFFSET,
1624 "vop_deleteextattr",
1626 vop_deleteextattr_vp_offsets,
1627 VDESC_NO_OFFSET,
1628 VOPARG_OFFSETOF(struct vop_deleteextattr_args, a_cred),
1629 VDESC_NO_OFFSET,
1630 NULL,
1633 VOP_DELETEEXTATTR(struct vnode *vp,
1634 int attrnamespace,
1635 const char *name,
1636 kauth_cred_t cred)
1638 int error;
1639 bool mpsafe;
1640 struct vop_deleteextattr_args a;
1641 a.a_desc = VDESC(vop_deleteextattr);
1642 a.a_vp = vp;
1643 a.a_attrnamespace = attrnamespace;
1644 a.a_name = name;
1645 a.a_cred = cred;
1646 mpsafe = (vp->v_vflag & VV_MPSAFE);
1647 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1648 error = (VCALL(vp, VOFFSET(vop_deleteextattr), &a));
1649 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1650 return error;
1653 const int vop_setextattr_vp_offsets[] = {
1654 VOPARG_OFFSETOF(struct vop_setextattr_args,a_vp),
1655 VDESC_NO_OFFSET
1657 const struct vnodeop_desc vop_setextattr_desc = {
1658 VOP_SETEXTATTR_DESCOFFSET,
1659 "vop_setextattr",
1661 vop_setextattr_vp_offsets,
1662 VDESC_NO_OFFSET,
1663 VOPARG_OFFSETOF(struct vop_setextattr_args, a_cred),
1664 VDESC_NO_OFFSET,
1665 NULL,
1668 VOP_SETEXTATTR(struct vnode *vp,
1669 int attrnamespace,
1670 const char *name,
1671 struct uio *uio,
1672 kauth_cred_t cred)
1674 int error;
1675 bool mpsafe;
1676 struct vop_setextattr_args a;
1677 a.a_desc = VDESC(vop_setextattr);
1678 a.a_vp = vp;
1679 a.a_attrnamespace = attrnamespace;
1680 a.a_name = name;
1681 a.a_uio = uio;
1682 a.a_cred = cred;
1683 mpsafe = (vp->v_vflag & VV_MPSAFE);
1684 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1685 error = (VCALL(vp, VOFFSET(vop_setextattr), &a));
1686 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1687 return error;
1690 /* End of special cases. */
1692 const struct vnodeop_desc * const vfs_op_descs[] = {
1693 &vop_default_desc, /* MUST BE FIRST */
1694 &vop_bwrite_desc, /* XXX: SPECIAL CASE */
1696 &vop_lookup_desc,
1697 &vop_create_desc,
1698 &vop_mknod_desc,
1699 &vop_open_desc,
1700 &vop_close_desc,
1701 &vop_access_desc,
1702 &vop_getattr_desc,
1703 &vop_setattr_desc,
1704 &vop_read_desc,
1705 &vop_write_desc,
1706 &vop_ioctl_desc,
1707 &vop_fcntl_desc,
1708 &vop_poll_desc,
1709 &vop_kqfilter_desc,
1710 &vop_revoke_desc,
1711 &vop_mmap_desc,
1712 &vop_fsync_desc,
1713 &vop_seek_desc,
1714 &vop_remove_desc,
1715 &vop_link_desc,
1716 &vop_rename_desc,
1717 &vop_mkdir_desc,
1718 &vop_rmdir_desc,
1719 &vop_symlink_desc,
1720 &vop_readdir_desc,
1721 &vop_readlink_desc,
1722 &vop_abortop_desc,
1723 &vop_inactive_desc,
1724 &vop_reclaim_desc,
1725 &vop_lock_desc,
1726 &vop_unlock_desc,
1727 &vop_bmap_desc,
1728 &vop_strategy_desc,
1729 &vop_print_desc,
1730 &vop_islocked_desc,
1731 &vop_pathconf_desc,
1732 &vop_advlock_desc,
1733 &vop_whiteout_desc,
1734 &vop_getpages_desc,
1735 &vop_putpages_desc,
1736 &vop_closeextattr_desc,
1737 &vop_getextattr_desc,
1738 &vop_listextattr_desc,
1739 &vop_openextattr_desc,
1740 &vop_deleteextattr_desc,
1741 &vop_setextattr_desc,
1742 NULL