Sync usage with man page.
[netbsd-mini2440.git] / sys / rump / librump / rumpvfs / rumpvnode_if.c
blobd4bd9d49123758669c24323cc6525a269defc305
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.53 2009/10/15 00:29:40 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>
50 #include <rump/rumpvnode_if.h>
51 #include "rump_private.h"
53 const struct vnodeop_desc rump_vop_default_desc = {
55 "default",
57 NULL,
58 VDESC_NO_OFFSET,
59 VDESC_NO_OFFSET,
60 VDESC_NO_OFFSET,
61 NULL,
65 /* Special cases: */
67 const int rump_vop_bwrite_vp_offsets[] = {
68 VDESC_NO_OFFSET
70 const struct vnodeop_desc rump_vop_bwrite_desc = {
71 RUMP_VOP_BWRITE_DESCOFFSET,
72 "rump_vop_bwrite",
74 rump_vop_bwrite_vp_offsets,
75 VDESC_NO_OFFSET,
76 VDESC_NO_OFFSET,
77 VDESC_NO_OFFSET,
78 NULL,
80 int
81 RUMP_VOP_BWRITE(struct buf *bp)
83 int error;
84 bool mpsafe;
85 struct rump_vop_bwrite_args a;
86 a.a_desc = VDESC(rump_vop_bwrite);
87 a.a_bp = bp;
88 mpsafe = (bp->b_vp->v_vflag & VV_MPSAFE);
89 rump_schedule();
90 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
91 error = (VCALL(bp->b_vp, VOFFSET(rump_vop_bwrite), &a));
92 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
93 rump_unschedule();
94 return error;
97 /* End of special cases */
99 const int rump_vop_lookup_vp_offsets[] = {
100 VOPARG_OFFSETOF(struct rump_vop_lookup_args,a_dvp),
101 VDESC_NO_OFFSET
103 const struct vnodeop_desc rump_vop_lookup_desc = {
104 RUMP_VOP_LOOKUP_DESCOFFSET,
105 "rump_vop_lookup",
107 rump_vop_lookup_vp_offsets,
108 VOPARG_OFFSETOF(struct rump_vop_lookup_args, a_vpp),
109 VDESC_NO_OFFSET,
110 VOPARG_OFFSETOF(struct rump_vop_lookup_args, a_cnp),
111 NULL,
114 RUMP_VOP_LOOKUP(struct vnode *dvp,
115 struct vnode **vpp,
116 struct componentname *cnp)
118 int error;
119 bool mpsafe;
120 struct rump_vop_lookup_args a;
121 a.a_desc = VDESC(rump_vop_lookup);
122 a.a_dvp = dvp;
123 a.a_vpp = vpp;
124 a.a_cnp = cnp;
125 mpsafe = (dvp->v_vflag & VV_MPSAFE);
126 rump_schedule();
127 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
128 error = (VCALL(dvp, VOFFSET(rump_vop_lookup), &a));
129 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
130 rump_unschedule();
131 #ifdef DIAGNOSTIC
132 if (error == 0)
133 KASSERT((*vpp)->v_size != VSIZENOTSET
134 && (*vpp)->v_writesize != VSIZENOTSET);
135 #endif /* DIAGNOSTIC */
136 return error;
139 const int rump_vop_create_vp_offsets[] = {
140 VOPARG_OFFSETOF(struct rump_vop_create_args,a_dvp),
141 VDESC_NO_OFFSET
143 const struct vnodeop_desc rump_vop_create_desc = {
144 RUMP_VOP_CREATE_DESCOFFSET,
145 "rump_vop_create",
146 0 | VDESC_VP0_WILLPUT,
147 rump_vop_create_vp_offsets,
148 VOPARG_OFFSETOF(struct rump_vop_create_args, a_vpp),
149 VDESC_NO_OFFSET,
150 VOPARG_OFFSETOF(struct rump_vop_create_args, a_cnp),
151 NULL,
154 RUMP_VOP_CREATE(struct vnode *dvp,
155 struct vnode **vpp,
156 struct componentname *cnp,
157 struct vattr *vap)
159 int error;
160 bool mpsafe;
161 struct rump_vop_create_args a;
162 a.a_desc = VDESC(rump_vop_create);
163 a.a_dvp = dvp;
164 a.a_vpp = vpp;
165 a.a_cnp = cnp;
166 a.a_vap = vap;
167 mpsafe = (dvp->v_vflag & VV_MPSAFE);
168 rump_schedule();
169 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
170 error = (VCALL(dvp, VOFFSET(rump_vop_create), &a));
171 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
172 rump_unschedule();
173 #ifdef DIAGNOSTIC
174 if (error == 0)
175 KASSERT((*vpp)->v_size != VSIZENOTSET
176 && (*vpp)->v_writesize != VSIZENOTSET);
177 #endif /* DIAGNOSTIC */
178 return error;
181 const int rump_vop_mknod_vp_offsets[] = {
182 VOPARG_OFFSETOF(struct rump_vop_mknod_args,a_dvp),
183 VDESC_NO_OFFSET
185 const struct vnodeop_desc rump_vop_mknod_desc = {
186 RUMP_VOP_MKNOD_DESCOFFSET,
187 "rump_vop_mknod",
188 0 | VDESC_VP0_WILLPUT,
189 rump_vop_mknod_vp_offsets,
190 VOPARG_OFFSETOF(struct rump_vop_mknod_args, a_vpp),
191 VDESC_NO_OFFSET,
192 VOPARG_OFFSETOF(struct rump_vop_mknod_args, a_cnp),
193 NULL,
196 RUMP_VOP_MKNOD(struct vnode *dvp,
197 struct vnode **vpp,
198 struct componentname *cnp,
199 struct vattr *vap)
201 int error;
202 bool mpsafe;
203 struct rump_vop_mknod_args a;
204 a.a_desc = VDESC(rump_vop_mknod);
205 a.a_dvp = dvp;
206 a.a_vpp = vpp;
207 a.a_cnp = cnp;
208 a.a_vap = vap;
209 mpsafe = (dvp->v_vflag & VV_MPSAFE);
210 rump_schedule();
211 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
212 error = (VCALL(dvp, VOFFSET(rump_vop_mknod), &a));
213 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
214 rump_unschedule();
215 #ifdef DIAGNOSTIC
216 if (error == 0)
217 KASSERT((*vpp)->v_size != VSIZENOTSET
218 && (*vpp)->v_writesize != VSIZENOTSET);
219 #endif /* DIAGNOSTIC */
220 return error;
223 const int rump_vop_open_vp_offsets[] = {
224 VOPARG_OFFSETOF(struct rump_vop_open_args,a_vp),
225 VDESC_NO_OFFSET
227 const struct vnodeop_desc rump_vop_open_desc = {
228 RUMP_VOP_OPEN_DESCOFFSET,
229 "rump_vop_open",
231 rump_vop_open_vp_offsets,
232 VDESC_NO_OFFSET,
233 VOPARG_OFFSETOF(struct rump_vop_open_args, a_cred),
234 VDESC_NO_OFFSET,
235 NULL,
238 RUMP_VOP_OPEN(struct vnode *vp,
239 int mode,
240 kauth_cred_t cred)
242 int error;
243 bool mpsafe;
244 struct rump_vop_open_args a;
245 a.a_desc = VDESC(rump_vop_open);
246 a.a_vp = vp;
247 a.a_mode = mode;
248 a.a_cred = cred;
249 mpsafe = (vp->v_vflag & VV_MPSAFE);
250 rump_schedule();
251 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
252 error = (VCALL(vp, VOFFSET(rump_vop_open), &a));
253 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
254 rump_unschedule();
255 return error;
258 const int rump_vop_close_vp_offsets[] = {
259 VOPARG_OFFSETOF(struct rump_vop_close_args,a_vp),
260 VDESC_NO_OFFSET
262 const struct vnodeop_desc rump_vop_close_desc = {
263 RUMP_VOP_CLOSE_DESCOFFSET,
264 "rump_vop_close",
266 rump_vop_close_vp_offsets,
267 VDESC_NO_OFFSET,
268 VOPARG_OFFSETOF(struct rump_vop_close_args, a_cred),
269 VDESC_NO_OFFSET,
270 NULL,
273 RUMP_VOP_CLOSE(struct vnode *vp,
274 int fflag,
275 kauth_cred_t cred)
277 int error;
278 bool mpsafe;
279 struct rump_vop_close_args a;
280 a.a_desc = VDESC(rump_vop_close);
281 a.a_vp = vp;
282 a.a_fflag = fflag;
283 a.a_cred = cred;
284 mpsafe = (vp->v_vflag & VV_MPSAFE);
285 rump_schedule();
286 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
287 error = (VCALL(vp, VOFFSET(rump_vop_close), &a));
288 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
289 rump_unschedule();
290 return error;
293 const int rump_vop_access_vp_offsets[] = {
294 VOPARG_OFFSETOF(struct rump_vop_access_args,a_vp),
295 VDESC_NO_OFFSET
297 const struct vnodeop_desc rump_vop_access_desc = {
298 RUMP_VOP_ACCESS_DESCOFFSET,
299 "rump_vop_access",
301 rump_vop_access_vp_offsets,
302 VDESC_NO_OFFSET,
303 VOPARG_OFFSETOF(struct rump_vop_access_args, a_cred),
304 VDESC_NO_OFFSET,
305 NULL,
308 RUMP_VOP_ACCESS(struct vnode *vp,
309 int mode,
310 kauth_cred_t cred)
312 int error;
313 bool mpsafe;
314 struct rump_vop_access_args a;
315 a.a_desc = VDESC(rump_vop_access);
316 a.a_vp = vp;
317 a.a_mode = mode;
318 a.a_cred = cred;
319 mpsafe = (vp->v_vflag & VV_MPSAFE);
320 rump_schedule();
321 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
322 error = (VCALL(vp, VOFFSET(rump_vop_access), &a));
323 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
324 rump_unschedule();
325 return error;
328 const int rump_vop_getattr_vp_offsets[] = {
329 VOPARG_OFFSETOF(struct rump_vop_getattr_args,a_vp),
330 VDESC_NO_OFFSET
332 const struct vnodeop_desc rump_vop_getattr_desc = {
333 RUMP_VOP_GETATTR_DESCOFFSET,
334 "rump_vop_getattr",
336 rump_vop_getattr_vp_offsets,
337 VDESC_NO_OFFSET,
338 VOPARG_OFFSETOF(struct rump_vop_getattr_args, a_cred),
339 VDESC_NO_OFFSET,
340 NULL,
343 RUMP_VOP_GETATTR(struct vnode *vp,
344 struct vattr *vap,
345 kauth_cred_t cred)
347 int error;
348 bool mpsafe;
349 struct rump_vop_getattr_args a;
350 a.a_desc = VDESC(rump_vop_getattr);
351 a.a_vp = vp;
352 a.a_vap = vap;
353 a.a_cred = cred;
354 mpsafe = (vp->v_vflag & VV_MPSAFE);
355 rump_schedule();
356 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
357 error = (VCALL(vp, VOFFSET(rump_vop_getattr), &a));
358 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
359 rump_unschedule();
360 return error;
363 const int rump_vop_setattr_vp_offsets[] = {
364 VOPARG_OFFSETOF(struct rump_vop_setattr_args,a_vp),
365 VDESC_NO_OFFSET
367 const struct vnodeop_desc rump_vop_setattr_desc = {
368 RUMP_VOP_SETATTR_DESCOFFSET,
369 "rump_vop_setattr",
371 rump_vop_setattr_vp_offsets,
372 VDESC_NO_OFFSET,
373 VOPARG_OFFSETOF(struct rump_vop_setattr_args, a_cred),
374 VDESC_NO_OFFSET,
375 NULL,
378 RUMP_VOP_SETATTR(struct vnode *vp,
379 struct vattr *vap,
380 kauth_cred_t cred)
382 int error;
383 bool mpsafe;
384 struct rump_vop_setattr_args a;
385 a.a_desc = VDESC(rump_vop_setattr);
386 a.a_vp = vp;
387 a.a_vap = vap;
388 a.a_cred = cred;
389 mpsafe = (vp->v_vflag & VV_MPSAFE);
390 rump_schedule();
391 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
392 error = (VCALL(vp, VOFFSET(rump_vop_setattr), &a));
393 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
394 rump_unschedule();
395 return error;
398 const int rump_vop_read_vp_offsets[] = {
399 VOPARG_OFFSETOF(struct rump_vop_read_args,a_vp),
400 VDESC_NO_OFFSET
402 const struct vnodeop_desc rump_vop_read_desc = {
403 RUMP_VOP_READ_DESCOFFSET,
404 "rump_vop_read",
406 rump_vop_read_vp_offsets,
407 VDESC_NO_OFFSET,
408 VOPARG_OFFSETOF(struct rump_vop_read_args, a_cred),
409 VDESC_NO_OFFSET,
410 NULL,
413 RUMP_VOP_READ(struct vnode *vp,
414 struct uio *uio,
415 int ioflag,
416 kauth_cred_t cred)
418 int error;
419 bool mpsafe;
420 struct rump_vop_read_args a;
421 a.a_desc = VDESC(rump_vop_read);
422 a.a_vp = vp;
423 a.a_uio = uio;
424 a.a_ioflag = ioflag;
425 a.a_cred = cred;
426 mpsafe = (vp->v_vflag & VV_MPSAFE);
427 rump_schedule();
428 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
429 error = (VCALL(vp, VOFFSET(rump_vop_read), &a));
430 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
431 rump_unschedule();
432 return error;
435 const int rump_vop_write_vp_offsets[] = {
436 VOPARG_OFFSETOF(struct rump_vop_write_args,a_vp),
437 VDESC_NO_OFFSET
439 const struct vnodeop_desc rump_vop_write_desc = {
440 RUMP_VOP_WRITE_DESCOFFSET,
441 "rump_vop_write",
443 rump_vop_write_vp_offsets,
444 VDESC_NO_OFFSET,
445 VOPARG_OFFSETOF(struct rump_vop_write_args, a_cred),
446 VDESC_NO_OFFSET,
447 NULL,
450 RUMP_VOP_WRITE(struct vnode *vp,
451 struct uio *uio,
452 int ioflag,
453 kauth_cred_t cred)
455 int error;
456 bool mpsafe;
457 struct rump_vop_write_args a;
458 a.a_desc = VDESC(rump_vop_write);
459 a.a_vp = vp;
460 a.a_uio = uio;
461 a.a_ioflag = ioflag;
462 a.a_cred = cred;
463 mpsafe = (vp->v_vflag & VV_MPSAFE);
464 rump_schedule();
465 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
466 error = (VCALL(vp, VOFFSET(rump_vop_write), &a));
467 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
468 rump_unschedule();
469 return error;
472 const int rump_vop_ioctl_vp_offsets[] = {
473 VOPARG_OFFSETOF(struct rump_vop_ioctl_args,a_vp),
474 VDESC_NO_OFFSET
476 const struct vnodeop_desc rump_vop_ioctl_desc = {
477 RUMP_VOP_IOCTL_DESCOFFSET,
478 "rump_vop_ioctl",
480 rump_vop_ioctl_vp_offsets,
481 VDESC_NO_OFFSET,
482 VOPARG_OFFSETOF(struct rump_vop_ioctl_args, a_cred),
483 VDESC_NO_OFFSET,
484 NULL,
487 RUMP_VOP_IOCTL(struct vnode *vp,
488 u_long command,
489 void *data,
490 int fflag,
491 kauth_cred_t cred)
493 int error;
494 bool mpsafe;
495 struct rump_vop_ioctl_args a;
496 a.a_desc = VDESC(rump_vop_ioctl);
497 a.a_vp = vp;
498 a.a_command = command;
499 a.a_data = data;
500 a.a_fflag = fflag;
501 a.a_cred = cred;
502 mpsafe = (vp->v_vflag & VV_MPSAFE);
503 rump_schedule();
504 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
505 error = (VCALL(vp, VOFFSET(rump_vop_ioctl), &a));
506 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
507 rump_unschedule();
508 return error;
511 const int rump_vop_fcntl_vp_offsets[] = {
512 VOPARG_OFFSETOF(struct rump_vop_fcntl_args,a_vp),
513 VDESC_NO_OFFSET
515 const struct vnodeop_desc rump_vop_fcntl_desc = {
516 RUMP_VOP_FCNTL_DESCOFFSET,
517 "rump_vop_fcntl",
519 rump_vop_fcntl_vp_offsets,
520 VDESC_NO_OFFSET,
521 VOPARG_OFFSETOF(struct rump_vop_fcntl_args, a_cred),
522 VDESC_NO_OFFSET,
523 NULL,
526 RUMP_VOP_FCNTL(struct vnode *vp,
527 u_int command,
528 void *data,
529 int fflag,
530 kauth_cred_t cred)
532 int error;
533 bool mpsafe;
534 struct rump_vop_fcntl_args a;
535 a.a_desc = VDESC(rump_vop_fcntl);
536 a.a_vp = vp;
537 a.a_command = command;
538 a.a_data = data;
539 a.a_fflag = fflag;
540 a.a_cred = cred;
541 mpsafe = (vp->v_vflag & VV_MPSAFE);
542 rump_schedule();
543 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
544 error = (VCALL(vp, VOFFSET(rump_vop_fcntl), &a));
545 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
546 rump_unschedule();
547 return error;
550 const int rump_vop_poll_vp_offsets[] = {
551 VOPARG_OFFSETOF(struct rump_vop_poll_args,a_vp),
552 VDESC_NO_OFFSET
554 const struct vnodeop_desc rump_vop_poll_desc = {
555 RUMP_VOP_POLL_DESCOFFSET,
556 "rump_vop_poll",
558 rump_vop_poll_vp_offsets,
559 VDESC_NO_OFFSET,
560 VDESC_NO_OFFSET,
561 VDESC_NO_OFFSET,
562 NULL,
565 RUMP_VOP_POLL(struct vnode *vp,
566 int events)
568 int error;
569 bool mpsafe;
570 struct rump_vop_poll_args a;
571 a.a_desc = VDESC(rump_vop_poll);
572 a.a_vp = vp;
573 a.a_events = events;
574 mpsafe = (vp->v_vflag & VV_MPSAFE);
575 rump_schedule();
576 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
577 error = (VCALL(vp, VOFFSET(rump_vop_poll), &a));
578 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
579 rump_unschedule();
580 return error;
583 const int rump_vop_kqfilter_vp_offsets[] = {
584 VOPARG_OFFSETOF(struct rump_vop_kqfilter_args,a_vp),
585 VDESC_NO_OFFSET
587 const struct vnodeop_desc rump_vop_kqfilter_desc = {
588 RUMP_VOP_KQFILTER_DESCOFFSET,
589 "rump_vop_kqfilter",
591 rump_vop_kqfilter_vp_offsets,
592 VDESC_NO_OFFSET,
593 VDESC_NO_OFFSET,
594 VDESC_NO_OFFSET,
595 NULL,
598 RUMP_VOP_KQFILTER(struct vnode *vp,
599 struct knote *kn)
601 int error;
602 bool mpsafe;
603 struct rump_vop_kqfilter_args a;
604 a.a_desc = VDESC(rump_vop_kqfilter);
605 a.a_vp = vp;
606 a.a_kn = kn;
607 mpsafe = (vp->v_vflag & VV_MPSAFE);
608 rump_schedule();
609 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
610 error = (VCALL(vp, VOFFSET(rump_vop_kqfilter), &a));
611 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
612 rump_unschedule();
613 return error;
616 const int rump_vop_revoke_vp_offsets[] = {
617 VOPARG_OFFSETOF(struct rump_vop_revoke_args,a_vp),
618 VDESC_NO_OFFSET
620 const struct vnodeop_desc rump_vop_revoke_desc = {
621 RUMP_VOP_REVOKE_DESCOFFSET,
622 "rump_vop_revoke",
624 rump_vop_revoke_vp_offsets,
625 VDESC_NO_OFFSET,
626 VDESC_NO_OFFSET,
627 VDESC_NO_OFFSET,
628 NULL,
631 RUMP_VOP_REVOKE(struct vnode *vp,
632 int flags)
634 int error;
635 bool mpsafe;
636 struct rump_vop_revoke_args a;
637 a.a_desc = VDESC(rump_vop_revoke);
638 a.a_vp = vp;
639 a.a_flags = flags;
640 mpsafe = (vp->v_vflag & VV_MPSAFE);
641 rump_schedule();
642 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
643 error = (VCALL(vp, VOFFSET(rump_vop_revoke), &a));
644 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
645 rump_unschedule();
646 return error;
649 const int rump_vop_mmap_vp_offsets[] = {
650 VOPARG_OFFSETOF(struct rump_vop_mmap_args,a_vp),
651 VDESC_NO_OFFSET
653 const struct vnodeop_desc rump_vop_mmap_desc = {
654 RUMP_VOP_MMAP_DESCOFFSET,
655 "rump_vop_mmap",
657 rump_vop_mmap_vp_offsets,
658 VDESC_NO_OFFSET,
659 VOPARG_OFFSETOF(struct rump_vop_mmap_args, a_cred),
660 VDESC_NO_OFFSET,
661 NULL,
664 RUMP_VOP_MMAP(struct vnode *vp,
665 int prot,
666 kauth_cred_t cred)
668 int error;
669 bool mpsafe;
670 struct rump_vop_mmap_args a;
671 a.a_desc = VDESC(rump_vop_mmap);
672 a.a_vp = vp;
673 a.a_prot = prot;
674 a.a_cred = cred;
675 mpsafe = (vp->v_vflag & VV_MPSAFE);
676 rump_schedule();
677 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
678 error = (VCALL(vp, VOFFSET(rump_vop_mmap), &a));
679 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
680 rump_unschedule();
681 return error;
684 const int rump_vop_fsync_vp_offsets[] = {
685 VOPARG_OFFSETOF(struct rump_vop_fsync_args,a_vp),
686 VDESC_NO_OFFSET
688 const struct vnodeop_desc rump_vop_fsync_desc = {
689 RUMP_VOP_FSYNC_DESCOFFSET,
690 "rump_vop_fsync",
692 rump_vop_fsync_vp_offsets,
693 VDESC_NO_OFFSET,
694 VOPARG_OFFSETOF(struct rump_vop_fsync_args, a_cred),
695 VDESC_NO_OFFSET,
696 NULL,
699 RUMP_VOP_FSYNC(struct vnode *vp,
700 kauth_cred_t cred,
701 int flags,
702 off_t offlo,
703 off_t offhi)
705 int error;
706 bool mpsafe;
707 struct rump_vop_fsync_args a;
708 a.a_desc = VDESC(rump_vop_fsync);
709 a.a_vp = vp;
710 a.a_cred = cred;
711 a.a_flags = flags;
712 a.a_offlo = offlo;
713 a.a_offhi = offhi;
714 mpsafe = (vp->v_vflag & VV_MPSAFE);
715 rump_schedule();
716 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
717 error = (VCALL(vp, VOFFSET(rump_vop_fsync), &a));
718 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
719 rump_unschedule();
720 return error;
723 const int rump_vop_seek_vp_offsets[] = {
724 VOPARG_OFFSETOF(struct rump_vop_seek_args,a_vp),
725 VDESC_NO_OFFSET
727 const struct vnodeop_desc rump_vop_seek_desc = {
728 RUMP_VOP_SEEK_DESCOFFSET,
729 "rump_vop_seek",
731 rump_vop_seek_vp_offsets,
732 VDESC_NO_OFFSET,
733 VOPARG_OFFSETOF(struct rump_vop_seek_args, a_cred),
734 VDESC_NO_OFFSET,
735 NULL,
738 RUMP_VOP_SEEK(struct vnode *vp,
739 off_t oldoff,
740 off_t newoff,
741 kauth_cred_t cred)
743 int error;
744 bool mpsafe;
745 struct rump_vop_seek_args a;
746 a.a_desc = VDESC(rump_vop_seek);
747 a.a_vp = vp;
748 a.a_oldoff = oldoff;
749 a.a_newoff = newoff;
750 a.a_cred = cred;
751 mpsafe = (vp->v_vflag & VV_MPSAFE);
752 rump_schedule();
753 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
754 error = (VCALL(vp, VOFFSET(rump_vop_seek), &a));
755 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
756 rump_unschedule();
757 return error;
760 const int rump_vop_remove_vp_offsets[] = {
761 VOPARG_OFFSETOF(struct rump_vop_remove_args,a_dvp),
762 VOPARG_OFFSETOF(struct rump_vop_remove_args,a_vp),
763 VDESC_NO_OFFSET
765 const struct vnodeop_desc rump_vop_remove_desc = {
766 RUMP_VOP_REMOVE_DESCOFFSET,
767 "rump_vop_remove",
768 0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
769 rump_vop_remove_vp_offsets,
770 VDESC_NO_OFFSET,
771 VDESC_NO_OFFSET,
772 VOPARG_OFFSETOF(struct rump_vop_remove_args, a_cnp),
773 NULL,
776 RUMP_VOP_REMOVE(struct vnode *dvp,
777 struct vnode *vp,
778 struct componentname *cnp)
780 int error;
781 bool mpsafe;
782 struct rump_vop_remove_args a;
783 a.a_desc = VDESC(rump_vop_remove);
784 a.a_dvp = dvp;
785 a.a_vp = vp;
786 a.a_cnp = cnp;
787 mpsafe = (dvp->v_vflag & VV_MPSAFE);
788 rump_schedule();
789 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
790 error = (VCALL(dvp, VOFFSET(rump_vop_remove), &a));
791 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
792 rump_unschedule();
793 return error;
796 const int rump_vop_link_vp_offsets[] = {
797 VOPARG_OFFSETOF(struct rump_vop_link_args,a_dvp),
798 VOPARG_OFFSETOF(struct rump_vop_link_args,a_vp),
799 VDESC_NO_OFFSET
801 const struct vnodeop_desc rump_vop_link_desc = {
802 RUMP_VOP_LINK_DESCOFFSET,
803 "rump_vop_link",
804 0 | VDESC_VP0_WILLPUT,
805 rump_vop_link_vp_offsets,
806 VDESC_NO_OFFSET,
807 VDESC_NO_OFFSET,
808 VOPARG_OFFSETOF(struct rump_vop_link_args, a_cnp),
809 NULL,
812 RUMP_VOP_LINK(struct vnode *dvp,
813 struct vnode *vp,
814 struct componentname *cnp)
816 int error;
817 bool mpsafe;
818 struct rump_vop_link_args a;
819 a.a_desc = VDESC(rump_vop_link);
820 a.a_dvp = dvp;
821 a.a_vp = vp;
822 a.a_cnp = cnp;
823 mpsafe = (dvp->v_vflag & VV_MPSAFE);
824 rump_schedule();
825 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
826 error = (VCALL(dvp, VOFFSET(rump_vop_link), &a));
827 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
828 rump_unschedule();
829 return error;
832 const int rump_vop_rename_vp_offsets[] = {
833 VOPARG_OFFSETOF(struct rump_vop_rename_args,a_fdvp),
834 VOPARG_OFFSETOF(struct rump_vop_rename_args,a_fvp),
835 VOPARG_OFFSETOF(struct rump_vop_rename_args,a_tdvp),
836 VOPARG_OFFSETOF(struct rump_vop_rename_args,a_tvp),
837 VDESC_NO_OFFSET
839 const struct vnodeop_desc rump_vop_rename_desc = {
840 RUMP_VOP_RENAME_DESCOFFSET,
841 "rump_vop_rename",
842 0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLPUT | VDESC_VP3_WILLPUT,
843 rump_vop_rename_vp_offsets,
844 VDESC_NO_OFFSET,
845 VDESC_NO_OFFSET,
846 VOPARG_OFFSETOF(struct rump_vop_rename_args, a_fcnp),
847 NULL,
850 RUMP_VOP_RENAME(struct vnode *fdvp,
851 struct vnode *fvp,
852 struct componentname *fcnp,
853 struct vnode *tdvp,
854 struct vnode *tvp,
855 struct componentname *tcnp)
857 int error;
858 bool mpsafe;
859 struct rump_vop_rename_args a;
860 a.a_desc = VDESC(rump_vop_rename);
861 a.a_fdvp = fdvp;
862 a.a_fvp = fvp;
863 a.a_fcnp = fcnp;
864 a.a_tdvp = tdvp;
865 a.a_tvp = tvp;
866 a.a_tcnp = tcnp;
867 mpsafe = (fdvp->v_vflag & VV_MPSAFE);
868 rump_schedule();
869 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
870 error = (VCALL(fdvp, VOFFSET(rump_vop_rename), &a));
871 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
872 rump_unschedule();
873 return error;
876 const int rump_vop_mkdir_vp_offsets[] = {
877 VOPARG_OFFSETOF(struct rump_vop_mkdir_args,a_dvp),
878 VDESC_NO_OFFSET
880 const struct vnodeop_desc rump_vop_mkdir_desc = {
881 RUMP_VOP_MKDIR_DESCOFFSET,
882 "rump_vop_mkdir",
883 0 | VDESC_VP0_WILLPUT,
884 rump_vop_mkdir_vp_offsets,
885 VOPARG_OFFSETOF(struct rump_vop_mkdir_args, a_vpp),
886 VDESC_NO_OFFSET,
887 VOPARG_OFFSETOF(struct rump_vop_mkdir_args, a_cnp),
888 NULL,
891 RUMP_VOP_MKDIR(struct vnode *dvp,
892 struct vnode **vpp,
893 struct componentname *cnp,
894 struct vattr *vap)
896 int error;
897 bool mpsafe;
898 struct rump_vop_mkdir_args a;
899 a.a_desc = VDESC(rump_vop_mkdir);
900 a.a_dvp = dvp;
901 a.a_vpp = vpp;
902 a.a_cnp = cnp;
903 a.a_vap = vap;
904 mpsafe = (dvp->v_vflag & VV_MPSAFE);
905 rump_schedule();
906 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
907 error = (VCALL(dvp, VOFFSET(rump_vop_mkdir), &a));
908 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
909 rump_unschedule();
910 #ifdef DIAGNOSTIC
911 if (error == 0)
912 KASSERT((*vpp)->v_size != VSIZENOTSET
913 && (*vpp)->v_writesize != VSIZENOTSET);
914 #endif /* DIAGNOSTIC */
915 return error;
918 const int rump_vop_rmdir_vp_offsets[] = {
919 VOPARG_OFFSETOF(struct rump_vop_rmdir_args,a_dvp),
920 VOPARG_OFFSETOF(struct rump_vop_rmdir_args,a_vp),
921 VDESC_NO_OFFSET
923 const struct vnodeop_desc rump_vop_rmdir_desc = {
924 RUMP_VOP_RMDIR_DESCOFFSET,
925 "rump_vop_rmdir",
926 0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
927 rump_vop_rmdir_vp_offsets,
928 VDESC_NO_OFFSET,
929 VDESC_NO_OFFSET,
930 VOPARG_OFFSETOF(struct rump_vop_rmdir_args, a_cnp),
931 NULL,
934 RUMP_VOP_RMDIR(struct vnode *dvp,
935 struct vnode *vp,
936 struct componentname *cnp)
938 int error;
939 bool mpsafe;
940 struct rump_vop_rmdir_args a;
941 a.a_desc = VDESC(rump_vop_rmdir);
942 a.a_dvp = dvp;
943 a.a_vp = vp;
944 a.a_cnp = cnp;
945 mpsafe = (dvp->v_vflag & VV_MPSAFE);
946 rump_schedule();
947 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
948 error = (VCALL(dvp, VOFFSET(rump_vop_rmdir), &a));
949 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
950 rump_unschedule();
951 return error;
954 const int rump_vop_symlink_vp_offsets[] = {
955 VOPARG_OFFSETOF(struct rump_vop_symlink_args,a_dvp),
956 VDESC_NO_OFFSET
958 const struct vnodeop_desc rump_vop_symlink_desc = {
959 RUMP_VOP_SYMLINK_DESCOFFSET,
960 "rump_vop_symlink",
961 0 | VDESC_VP0_WILLPUT,
962 rump_vop_symlink_vp_offsets,
963 VOPARG_OFFSETOF(struct rump_vop_symlink_args, a_vpp),
964 VDESC_NO_OFFSET,
965 VOPARG_OFFSETOF(struct rump_vop_symlink_args, a_cnp),
966 NULL,
969 RUMP_VOP_SYMLINK(struct vnode *dvp,
970 struct vnode **vpp,
971 struct componentname *cnp,
972 struct vattr *vap,
973 char *target)
975 int error;
976 bool mpsafe;
977 struct rump_vop_symlink_args a;
978 a.a_desc = VDESC(rump_vop_symlink);
979 a.a_dvp = dvp;
980 a.a_vpp = vpp;
981 a.a_cnp = cnp;
982 a.a_vap = vap;
983 a.a_target = target;
984 mpsafe = (dvp->v_vflag & VV_MPSAFE);
985 rump_schedule();
986 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
987 error = (VCALL(dvp, VOFFSET(rump_vop_symlink), &a));
988 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
989 rump_unschedule();
990 #ifdef DIAGNOSTIC
991 if (error == 0)
992 KASSERT((*vpp)->v_size != VSIZENOTSET
993 && (*vpp)->v_writesize != VSIZENOTSET);
994 #endif /* DIAGNOSTIC */
995 return error;
998 const int rump_vop_readdir_vp_offsets[] = {
999 VOPARG_OFFSETOF(struct rump_vop_readdir_args,a_vp),
1000 VDESC_NO_OFFSET
1002 const struct vnodeop_desc rump_vop_readdir_desc = {
1003 RUMP_VOP_READDIR_DESCOFFSET,
1004 "rump_vop_readdir",
1006 rump_vop_readdir_vp_offsets,
1007 VDESC_NO_OFFSET,
1008 VOPARG_OFFSETOF(struct rump_vop_readdir_args, a_cred),
1009 VDESC_NO_OFFSET,
1010 NULL,
1013 RUMP_VOP_READDIR(struct vnode *vp,
1014 struct uio *uio,
1015 kauth_cred_t cred,
1016 int *eofflag,
1017 off_t **cookies,
1018 int *ncookies)
1020 int error;
1021 bool mpsafe;
1022 struct rump_vop_readdir_args a;
1023 a.a_desc = VDESC(rump_vop_readdir);
1024 a.a_vp = vp;
1025 a.a_uio = uio;
1026 a.a_cred = cred;
1027 a.a_eofflag = eofflag;
1028 a.a_cookies = cookies;
1029 a.a_ncookies = ncookies;
1030 mpsafe = (vp->v_vflag & VV_MPSAFE);
1031 rump_schedule();
1032 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1033 error = (VCALL(vp, VOFFSET(rump_vop_readdir), &a));
1034 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1035 rump_unschedule();
1036 return error;
1039 const int rump_vop_readlink_vp_offsets[] = {
1040 VOPARG_OFFSETOF(struct rump_vop_readlink_args,a_vp),
1041 VDESC_NO_OFFSET
1043 const struct vnodeop_desc rump_vop_readlink_desc = {
1044 RUMP_VOP_READLINK_DESCOFFSET,
1045 "rump_vop_readlink",
1047 rump_vop_readlink_vp_offsets,
1048 VDESC_NO_OFFSET,
1049 VOPARG_OFFSETOF(struct rump_vop_readlink_args, a_cred),
1050 VDESC_NO_OFFSET,
1051 NULL,
1054 RUMP_VOP_READLINK(struct vnode *vp,
1055 struct uio *uio,
1056 kauth_cred_t cred)
1058 int error;
1059 bool mpsafe;
1060 struct rump_vop_readlink_args a;
1061 a.a_desc = VDESC(rump_vop_readlink);
1062 a.a_vp = vp;
1063 a.a_uio = uio;
1064 a.a_cred = cred;
1065 mpsafe = (vp->v_vflag & VV_MPSAFE);
1066 rump_schedule();
1067 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1068 error = (VCALL(vp, VOFFSET(rump_vop_readlink), &a));
1069 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1070 rump_unschedule();
1071 return error;
1074 const int rump_vop_abortop_vp_offsets[] = {
1075 VOPARG_OFFSETOF(struct rump_vop_abortop_args,a_dvp),
1076 VDESC_NO_OFFSET
1078 const struct vnodeop_desc rump_vop_abortop_desc = {
1079 RUMP_VOP_ABORTOP_DESCOFFSET,
1080 "rump_vop_abortop",
1082 rump_vop_abortop_vp_offsets,
1083 VDESC_NO_OFFSET,
1084 VDESC_NO_OFFSET,
1085 VOPARG_OFFSETOF(struct rump_vop_abortop_args, a_cnp),
1086 NULL,
1089 RUMP_VOP_ABORTOP(struct vnode *dvp,
1090 struct componentname *cnp)
1092 int error;
1093 bool mpsafe;
1094 struct rump_vop_abortop_args a;
1095 a.a_desc = VDESC(rump_vop_abortop);
1096 a.a_dvp = dvp;
1097 a.a_cnp = cnp;
1098 mpsafe = (dvp->v_vflag & VV_MPSAFE);
1099 rump_schedule();
1100 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1101 error = (VCALL(dvp, VOFFSET(rump_vop_abortop), &a));
1102 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1103 rump_unschedule();
1104 return error;
1107 const int rump_vop_inactive_vp_offsets[] = {
1108 VOPARG_OFFSETOF(struct rump_vop_inactive_args,a_vp),
1109 VDESC_NO_OFFSET
1111 const struct vnodeop_desc rump_vop_inactive_desc = {
1112 RUMP_VOP_INACTIVE_DESCOFFSET,
1113 "rump_vop_inactive",
1114 0 | VDESC_VP0_WILLUNLOCK,
1115 rump_vop_inactive_vp_offsets,
1116 VDESC_NO_OFFSET,
1117 VDESC_NO_OFFSET,
1118 VDESC_NO_OFFSET,
1119 NULL,
1122 RUMP_VOP_INACTIVE(struct vnode *vp,
1123 bool *recycle)
1125 int error;
1126 bool mpsafe;
1127 struct rump_vop_inactive_args a;
1128 a.a_desc = VDESC(rump_vop_inactive);
1129 a.a_vp = vp;
1130 a.a_recycle = recycle;
1131 mpsafe = (vp->v_vflag & VV_MPSAFE);
1132 rump_schedule();
1133 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1134 error = (VCALL(vp, VOFFSET(rump_vop_inactive), &a));
1135 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1136 rump_unschedule();
1137 return error;
1140 const int rump_vop_reclaim_vp_offsets[] = {
1141 VOPARG_OFFSETOF(struct rump_vop_reclaim_args,a_vp),
1142 VDESC_NO_OFFSET
1144 const struct vnodeop_desc rump_vop_reclaim_desc = {
1145 RUMP_VOP_RECLAIM_DESCOFFSET,
1146 "rump_vop_reclaim",
1148 rump_vop_reclaim_vp_offsets,
1149 VDESC_NO_OFFSET,
1150 VDESC_NO_OFFSET,
1151 VDESC_NO_OFFSET,
1152 NULL,
1155 RUMP_VOP_RECLAIM(struct vnode *vp)
1157 int error;
1158 bool mpsafe;
1159 struct rump_vop_reclaim_args a;
1160 a.a_desc = VDESC(rump_vop_reclaim);
1161 a.a_vp = vp;
1162 mpsafe = (vp->v_vflag & VV_MPSAFE);
1163 rump_schedule();
1164 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1165 error = (VCALL(vp, VOFFSET(rump_vop_reclaim), &a));
1166 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1167 rump_unschedule();
1168 return error;
1171 const int rump_vop_lock_vp_offsets[] = {
1172 VOPARG_OFFSETOF(struct rump_vop_lock_args,a_vp),
1173 VDESC_NO_OFFSET
1175 const struct vnodeop_desc rump_vop_lock_desc = {
1176 RUMP_VOP_LOCK_DESCOFFSET,
1177 "rump_vop_lock",
1179 rump_vop_lock_vp_offsets,
1180 VDESC_NO_OFFSET,
1181 VDESC_NO_OFFSET,
1182 VDESC_NO_OFFSET,
1183 NULL,
1186 RUMP_VOP_LOCK(struct vnode *vp,
1187 int flags)
1189 int error;
1190 bool mpsafe;
1191 struct rump_vop_lock_args a;
1192 a.a_desc = VDESC(rump_vop_lock);
1193 a.a_vp = vp;
1194 a.a_flags = flags;
1195 mpsafe = (vp->v_vflag & VV_MPSAFE);
1196 rump_schedule();
1197 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1198 error = (VCALL(vp, VOFFSET(rump_vop_lock), &a));
1199 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1200 rump_unschedule();
1201 return error;
1204 const int rump_vop_unlock_vp_offsets[] = {
1205 VOPARG_OFFSETOF(struct rump_vop_unlock_args,a_vp),
1206 VDESC_NO_OFFSET
1208 const struct vnodeop_desc rump_vop_unlock_desc = {
1209 RUMP_VOP_UNLOCK_DESCOFFSET,
1210 "rump_vop_unlock",
1212 rump_vop_unlock_vp_offsets,
1213 VDESC_NO_OFFSET,
1214 VDESC_NO_OFFSET,
1215 VDESC_NO_OFFSET,
1216 NULL,
1219 RUMP_VOP_UNLOCK(struct vnode *vp,
1220 int flags)
1222 int error;
1223 bool mpsafe;
1224 struct rump_vop_unlock_args a;
1225 a.a_desc = VDESC(rump_vop_unlock);
1226 a.a_vp = vp;
1227 a.a_flags = flags;
1228 mpsafe = (vp->v_vflag & VV_MPSAFE);
1229 rump_schedule();
1230 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1231 error = (VCALL(vp, VOFFSET(rump_vop_unlock), &a));
1232 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1233 rump_unschedule();
1234 return error;
1237 const int rump_vop_bmap_vp_offsets[] = {
1238 VOPARG_OFFSETOF(struct rump_vop_bmap_args,a_vp),
1239 VDESC_NO_OFFSET
1241 const struct vnodeop_desc rump_vop_bmap_desc = {
1242 RUMP_VOP_BMAP_DESCOFFSET,
1243 "rump_vop_bmap",
1245 rump_vop_bmap_vp_offsets,
1246 VOPARG_OFFSETOF(struct rump_vop_bmap_args, a_vpp),
1247 VDESC_NO_OFFSET,
1248 VDESC_NO_OFFSET,
1249 NULL,
1252 RUMP_VOP_BMAP(struct vnode *vp,
1253 daddr_t bn,
1254 struct vnode **vpp,
1255 daddr_t *bnp,
1256 int *runp)
1258 int error;
1259 bool mpsafe;
1260 struct rump_vop_bmap_args a;
1261 a.a_desc = VDESC(rump_vop_bmap);
1262 a.a_vp = vp;
1263 a.a_bn = bn;
1264 a.a_vpp = vpp;
1265 a.a_bnp = bnp;
1266 a.a_runp = runp;
1267 mpsafe = (vp->v_vflag & VV_MPSAFE);
1268 rump_schedule();
1269 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1270 error = (VCALL(vp, VOFFSET(rump_vop_bmap), &a));
1271 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1272 rump_unschedule();
1273 return error;
1276 const int rump_vop_strategy_vp_offsets[] = {
1277 VOPARG_OFFSETOF(struct rump_vop_strategy_args,a_vp),
1278 VDESC_NO_OFFSET
1280 const struct vnodeop_desc rump_vop_strategy_desc = {
1281 RUMP_VOP_STRATEGY_DESCOFFSET,
1282 "rump_vop_strategy",
1284 rump_vop_strategy_vp_offsets,
1285 VDESC_NO_OFFSET,
1286 VDESC_NO_OFFSET,
1287 VDESC_NO_OFFSET,
1288 NULL,
1291 RUMP_VOP_STRATEGY(struct vnode *vp,
1292 struct buf *bp)
1294 int error;
1295 bool mpsafe;
1296 struct rump_vop_strategy_args a;
1297 a.a_desc = VDESC(rump_vop_strategy);
1298 a.a_vp = vp;
1299 a.a_bp = bp;
1300 mpsafe = (vp->v_vflag & VV_MPSAFE);
1301 rump_schedule();
1302 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1303 error = (VCALL(vp, VOFFSET(rump_vop_strategy), &a));
1304 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1305 rump_unschedule();
1306 return error;
1309 const int rump_vop_print_vp_offsets[] = {
1310 VOPARG_OFFSETOF(struct rump_vop_print_args,a_vp),
1311 VDESC_NO_OFFSET
1313 const struct vnodeop_desc rump_vop_print_desc = {
1314 RUMP_VOP_PRINT_DESCOFFSET,
1315 "rump_vop_print",
1317 rump_vop_print_vp_offsets,
1318 VDESC_NO_OFFSET,
1319 VDESC_NO_OFFSET,
1320 VDESC_NO_OFFSET,
1321 NULL,
1324 RUMP_VOP_PRINT(struct vnode *vp)
1326 int error;
1327 bool mpsafe;
1328 struct rump_vop_print_args a;
1329 a.a_desc = VDESC(rump_vop_print);
1330 a.a_vp = vp;
1331 mpsafe = (vp->v_vflag & VV_MPSAFE);
1332 rump_schedule();
1333 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1334 error = (VCALL(vp, VOFFSET(rump_vop_print), &a));
1335 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1336 rump_unschedule();
1337 return error;
1340 const int rump_vop_islocked_vp_offsets[] = {
1341 VOPARG_OFFSETOF(struct rump_vop_islocked_args,a_vp),
1342 VDESC_NO_OFFSET
1344 const struct vnodeop_desc rump_vop_islocked_desc = {
1345 RUMP_VOP_ISLOCKED_DESCOFFSET,
1346 "rump_vop_islocked",
1348 rump_vop_islocked_vp_offsets,
1349 VDESC_NO_OFFSET,
1350 VDESC_NO_OFFSET,
1351 VDESC_NO_OFFSET,
1352 NULL,
1355 RUMP_VOP_ISLOCKED(struct vnode *vp)
1357 int error;
1358 bool mpsafe;
1359 struct rump_vop_islocked_args a;
1360 a.a_desc = VDESC(rump_vop_islocked);
1361 a.a_vp = vp;
1362 mpsafe = (vp->v_vflag & VV_MPSAFE);
1363 rump_schedule();
1364 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1365 error = (VCALL(vp, VOFFSET(rump_vop_islocked), &a));
1366 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1367 rump_unschedule();
1368 return error;
1371 const int rump_vop_pathconf_vp_offsets[] = {
1372 VOPARG_OFFSETOF(struct rump_vop_pathconf_args,a_vp),
1373 VDESC_NO_OFFSET
1375 const struct vnodeop_desc rump_vop_pathconf_desc = {
1376 RUMP_VOP_PATHCONF_DESCOFFSET,
1377 "rump_vop_pathconf",
1379 rump_vop_pathconf_vp_offsets,
1380 VDESC_NO_OFFSET,
1381 VDESC_NO_OFFSET,
1382 VDESC_NO_OFFSET,
1383 NULL,
1386 RUMP_VOP_PATHCONF(struct vnode *vp,
1387 int name,
1388 register_t *retval)
1390 int error;
1391 bool mpsafe;
1392 struct rump_vop_pathconf_args a;
1393 a.a_desc = VDESC(rump_vop_pathconf);
1394 a.a_vp = vp;
1395 a.a_name = name;
1396 a.a_retval = retval;
1397 mpsafe = (vp->v_vflag & VV_MPSAFE);
1398 rump_schedule();
1399 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1400 error = (VCALL(vp, VOFFSET(rump_vop_pathconf), &a));
1401 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1402 rump_unschedule();
1403 return error;
1406 const int rump_vop_advlock_vp_offsets[] = {
1407 VOPARG_OFFSETOF(struct rump_vop_advlock_args,a_vp),
1408 VDESC_NO_OFFSET
1410 const struct vnodeop_desc rump_vop_advlock_desc = {
1411 RUMP_VOP_ADVLOCK_DESCOFFSET,
1412 "rump_vop_advlock",
1414 rump_vop_advlock_vp_offsets,
1415 VDESC_NO_OFFSET,
1416 VDESC_NO_OFFSET,
1417 VDESC_NO_OFFSET,
1418 NULL,
1421 RUMP_VOP_ADVLOCK(struct vnode *vp,
1422 void *id,
1423 int op,
1424 struct flock *fl,
1425 int flags)
1427 int error;
1428 bool mpsafe;
1429 struct rump_vop_advlock_args a;
1430 a.a_desc = VDESC(rump_vop_advlock);
1431 a.a_vp = vp;
1432 a.a_id = id;
1433 a.a_op = op;
1434 a.a_fl = fl;
1435 a.a_flags = flags;
1436 mpsafe = (vp->v_vflag & VV_MPSAFE);
1437 rump_schedule();
1438 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1439 error = (VCALL(vp, VOFFSET(rump_vop_advlock), &a));
1440 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1441 rump_unschedule();
1442 return error;
1445 const int rump_vop_whiteout_vp_offsets[] = {
1446 VOPARG_OFFSETOF(struct rump_vop_whiteout_args,a_dvp),
1447 VDESC_NO_OFFSET
1449 const struct vnodeop_desc rump_vop_whiteout_desc = {
1450 RUMP_VOP_WHITEOUT_DESCOFFSET,
1451 "rump_vop_whiteout",
1453 rump_vop_whiteout_vp_offsets,
1454 VDESC_NO_OFFSET,
1455 VDESC_NO_OFFSET,
1456 VOPARG_OFFSETOF(struct rump_vop_whiteout_args, a_cnp),
1457 NULL,
1460 RUMP_VOP_WHITEOUT(struct vnode *dvp,
1461 struct componentname *cnp,
1462 int flags)
1464 int error;
1465 bool mpsafe;
1466 struct rump_vop_whiteout_args a;
1467 a.a_desc = VDESC(rump_vop_whiteout);
1468 a.a_dvp = dvp;
1469 a.a_cnp = cnp;
1470 a.a_flags = flags;
1471 mpsafe = (dvp->v_vflag & VV_MPSAFE);
1472 rump_schedule();
1473 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1474 error = (VCALL(dvp, VOFFSET(rump_vop_whiteout), &a));
1475 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1476 rump_unschedule();
1477 return error;
1480 const int rump_vop_getpages_vp_offsets[] = {
1481 VOPARG_OFFSETOF(struct rump_vop_getpages_args,a_vp),
1482 VDESC_NO_OFFSET
1484 const struct vnodeop_desc rump_vop_getpages_desc = {
1485 RUMP_VOP_GETPAGES_DESCOFFSET,
1486 "rump_vop_getpages",
1488 rump_vop_getpages_vp_offsets,
1489 VDESC_NO_OFFSET,
1490 VDESC_NO_OFFSET,
1491 VDESC_NO_OFFSET,
1492 NULL,
1495 RUMP_VOP_GETPAGES(struct vnode *vp,
1496 off_t offset,
1497 struct vm_page **m,
1498 int *count,
1499 int centeridx,
1500 int access_type,
1501 int advice,
1502 int flags)
1504 int error;
1505 bool mpsafe;
1506 struct rump_vop_getpages_args a;
1507 a.a_desc = VDESC(rump_vop_getpages);
1508 a.a_vp = vp;
1509 a.a_offset = offset;
1510 a.a_m = m;
1511 a.a_count = count;
1512 a.a_centeridx = centeridx;
1513 a.a_access_type = access_type;
1514 a.a_advice = advice;
1515 a.a_flags = flags;
1516 mpsafe = (vp->v_vflag & VV_MPSAFE);
1517 rump_schedule();
1518 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1519 error = (VCALL(vp, VOFFSET(rump_vop_getpages), &a));
1520 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1521 rump_unschedule();
1522 return error;
1525 const int rump_vop_putpages_vp_offsets[] = {
1526 VOPARG_OFFSETOF(struct rump_vop_putpages_args,a_vp),
1527 VDESC_NO_OFFSET
1529 const struct vnodeop_desc rump_vop_putpages_desc = {
1530 RUMP_VOP_PUTPAGES_DESCOFFSET,
1531 "rump_vop_putpages",
1533 rump_vop_putpages_vp_offsets,
1534 VDESC_NO_OFFSET,
1535 VDESC_NO_OFFSET,
1536 VDESC_NO_OFFSET,
1537 NULL,
1540 RUMP_VOP_PUTPAGES(struct vnode *vp,
1541 off_t offlo,
1542 off_t offhi,
1543 int flags)
1545 int error;
1546 bool mpsafe;
1547 struct rump_vop_putpages_args a;
1548 a.a_desc = VDESC(rump_vop_putpages);
1549 a.a_vp = vp;
1550 a.a_offlo = offlo;
1551 a.a_offhi = offhi;
1552 a.a_flags = flags;
1553 mpsafe = (vp->v_vflag & VV_MPSAFE);
1554 rump_schedule();
1555 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1556 error = (VCALL(vp, VOFFSET(rump_vop_putpages), &a));
1557 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1558 rump_unschedule();
1559 return error;
1562 const int rump_vop_closeextattr_vp_offsets[] = {
1563 VOPARG_OFFSETOF(struct rump_vop_closeextattr_args,a_vp),
1564 VDESC_NO_OFFSET
1566 const struct vnodeop_desc rump_vop_closeextattr_desc = {
1567 RUMP_VOP_CLOSEEXTATTR_DESCOFFSET,
1568 "rump_vop_closeextattr",
1570 rump_vop_closeextattr_vp_offsets,
1571 VDESC_NO_OFFSET,
1572 VOPARG_OFFSETOF(struct rump_vop_closeextattr_args, a_cred),
1573 VDESC_NO_OFFSET,
1574 NULL,
1577 RUMP_VOP_CLOSEEXTATTR(struct vnode *vp,
1578 int commit,
1579 kauth_cred_t cred)
1581 int error;
1582 bool mpsafe;
1583 struct rump_vop_closeextattr_args a;
1584 a.a_desc = VDESC(rump_vop_closeextattr);
1585 a.a_vp = vp;
1586 a.a_commit = commit;
1587 a.a_cred = cred;
1588 mpsafe = (vp->v_vflag & VV_MPSAFE);
1589 rump_schedule();
1590 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1591 error = (VCALL(vp, VOFFSET(rump_vop_closeextattr), &a));
1592 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1593 rump_unschedule();
1594 return error;
1597 const int rump_vop_getextattr_vp_offsets[] = {
1598 VOPARG_OFFSETOF(struct rump_vop_getextattr_args,a_vp),
1599 VDESC_NO_OFFSET
1601 const struct vnodeop_desc rump_vop_getextattr_desc = {
1602 RUMP_VOP_GETEXTATTR_DESCOFFSET,
1603 "rump_vop_getextattr",
1605 rump_vop_getextattr_vp_offsets,
1606 VDESC_NO_OFFSET,
1607 VOPARG_OFFSETOF(struct rump_vop_getextattr_args, a_cred),
1608 VDESC_NO_OFFSET,
1609 NULL,
1612 RUMP_VOP_GETEXTATTR(struct vnode *vp,
1613 int attrnamespace,
1614 const char *name,
1615 struct uio *uio,
1616 size_t *size,
1617 kauth_cred_t cred)
1619 int error;
1620 bool mpsafe;
1621 struct rump_vop_getextattr_args a;
1622 a.a_desc = VDESC(rump_vop_getextattr);
1623 a.a_vp = vp;
1624 a.a_attrnamespace = attrnamespace;
1625 a.a_name = name;
1626 a.a_uio = uio;
1627 a.a_size = size;
1628 a.a_cred = cred;
1629 mpsafe = (vp->v_vflag & VV_MPSAFE);
1630 rump_schedule();
1631 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1632 error = (VCALL(vp, VOFFSET(rump_vop_getextattr), &a));
1633 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1634 rump_unschedule();
1635 return error;
1638 const int rump_vop_listextattr_vp_offsets[] = {
1639 VOPARG_OFFSETOF(struct rump_vop_listextattr_args,a_vp),
1640 VDESC_NO_OFFSET
1642 const struct vnodeop_desc rump_vop_listextattr_desc = {
1643 RUMP_VOP_LISTEXTATTR_DESCOFFSET,
1644 "rump_vop_listextattr",
1646 rump_vop_listextattr_vp_offsets,
1647 VDESC_NO_OFFSET,
1648 VOPARG_OFFSETOF(struct rump_vop_listextattr_args, a_cred),
1649 VDESC_NO_OFFSET,
1650 NULL,
1653 RUMP_VOP_LISTEXTATTR(struct vnode *vp,
1654 int attrnamespace,
1655 struct uio *uio,
1656 size_t *size,
1657 kauth_cred_t cred)
1659 int error;
1660 bool mpsafe;
1661 struct rump_vop_listextattr_args a;
1662 a.a_desc = VDESC(rump_vop_listextattr);
1663 a.a_vp = vp;
1664 a.a_attrnamespace = attrnamespace;
1665 a.a_uio = uio;
1666 a.a_size = size;
1667 a.a_cred = cred;
1668 mpsafe = (vp->v_vflag & VV_MPSAFE);
1669 rump_schedule();
1670 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1671 error = (VCALL(vp, VOFFSET(rump_vop_listextattr), &a));
1672 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1673 rump_unschedule();
1674 return error;
1677 const int rump_vop_openextattr_vp_offsets[] = {
1678 VOPARG_OFFSETOF(struct rump_vop_openextattr_args,a_vp),
1679 VDESC_NO_OFFSET
1681 const struct vnodeop_desc rump_vop_openextattr_desc = {
1682 RUMP_VOP_OPENEXTATTR_DESCOFFSET,
1683 "rump_vop_openextattr",
1685 rump_vop_openextattr_vp_offsets,
1686 VDESC_NO_OFFSET,
1687 VOPARG_OFFSETOF(struct rump_vop_openextattr_args, a_cred),
1688 VDESC_NO_OFFSET,
1689 NULL,
1692 RUMP_VOP_OPENEXTATTR(struct vnode *vp,
1693 kauth_cred_t cred)
1695 int error;
1696 bool mpsafe;
1697 struct rump_vop_openextattr_args a;
1698 a.a_desc = VDESC(rump_vop_openextattr);
1699 a.a_vp = vp;
1700 a.a_cred = cred;
1701 mpsafe = (vp->v_vflag & VV_MPSAFE);
1702 rump_schedule();
1703 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1704 error = (VCALL(vp, VOFFSET(rump_vop_openextattr), &a));
1705 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1706 rump_unschedule();
1707 return error;
1710 const int rump_vop_deleteextattr_vp_offsets[] = {
1711 VOPARG_OFFSETOF(struct rump_vop_deleteextattr_args,a_vp),
1712 VDESC_NO_OFFSET
1714 const struct vnodeop_desc rump_vop_deleteextattr_desc = {
1715 RUMP_VOP_DELETEEXTATTR_DESCOFFSET,
1716 "rump_vop_deleteextattr",
1718 rump_vop_deleteextattr_vp_offsets,
1719 VDESC_NO_OFFSET,
1720 VOPARG_OFFSETOF(struct rump_vop_deleteextattr_args, a_cred),
1721 VDESC_NO_OFFSET,
1722 NULL,
1725 RUMP_VOP_DELETEEXTATTR(struct vnode *vp,
1726 int attrnamespace,
1727 const char *name,
1728 kauth_cred_t cred)
1730 int error;
1731 bool mpsafe;
1732 struct rump_vop_deleteextattr_args a;
1733 a.a_desc = VDESC(rump_vop_deleteextattr);
1734 a.a_vp = vp;
1735 a.a_attrnamespace = attrnamespace;
1736 a.a_name = name;
1737 a.a_cred = cred;
1738 mpsafe = (vp->v_vflag & VV_MPSAFE);
1739 rump_schedule();
1740 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1741 error = (VCALL(vp, VOFFSET(rump_vop_deleteextattr), &a));
1742 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1743 rump_unschedule();
1744 return error;
1747 const int rump_vop_setextattr_vp_offsets[] = {
1748 VOPARG_OFFSETOF(struct rump_vop_setextattr_args,a_vp),
1749 VDESC_NO_OFFSET
1751 const struct vnodeop_desc rump_vop_setextattr_desc = {
1752 RUMP_VOP_SETEXTATTR_DESCOFFSET,
1753 "rump_vop_setextattr",
1755 rump_vop_setextattr_vp_offsets,
1756 VDESC_NO_OFFSET,
1757 VOPARG_OFFSETOF(struct rump_vop_setextattr_args, a_cred),
1758 VDESC_NO_OFFSET,
1759 NULL,
1762 RUMP_VOP_SETEXTATTR(struct vnode *vp,
1763 int attrnamespace,
1764 const char *name,
1765 struct uio *uio,
1766 kauth_cred_t cred)
1768 int error;
1769 bool mpsafe;
1770 struct rump_vop_setextattr_args a;
1771 a.a_desc = VDESC(rump_vop_setextattr);
1772 a.a_vp = vp;
1773 a.a_attrnamespace = attrnamespace;
1774 a.a_name = name;
1775 a.a_uio = uio;
1776 a.a_cred = cred;
1777 mpsafe = (vp->v_vflag & VV_MPSAFE);
1778 rump_schedule();
1779 if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
1780 error = (VCALL(vp, VOFFSET(rump_vop_setextattr), &a));
1781 if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1782 rump_unschedule();
1783 return error;
1786 /* End of special cases. */
1788 const struct vnodeop_desc * const rump_vfs_op_descs[] = {
1789 &rump_vop_default_desc, /* MUST BE FIRST */
1790 &rump_vop_bwrite_desc, /* XXX: SPECIAL CASE */
1792 &rump_vop_lookup_desc,
1793 &rump_vop_create_desc,
1794 &rump_vop_mknod_desc,
1795 &rump_vop_open_desc,
1796 &rump_vop_close_desc,
1797 &rump_vop_access_desc,
1798 &rump_vop_getattr_desc,
1799 &rump_vop_setattr_desc,
1800 &rump_vop_read_desc,
1801 &rump_vop_write_desc,
1802 &rump_vop_ioctl_desc,
1803 &rump_vop_fcntl_desc,
1804 &rump_vop_poll_desc,
1805 &rump_vop_kqfilter_desc,
1806 &rump_vop_revoke_desc,
1807 &rump_vop_mmap_desc,
1808 &rump_vop_fsync_desc,
1809 &rump_vop_seek_desc,
1810 &rump_vop_remove_desc,
1811 &rump_vop_link_desc,
1812 &rump_vop_rename_desc,
1813 &rump_vop_mkdir_desc,
1814 &rump_vop_rmdir_desc,
1815 &rump_vop_symlink_desc,
1816 &rump_vop_readdir_desc,
1817 &rump_vop_readlink_desc,
1818 &rump_vop_abortop_desc,
1819 &rump_vop_inactive_desc,
1820 &rump_vop_reclaim_desc,
1821 &rump_vop_lock_desc,
1822 &rump_vop_unlock_desc,
1823 &rump_vop_bmap_desc,
1824 &rump_vop_strategy_desc,
1825 &rump_vop_print_desc,
1826 &rump_vop_islocked_desc,
1827 &rump_vop_pathconf_desc,
1828 &rump_vop_advlock_desc,
1829 &rump_vop_whiteout_desc,
1830 &rump_vop_getpages_desc,
1831 &rump_vop_putpages_desc,
1832 &rump_vop_closeextattr_desc,
1833 &rump_vop_getextattr_desc,
1834 &rump_vop_listextattr_desc,
1835 &rump_vop_openextattr_desc,
1836 &rump_vop_deleteextattr_desc,
1837 &rump_vop_setextattr_desc,
1838 NULL