rumpvnode_if.c revision 1.1.10.3 1 /* $NetBSD: rumpvnode_if.c,v 1.1.10.3 2010/03/11 15:04:39 yamt Exp $ */
2
3 /*
4 * Warning: DO NOT EDIT! This file is automatically generated!
5 * (Modifications made here may easily be lost!)
6 *
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
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: rumpvnode_if.c,v 1.1.10.3 2010/03/11 15:04:39 yamt Exp $");
44
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"
52
53 const struct vnodeop_desc rump_vop_default_desc = {
54 0,
55 "default",
56 0,
57 NULL,
58 VDESC_NO_OFFSET,
59 VDESC_NO_OFFSET,
60 VDESC_NO_OFFSET,
61 NULL,
62 };
63
64
65 /* Special cases: */
66
67 const int rump_vop_bwrite_vp_offsets[] = {
68 VDESC_NO_OFFSET
69 };
70 const struct vnodeop_desc rump_vop_bwrite_desc = {
71 RUMP_VOP_BWRITE_DESCOFFSET,
72 "rump_vop_bwrite",
73 0,
74 rump_vop_bwrite_vp_offsets,
75 VDESC_NO_OFFSET,
76 VDESC_NO_OFFSET,
77 VDESC_NO_OFFSET,
78 NULL,
79 };
80 int
81 RUMP_VOP_BWRITE(struct buf *bp)
82 {
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;
95 }
96
97 /* End of special cases */
98
99 const int rump_vop_lookup_vp_offsets[] = {
100 VOPARG_OFFSETOF(struct rump_vop_lookup_args,a_dvp),
101 VDESC_NO_OFFSET
102 };
103 const struct vnodeop_desc rump_vop_lookup_desc = {
104 RUMP_VOP_LOOKUP_DESCOFFSET,
105 "rump_vop_lookup",
106 0,
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,
112 };
113 int
114 RUMP_VOP_LOOKUP(struct vnode *dvp,
115 struct vnode **vpp,
116 struct componentname *cnp)
117 {
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;
137 }
138
139 const int rump_vop_create_vp_offsets[] = {
140 VOPARG_OFFSETOF(struct rump_vop_create_args,a_dvp),
141 VDESC_NO_OFFSET
142 };
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,
152 };
153 int
154 RUMP_VOP_CREATE(struct vnode *dvp,
155 struct vnode **vpp,
156 struct componentname *cnp,
157 struct vattr *vap)
158 {
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;
179 }
180
181 const int rump_vop_mknod_vp_offsets[] = {
182 VOPARG_OFFSETOF(struct rump_vop_mknod_args,a_dvp),
183 VDESC_NO_OFFSET
184 };
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,
194 };
195 int
196 RUMP_VOP_MKNOD(struct vnode *dvp,
197 struct vnode **vpp,
198 struct componentname *cnp,
199 struct vattr *vap)
200 {
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;
221 }
222
223 const int rump_vop_open_vp_offsets[] = {
224 VOPARG_OFFSETOF(struct rump_vop_open_args,a_vp),
225 VDESC_NO_OFFSET
226 };
227 const struct vnodeop_desc rump_vop_open_desc = {
228 RUMP_VOP_OPEN_DESCOFFSET,
229 "rump_vop_open",
230 0,
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,
236 };
237 int
238 RUMP_VOP_OPEN(struct vnode *vp,
239 int mode,
240 kauth_cred_t cred)
241 {
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;
256 }
257
258 const int rump_vop_close_vp_offsets[] = {
259 VOPARG_OFFSETOF(struct rump_vop_close_args,a_vp),
260 VDESC_NO_OFFSET
261 };
262 const struct vnodeop_desc rump_vop_close_desc = {
263 RUMP_VOP_CLOSE_DESCOFFSET,
264 "rump_vop_close",
265 0,
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,
271 };
272 int
273 RUMP_VOP_CLOSE(struct vnode *vp,
274 int fflag,
275 kauth_cred_t cred)
276 {
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;
291 }
292
293 const int rump_vop_access_vp_offsets[] = {
294 VOPARG_OFFSETOF(struct rump_vop_access_args,a_vp),
295 VDESC_NO_OFFSET
296 };
297 const struct vnodeop_desc rump_vop_access_desc = {
298 RUMP_VOP_ACCESS_DESCOFFSET,
299 "rump_vop_access",
300 0,
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,
306 };
307 int
308 RUMP_VOP_ACCESS(struct vnode *vp,
309 int mode,
310 kauth_cred_t cred)
311 {
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;
326 }
327
328 const int rump_vop_getattr_vp_offsets[] = {
329 VOPARG_OFFSETOF(struct rump_vop_getattr_args,a_vp),
330 VDESC_NO_OFFSET
331 };
332 const struct vnodeop_desc rump_vop_getattr_desc = {
333 RUMP_VOP_GETATTR_DESCOFFSET,
334 "rump_vop_getattr",
335 0,
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,
341 };
342 int
343 RUMP_VOP_GETATTR(struct vnode *vp,
344 struct vattr *vap,
345 kauth_cred_t cred)
346 {
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;
361 }
362
363 const int rump_vop_setattr_vp_offsets[] = {
364 VOPARG_OFFSETOF(struct rump_vop_setattr_args,a_vp),
365 VDESC_NO_OFFSET
366 };
367 const struct vnodeop_desc rump_vop_setattr_desc = {
368 RUMP_VOP_SETATTR_DESCOFFSET,
369 "rump_vop_setattr",
370 0,
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,
376 };
377 int
378 RUMP_VOP_SETATTR(struct vnode *vp,
379 struct vattr *vap,
380 kauth_cred_t cred)
381 {
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;
396 }
397
398 const int rump_vop_read_vp_offsets[] = {
399 VOPARG_OFFSETOF(struct rump_vop_read_args,a_vp),
400 VDESC_NO_OFFSET
401 };
402 const struct vnodeop_desc rump_vop_read_desc = {
403 RUMP_VOP_READ_DESCOFFSET,
404 "rump_vop_read",
405 0,
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,
411 };
412 int
413 RUMP_VOP_READ(struct vnode *vp,
414 struct uio *uio,
415 int ioflag,
416 kauth_cred_t cred)
417 {
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;
433 }
434
435 const int rump_vop_write_vp_offsets[] = {
436 VOPARG_OFFSETOF(struct rump_vop_write_args,a_vp),
437 VDESC_NO_OFFSET
438 };
439 const struct vnodeop_desc rump_vop_write_desc = {
440 RUMP_VOP_WRITE_DESCOFFSET,
441 "rump_vop_write",
442 0,
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,
448 };
449 int
450 RUMP_VOP_WRITE(struct vnode *vp,
451 struct uio *uio,
452 int ioflag,
453 kauth_cred_t cred)
454 {
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;
470 }
471
472 const int rump_vop_ioctl_vp_offsets[] = {
473 VOPARG_OFFSETOF(struct rump_vop_ioctl_args,a_vp),
474 VDESC_NO_OFFSET
475 };
476 const struct vnodeop_desc rump_vop_ioctl_desc = {
477 RUMP_VOP_IOCTL_DESCOFFSET,
478 "rump_vop_ioctl",
479 0,
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,
485 };
486 int
487 RUMP_VOP_IOCTL(struct vnode *vp,
488 u_long command,
489 void *data,
490 int fflag,
491 kauth_cred_t cred)
492 {
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;
509 }
510
511 const int rump_vop_fcntl_vp_offsets[] = {
512 VOPARG_OFFSETOF(struct rump_vop_fcntl_args,a_vp),
513 VDESC_NO_OFFSET
514 };
515 const struct vnodeop_desc rump_vop_fcntl_desc = {
516 RUMP_VOP_FCNTL_DESCOFFSET,
517 "rump_vop_fcntl",
518 0,
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,
524 };
525 int
526 RUMP_VOP_FCNTL(struct vnode *vp,
527 u_int command,
528 void *data,
529 int fflag,
530 kauth_cred_t cred)
531 {
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;
548 }
549
550 const int rump_vop_poll_vp_offsets[] = {
551 VOPARG_OFFSETOF(struct rump_vop_poll_args,a_vp),
552 VDESC_NO_OFFSET
553 };
554 const struct vnodeop_desc rump_vop_poll_desc = {
555 RUMP_VOP_POLL_DESCOFFSET,
556 "rump_vop_poll",
557 0,
558 rump_vop_poll_vp_offsets,
559 VDESC_NO_OFFSET,
560 VDESC_NO_OFFSET,
561 VDESC_NO_OFFSET,
562 NULL,
563 };
564 int
565 RUMP_VOP_POLL(struct vnode *vp,
566 int events)
567 {
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;
581 }
582
583 const int rump_vop_kqfilter_vp_offsets[] = {
584 VOPARG_OFFSETOF(struct rump_vop_kqfilter_args,a_vp),
585 VDESC_NO_OFFSET
586 };
587 const struct vnodeop_desc rump_vop_kqfilter_desc = {
588 RUMP_VOP_KQFILTER_DESCOFFSET,
589 "rump_vop_kqfilter",
590 0,
591 rump_vop_kqfilter_vp_offsets,
592 VDESC_NO_OFFSET,
593 VDESC_NO_OFFSET,
594 VDESC_NO_OFFSET,
595 NULL,
596 };
597 int
598 RUMP_VOP_KQFILTER(struct vnode *vp,
599 struct knote *kn)
600 {
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;
614 }
615
616 const int rump_vop_revoke_vp_offsets[] = {
617 VOPARG_OFFSETOF(struct rump_vop_revoke_args,a_vp),
618 VDESC_NO_OFFSET
619 };
620 const struct vnodeop_desc rump_vop_revoke_desc = {
621 RUMP_VOP_REVOKE_DESCOFFSET,
622 "rump_vop_revoke",
623 0,
624 rump_vop_revoke_vp_offsets,
625 VDESC_NO_OFFSET,
626 VDESC_NO_OFFSET,
627 VDESC_NO_OFFSET,
628 NULL,
629 };
630 int
631 RUMP_VOP_REVOKE(struct vnode *vp,
632 int flags)
633 {
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;
647 }
648
649 const int rump_vop_mmap_vp_offsets[] = {
650 VOPARG_OFFSETOF(struct rump_vop_mmap_args,a_vp),
651 VDESC_NO_OFFSET
652 };
653 const struct vnodeop_desc rump_vop_mmap_desc = {
654 RUMP_VOP_MMAP_DESCOFFSET,
655 "rump_vop_mmap",
656 0,
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,
662 };
663 int
664 RUMP_VOP_MMAP(struct vnode *vp,
665 int prot,
666 kauth_cred_t cred)
667 {
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;
682 }
683
684 const int rump_vop_fsync_vp_offsets[] = {
685 VOPARG_OFFSETOF(struct rump_vop_fsync_args,a_vp),
686 VDESC_NO_OFFSET
687 };
688 const struct vnodeop_desc rump_vop_fsync_desc = {
689 RUMP_VOP_FSYNC_DESCOFFSET,
690 "rump_vop_fsync",
691 0,
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,
697 };
698 int
699 RUMP_VOP_FSYNC(struct vnode *vp,
700 kauth_cred_t cred,
701 int flags,
702 off_t offlo,
703 off_t offhi)
704 {
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;
721 }
722
723 const int rump_vop_seek_vp_offsets[] = {
724 VOPARG_OFFSETOF(struct rump_vop_seek_args,a_vp),
725 VDESC_NO_OFFSET
726 };
727 const struct vnodeop_desc rump_vop_seek_desc = {
728 RUMP_VOP_SEEK_DESCOFFSET,
729 "rump_vop_seek",
730 0,
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,
736 };
737 int
738 RUMP_VOP_SEEK(struct vnode *vp,
739 off_t oldoff,
740 off_t newoff,
741 kauth_cred_t cred)
742 {
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;
758 }
759
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
764 };
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,
774 };
775 int
776 RUMP_VOP_REMOVE(struct vnode *dvp,
777 struct vnode *vp,
778 struct componentname *cnp)
779 {
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;
794 }
795
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
800 };
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,
810 };
811 int
812 RUMP_VOP_LINK(struct vnode *dvp,
813 struct vnode *vp,
814 struct componentname *cnp)
815 {
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;
830 }
831
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
838 };
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,
848 };
849 int
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)
856 {
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;
874 }
875
876 const int rump_vop_mkdir_vp_offsets[] = {
877 VOPARG_OFFSETOF(struct rump_vop_mkdir_args,a_dvp),
878 VDESC_NO_OFFSET
879 };
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,
889 };
890 int
891 RUMP_VOP_MKDIR(struct vnode *dvp,
892 struct vnode **vpp,
893 struct componentname *cnp,
894 struct vattr *vap)
895 {
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;
916 }
917
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
922 };
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,
932 };
933 int
934 RUMP_VOP_RMDIR(struct vnode *dvp,
935 struct vnode *vp,
936 struct componentname *cnp)
937 {
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;
952 }
953
954 const int rump_vop_symlink_vp_offsets[] = {
955 VOPARG_OFFSETOF(struct rump_vop_symlink_args,a_dvp),
956 VDESC_NO_OFFSET
957 };
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,
967 };
968 int
969 RUMP_VOP_SYMLINK(struct vnode *dvp,
970 struct vnode **vpp,
971 struct componentname *cnp,
972 struct vattr *vap,
973 char *target)
974 {
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;
996 }
997
998 const int rump_vop_readdir_vp_offsets[] = {
999 VOPARG_OFFSETOF(struct rump_vop_readdir_args,a_vp),
1000 VDESC_NO_OFFSET
1001 };
1002 const struct vnodeop_desc rump_vop_readdir_desc = {
1003 RUMP_VOP_READDIR_DESCOFFSET,
1004 "rump_vop_readdir",
1005 0,
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,
1011 };
1012 int
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)
1019 {
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;
1037 }
1038
1039 const int rump_vop_readlink_vp_offsets[] = {
1040 VOPARG_OFFSETOF(struct rump_vop_readlink_args,a_vp),
1041 VDESC_NO_OFFSET
1042 };
1043 const struct vnodeop_desc rump_vop_readlink_desc = {
1044 RUMP_VOP_READLINK_DESCOFFSET,
1045 "rump_vop_readlink",
1046 0,
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,
1052 };
1053 int
1054 RUMP_VOP_READLINK(struct vnode *vp,
1055 struct uio *uio,
1056 kauth_cred_t cred)
1057 {
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;
1072 }
1073
1074 const int rump_vop_abortop_vp_offsets[] = {
1075 VOPARG_OFFSETOF(struct rump_vop_abortop_args,a_dvp),
1076 VDESC_NO_OFFSET
1077 };
1078 const struct vnodeop_desc rump_vop_abortop_desc = {
1079 RUMP_VOP_ABORTOP_DESCOFFSET,
1080 "rump_vop_abortop",
1081 0,
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,
1087 };
1088 int
1089 RUMP_VOP_ABORTOP(struct vnode *dvp,
1090 struct componentname *cnp)
1091 {
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;
1105 }
1106
1107 const int rump_vop_inactive_vp_offsets[] = {
1108 VOPARG_OFFSETOF(struct rump_vop_inactive_args,a_vp),
1109 VDESC_NO_OFFSET
1110 };
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,
1120 };
1121 int
1122 RUMP_VOP_INACTIVE(struct vnode *vp,
1123 bool *recycle)
1124 {
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;
1138 }
1139
1140 const int rump_vop_reclaim_vp_offsets[] = {
1141 VOPARG_OFFSETOF(struct rump_vop_reclaim_args,a_vp),
1142 VDESC_NO_OFFSET
1143 };
1144 const struct vnodeop_desc rump_vop_reclaim_desc = {
1145 RUMP_VOP_RECLAIM_DESCOFFSET,
1146 "rump_vop_reclaim",
1147 0,
1148 rump_vop_reclaim_vp_offsets,
1149 VDESC_NO_OFFSET,
1150 VDESC_NO_OFFSET,
1151 VDESC_NO_OFFSET,
1152 NULL,
1153 };
1154 int
1155 RUMP_VOP_RECLAIM(struct vnode *vp)
1156 {
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;
1169 }
1170
1171 const int rump_vop_lock_vp_offsets[] = {
1172 VOPARG_OFFSETOF(struct rump_vop_lock_args,a_vp),
1173 VDESC_NO_OFFSET
1174 };
1175 const struct vnodeop_desc rump_vop_lock_desc = {
1176 RUMP_VOP_LOCK_DESCOFFSET,
1177 "rump_vop_lock",
1178 0,
1179 rump_vop_lock_vp_offsets,
1180 VDESC_NO_OFFSET,
1181 VDESC_NO_OFFSET,
1182 VDESC_NO_OFFSET,
1183 NULL,
1184 };
1185 int
1186 RUMP_VOP_LOCK(struct vnode *vp,
1187 int flags)
1188 {
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;
1202 }
1203
1204 const int rump_vop_unlock_vp_offsets[] = {
1205 VOPARG_OFFSETOF(struct rump_vop_unlock_args,a_vp),
1206 VDESC_NO_OFFSET
1207 };
1208 const struct vnodeop_desc rump_vop_unlock_desc = {
1209 RUMP_VOP_UNLOCK_DESCOFFSET,
1210 "rump_vop_unlock",
1211 0,
1212 rump_vop_unlock_vp_offsets,
1213 VDESC_NO_OFFSET,
1214 VDESC_NO_OFFSET,
1215 VDESC_NO_OFFSET,
1216 NULL,
1217 };
1218 int
1219 RUMP_VOP_UNLOCK(struct vnode *vp,
1220 int flags)
1221 {
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;
1235 }
1236
1237 const int rump_vop_bmap_vp_offsets[] = {
1238 VOPARG_OFFSETOF(struct rump_vop_bmap_args,a_vp),
1239 VDESC_NO_OFFSET
1240 };
1241 const struct vnodeop_desc rump_vop_bmap_desc = {
1242 RUMP_VOP_BMAP_DESCOFFSET,
1243 "rump_vop_bmap",
1244 0,
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,
1250 };
1251 int
1252 RUMP_VOP_BMAP(struct vnode *vp,
1253 daddr_t bn,
1254 struct vnode **vpp,
1255 daddr_t *bnp,
1256 int *runp)
1257 {
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;
1274 }
1275
1276 const int rump_vop_strategy_vp_offsets[] = {
1277 VOPARG_OFFSETOF(struct rump_vop_strategy_args,a_vp),
1278 VDESC_NO_OFFSET
1279 };
1280 const struct vnodeop_desc rump_vop_strategy_desc = {
1281 RUMP_VOP_STRATEGY_DESCOFFSET,
1282 "rump_vop_strategy",
1283 0,
1284 rump_vop_strategy_vp_offsets,
1285 VDESC_NO_OFFSET,
1286 VDESC_NO_OFFSET,
1287 VDESC_NO_OFFSET,
1288 NULL,
1289 };
1290 int
1291 RUMP_VOP_STRATEGY(struct vnode *vp,
1292 struct buf *bp)
1293 {
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;
1307 }
1308
1309 const int rump_vop_print_vp_offsets[] = {
1310 VOPARG_OFFSETOF(struct rump_vop_print_args,a_vp),
1311 VDESC_NO_OFFSET
1312 };
1313 const struct vnodeop_desc rump_vop_print_desc = {
1314 RUMP_VOP_PRINT_DESCOFFSET,
1315 "rump_vop_print",
1316 0,
1317 rump_vop_print_vp_offsets,
1318 VDESC_NO_OFFSET,
1319 VDESC_NO_OFFSET,
1320 VDESC_NO_OFFSET,
1321 NULL,
1322 };
1323 int
1324 RUMP_VOP_PRINT(struct vnode *vp)
1325 {
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;
1338 }
1339
1340 const int rump_vop_islocked_vp_offsets[] = {
1341 VOPARG_OFFSETOF(struct rump_vop_islocked_args,a_vp),
1342 VDESC_NO_OFFSET
1343 };
1344 const struct vnodeop_desc rump_vop_islocked_desc = {
1345 RUMP_VOP_ISLOCKED_DESCOFFSET,
1346 "rump_vop_islocked",
1347 0,
1348 rump_vop_islocked_vp_offsets,
1349 VDESC_NO_OFFSET,
1350 VDESC_NO_OFFSET,
1351 VDESC_NO_OFFSET,
1352 NULL,
1353 };
1354 int
1355 RUMP_VOP_ISLOCKED(struct vnode *vp)
1356 {
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;
1369 }
1370
1371 const int rump_vop_pathconf_vp_offsets[] = {
1372 VOPARG_OFFSETOF(struct rump_vop_pathconf_args,a_vp),
1373 VDESC_NO_OFFSET
1374 };
1375 const struct vnodeop_desc rump_vop_pathconf_desc = {
1376 RUMP_VOP_PATHCONF_DESCOFFSET,
1377 "rump_vop_pathconf",
1378 0,
1379 rump_vop_pathconf_vp_offsets,
1380 VDESC_NO_OFFSET,
1381 VDESC_NO_OFFSET,
1382 VDESC_NO_OFFSET,
1383 NULL,
1384 };
1385 int
1386 RUMP_VOP_PATHCONF(struct vnode *vp,
1387 int name,
1388 register_t *retval)
1389 {
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;
1404 }
1405
1406 const int rump_vop_advlock_vp_offsets[] = {
1407 VOPARG_OFFSETOF(struct rump_vop_advlock_args,a_vp),
1408 VDESC_NO_OFFSET
1409 };
1410 const struct vnodeop_desc rump_vop_advlock_desc = {
1411 RUMP_VOP_ADVLOCK_DESCOFFSET,
1412 "rump_vop_advlock",
1413 0,
1414 rump_vop_advlock_vp_offsets,
1415 VDESC_NO_OFFSET,
1416 VDESC_NO_OFFSET,
1417 VDESC_NO_OFFSET,
1418 NULL,
1419 };
1420 int
1421 RUMP_VOP_ADVLOCK(struct vnode *vp,
1422 void *id,
1423 int op,
1424 struct flock *fl,
1425 int flags)
1426 {
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;
1443 }
1444
1445 const int rump_vop_whiteout_vp_offsets[] = {
1446 VOPARG_OFFSETOF(struct rump_vop_whiteout_args,a_dvp),
1447 VDESC_NO_OFFSET
1448 };
1449 const struct vnodeop_desc rump_vop_whiteout_desc = {
1450 RUMP_VOP_WHITEOUT_DESCOFFSET,
1451 "rump_vop_whiteout",
1452 0,
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,
1458 };
1459 int
1460 RUMP_VOP_WHITEOUT(struct vnode *dvp,
1461 struct componentname *cnp,
1462 int flags)
1463 {
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;
1478 }
1479
1480 const int rump_vop_getpages_vp_offsets[] = {
1481 VOPARG_OFFSETOF(struct rump_vop_getpages_args,a_vp),
1482 VDESC_NO_OFFSET
1483 };
1484 const struct vnodeop_desc rump_vop_getpages_desc = {
1485 RUMP_VOP_GETPAGES_DESCOFFSET,
1486 "rump_vop_getpages",
1487 0,
1488 rump_vop_getpages_vp_offsets,
1489 VDESC_NO_OFFSET,
1490 VDESC_NO_OFFSET,
1491 VDESC_NO_OFFSET,
1492 NULL,
1493 };
1494 int
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)
1503 {
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;
1523 }
1524
1525 const int rump_vop_putpages_vp_offsets[] = {
1526 VOPARG_OFFSETOF(struct rump_vop_putpages_args,a_vp),
1527 VDESC_NO_OFFSET
1528 };
1529 const struct vnodeop_desc rump_vop_putpages_desc = {
1530 RUMP_VOP_PUTPAGES_DESCOFFSET,
1531 "rump_vop_putpages",
1532 0,
1533 rump_vop_putpages_vp_offsets,
1534 VDESC_NO_OFFSET,
1535 VDESC_NO_OFFSET,
1536 VDESC_NO_OFFSET,
1537 NULL,
1538 };
1539 int
1540 RUMP_VOP_PUTPAGES(struct vnode *vp,
1541 off_t offlo,
1542 off_t offhi,
1543 int flags)
1544 {
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;
1560 }
1561
1562 const int rump_vop_closeextattr_vp_offsets[] = {
1563 VOPARG_OFFSETOF(struct rump_vop_closeextattr_args,a_vp),
1564 VDESC_NO_OFFSET
1565 };
1566 const struct vnodeop_desc rump_vop_closeextattr_desc = {
1567 RUMP_VOP_CLOSEEXTATTR_DESCOFFSET,
1568 "rump_vop_closeextattr",
1569 0,
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,
1575 };
1576 int
1577 RUMP_VOP_CLOSEEXTATTR(struct vnode *vp,
1578 int commit,
1579 kauth_cred_t cred)
1580 {
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;
1595 }
1596
1597 const int rump_vop_getextattr_vp_offsets[] = {
1598 VOPARG_OFFSETOF(struct rump_vop_getextattr_args,a_vp),
1599 VDESC_NO_OFFSET
1600 };
1601 const struct vnodeop_desc rump_vop_getextattr_desc = {
1602 RUMP_VOP_GETEXTATTR_DESCOFFSET,
1603 "rump_vop_getextattr",
1604 0,
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,
1610 };
1611 int
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)
1618 {
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;
1636 }
1637
1638 const int rump_vop_listextattr_vp_offsets[] = {
1639 VOPARG_OFFSETOF(struct rump_vop_listextattr_args,a_vp),
1640 VDESC_NO_OFFSET
1641 };
1642 const struct vnodeop_desc rump_vop_listextattr_desc = {
1643 RUMP_VOP_LISTEXTATTR_DESCOFFSET,
1644 "rump_vop_listextattr",
1645 0,
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,
1651 };
1652 int
1653 RUMP_VOP_LISTEXTATTR(struct vnode *vp,
1654 int attrnamespace,
1655 struct uio *uio,
1656 size_t *size,
1657 kauth_cred_t cred)
1658 {
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;
1675 }
1676
1677 const int rump_vop_openextattr_vp_offsets[] = {
1678 VOPARG_OFFSETOF(struct rump_vop_openextattr_args,a_vp),
1679 VDESC_NO_OFFSET
1680 };
1681 const struct vnodeop_desc rump_vop_openextattr_desc = {
1682 RUMP_VOP_OPENEXTATTR_DESCOFFSET,
1683 "rump_vop_openextattr",
1684 0,
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,
1690 };
1691 int
1692 RUMP_VOP_OPENEXTATTR(struct vnode *vp,
1693 kauth_cred_t cred)
1694 {
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;
1708 }
1709
1710 const int rump_vop_deleteextattr_vp_offsets[] = {
1711 VOPARG_OFFSETOF(struct rump_vop_deleteextattr_args,a_vp),
1712 VDESC_NO_OFFSET
1713 };
1714 const struct vnodeop_desc rump_vop_deleteextattr_desc = {
1715 RUMP_VOP_DELETEEXTATTR_DESCOFFSET,
1716 "rump_vop_deleteextattr",
1717 0,
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,
1723 };
1724 int
1725 RUMP_VOP_DELETEEXTATTR(struct vnode *vp,
1726 int attrnamespace,
1727 const char *name,
1728 kauth_cred_t cred)
1729 {
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;
1745 }
1746
1747 const int rump_vop_setextattr_vp_offsets[] = {
1748 VOPARG_OFFSETOF(struct rump_vop_setextattr_args,a_vp),
1749 VDESC_NO_OFFSET
1750 };
1751 const struct vnodeop_desc rump_vop_setextattr_desc = {
1752 RUMP_VOP_SETEXTATTR_DESCOFFSET,
1753 "rump_vop_setextattr",
1754 0,
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,
1760 };
1761 int
1762 RUMP_VOP_SETEXTATTR(struct vnode *vp,
1763 int attrnamespace,
1764 const char *name,
1765 struct uio *uio,
1766 kauth_cred_t cred)
1767 {
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;
1784 }
1785
1786 /* End of special cases. */
1787
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 */
1791
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
1839 };
1840
1841