|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1998-1999 Apple Computer, Inc. All rights reserved.
24: *
25: * File: vfs/vfs_support.c
26: *
27: * The default VFS routines. A VFS plugin can use these
28: * functions in case it does not want to implement all. These functions
29: * take care of releasing locks and free up memory that they are
30: * supposed to.
31: *
32: * nop_* routines always return 0 [success]
33: * err_* routines always return EOPNOTSUPP
34: *
35: * This file could be auto-generated from vnode_if.src. but that needs
36: * support for freeing cnp.
37: *
38: * HISTORY
39: * 15-Jul-1998 Earsh Nandkeshwar ([email protected])
40: * Fixed up readdirattr for its existance now.
41: * 18-Aug-1998 Umesh Vaishampayan ([email protected])
42: * Created.
43: */
44:
45: #include <vfs/vfs_support.h>
46:
47:
48: struct vop_create_args /* {
49: struct vnode *a_dvp;
50: struct vnode **a_vpp;
51: struct componentname *a_cnp;
52: struct vattr *a_vap;
53: } */;
54:
55: int
56: nop_create(struct vop_create_args *ap)
57: {
58: #if DIAGNOSTIC
59: if ((ap->a_cnp->cn_flags & HASBUF) == 0)
60: panic("nop_create: no name");
61: #endif
62: VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
63: vput(ap->a_dvp);
64: return (0);
65: }
66:
67: int
68: err_create(struct vop_create_args *ap)
69: {
70: (void)nop_create(ap);
71: return (EOPNOTSUPP);
72: }
73:
74:
75: struct vop_whiteout_args /* {
76: struct vnode *a_dvp;
77: struct componentname *a_cnp;
78: int a_flags;
79: } */;
80:
81: int
82: nop_whiteout(struct vop_whiteout_args *ap)
83: {
84: return (0);
85: }
86:
87: int
88: err_whiteout(struct vop_whiteout_args *ap)
89: {
90: return (EOPNOTSUPP);
91: }
92:
93:
94: struct vop_mknod_args /* {
95: struct vnode *a_dvp;
96: struct vnode **a_vpp;
97: struct componentname *a_cnp;
98: struct vattr *a_vap;
99: } */;
100:
101: int
102: nop_mknod(struct vop_mknod_args *ap)
103: {
104: #if DIAGNOSTIC
105: if ((ap->a_cnp->cn_flags & HASBUF) == 0)
106: panic("nop_mknod: no name");
107: #endif
108: VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
109: vput(ap->a_dvp);
110: return (0);
111: }
112:
113: int
114: err_mknod(struct vop_mknod_args *ap)
115: {
116: (void)nop_mknod(ap);
117: return (EOPNOTSUPP);
118: }
119:
120:
121: struct vop_mkcomplex_args /* {
122: struct vnode *a_dvp,
123: struct vnode **a_vpp,
124: struct componentname *a_cnp,
125: struct vattr *a_vap,
126: u_long a_type)
127: } */;
128:
129: int
130: nop_mkcomplex(struct vop_mkcomplex_args *ap)
131: {
132: #if DIAGNOSTIC
133: if ((ap->a_cnp->cn_flags & HASBUF) == 0)
134: panic("nop_mkcomplex: no name");
135: #endif
136: VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
137: vput(ap->a_dvp);
138: return (0);
139: }
140:
141: int
142: err_mkcomplex(struct vop_mkcomplex_args *ap)
143: {
144: (void)nop_mkcomplex(ap);
145: return (EOPNOTSUPP);
146: }
147:
148:
149: struct vop_open_args /* {
150: struct vnode *a_vp;
151: int a_mode;
152: struct ucred *a_cred;
153: struct proc *a_p;
154: } */;
155:
156: int
157: nop_open(struct vop_open_args *ap)
158: {
159: return (0);
160: }
161:
162: int
163: err_open(struct vop_open_args *ap)
164: {
165: return (EOPNOTSUPP);
166: }
167:
168:
169: struct vop_close_args /* {
170: struct vnode *a_vp;
171: int a_fflag;
172: struct ucred *a_cred;
173: struct proc *a_p;
174: } */;
175:
176: int
177: nop_close(struct vop_close_args *ap)
178: {
179: return (0);
180: }
181:
182: int
183: err_close(struct vop_close_args *ap)
184: {
185: return (EOPNOTSUPP);
186: }
187:
188:
189: struct vop_access_args /* {
190: struct vnode *a_vp;
191: int a_mode;
192: struct ucred *a_cred;
193: struct proc *a_p;
194: } */;
195:
196: int
197: nop_access(struct vop_access_args *ap)
198: {
199: return (0);
200: }
201:
202: int
203: err_access(struct vop_access_args *ap)
204: {
205: return (EOPNOTSUPP);
206: }
207:
208:
209: struct vop_getattr_args /* {
210: struct vnode *a_vp;
211: struct vattr *a_vap;
212: struct ucred *a_cred;
213: struct proc *a_p;
214: } */;
215:
216: int
217: nop_getattr(struct vop_getattr_args *ap)
218: {
219: return (0);
220: }
221:
222: int
223: err_getattr(struct vop_getattr_args *ap)
224: {
225: return (EOPNOTSUPP);
226: }
227:
228:
229: struct vop_setattr_args /* {
230: struct vnode *a_vp;
231: struct vattr *a_vap;
232: struct ucred *a_cred;
233: struct proc *a_p;
234: } */;
235:
236: int
237: nop_setattr(struct vop_setattr_args *ap)
238: {
239: return (0);
240: }
241:
242: int
243: err_setattr(struct vop_setattr_args *ap)
244: {
245: return (EOPNOTSUPP);
246: }
247:
248:
249: struct vop_getattrlist_args /* {
250: struct vnode *a_vp;
251: struct attrlist *a_alist;
252: struct uio *a_uio;
253: struct ucred *a_cred;
254: struct proc *a_p;
255: } */;
256:
257: int
258: nop_getattrlist(struct vop_getattrlist_args *ap)
259: {
260: return (0);
261: }
262:
263: int
264: err_getattrlist(struct vop_getattrlist_args *ap)
265: {
266: return (EOPNOTSUPP);
267: }
268:
269:
270: struct vop_setattrlist_args /* {
271: struct vnode *a_vp;
272: struct attrlist *a_alist;
273: struct uio *a_uio;
274: struct ucred *a_cred;
275: struct proc *a_p;
276: } */;
277:
278: int
279: nop_setattrlist(struct vop_setattrlist_args *ap)
280: {
281: return (0);
282: }
283:
284: int
285: err_setattrlist(struct vop_setattrlist_args *ap)
286: {
287: return (EOPNOTSUPP);
288: }
289:
290:
291: struct vop_read_args /* {
292: struct vnode *a_vp;
293: struct uio *a_uio;
294: int a_ioflag;
295: struct ucred *a_cred;
296: } */;
297:
298: int
299: nop_read(struct vop_read_args *ap)
300: {
301: return (0);
302: }
303:
304: int
305: err_read(struct vop_read_args *ap)
306: {
307: return (EOPNOTSUPP);
308: }
309:
310:
311: struct vop_write_args /* {
312: struct vnode *a_vp;
313: struct uio *a_uio;
314: int a_ioflag;
315: struct ucred *a_cred;
316: } */;
317:
318: int
319: nop_write(struct vop_write_args *ap)
320: {
321: return (0);
322: }
323:
324: int
325: err_write(struct vop_write_args *ap)
326: {
327: return (EOPNOTSUPP);
328: }
329:
330:
331: struct vop_lease_args /* {
332: struct vnode *a_vp;
333: struct proc *a_p;
334: struct ucred *a_cred;
335: int a_flag;
336: } */;
337:
338: int
339: nop_lease(struct vop_lease_args *ap)
340: {
341: return (0);
342: }
343:
344: int
345: err_lease(struct vop_lease_args *ap)
346: {
347: return (EOPNOTSUPP);
348: }
349:
350:
351: struct vop_ioctl_args /* {
352: struct vnode *a_vp;
353: u_long a_command;
354: caddr_t a_data;
355: int a_fflag;
356: struct ucred *a_cred;
357: struct proc *a_p;
358: } */;
359:
360: int
361: nop_ioctl(struct vop_ioctl_args *ap)
362: {
363: return (0);
364: }
365:
366: int
367: err_ioctl(struct vop_ioctl_args *ap)
368: {
369: return (EOPNOTSUPP);
370: }
371:
372:
373: struct vop_select_args /* {
374: struct vnode *a_vp;
375: int a_which;
376: int a_fflags;
377: struct ucred *a_cred;
378: struct proc *a_p;
379: } */;
380:
381: int
382: nop_select(struct vop_select_args *ap)
383: {
384: return (0);
385: }
386:
387: int
388: err_select(struct vop_select_args *ap)
389: {
390: return (EOPNOTSUPP);
391: }
392:
393:
394: struct vop_exchange_args /* {
395: struct vnode *a_fvp;
396: struct vnode *a_tvp;
397: struct ucred *a_cred;
398: struct proc *a_p;
399: } */;
400:
401: int
402: nop_exchange(struct vop_exchange_args *ap)
403: {
404: return (0);
405: }
406:
407: int
408: err_exchange(struct vop_exchange_args *ap)
409: {
410: return (EOPNOTSUPP);
411: }
412:
413:
414: struct vop_revoke_args /* {
415: struct vnode *a_vp;
416: int a_flags;
417: } */;
418:
419: int
420: nop_revoke(struct vop_revoke_args *ap)
421: {
422: return (vop_revoke(ap));
423: }
424:
425: int
426: err_revoke(struct vop_revoke_args *ap)
427: {
428: (void)nop_revoke(ap);
429: return (EOPNOTSUPP);
430: }
431:
432:
433: struct vop_mmap_args /* {
434: struct vnode *a_vp;
435: int a_fflags;
436: struct ucred *a_cred;
437: struct proc *a_p;
438: } */;
439:
440: int
441: nop_mmap(struct vop_mmap_args *ap)
442: {
443: return (0);
444: }
445:
446: int
447: err_mmap(struct vop_mmap_args *ap)
448: {
449: return (EOPNOTSUPP);
450: }
451:
452:
453: struct vop_fsync_args /* {
454: struct vnode *a_vp;
455: struct ucred *a_cred;
456: int a_waitfor;
457: struct proc *a_p;
458: } */;
459:
460: int
461: nop_fsync(struct vop_fsync_args *ap)
462: {
463: return (0);
464: }
465:
466: int
467: err_fsync(struct vop_fsync_args *ap)
468: {
469: return (EOPNOTSUPP);
470: }
471:
472:
473: struct vop_seek_args /* {
474: struct vnode *a_vp;
475: off_t a_oldoff;
476: off_t a_newoff;
477: struct ucred *a_cred;
478: } */;
479:
480: int
481: nop_seek(struct vop_seek_args *ap)
482: {
483: return (0);
484: }
485:
486: int
487: err_seek(struct vop_seek_args *ap)
488: {
489: return (EOPNOTSUPP);
490: }
491:
492:
493: struct vop_remove_args /* {
494: struct vnode *a_dvp;
495: struct vnode *a_vp;
496: struct componentname *a_cnp;
497: } */;
498:
499: int
500: nop_remove(struct vop_remove_args *ap)
501: {
502: if (ap->a_dvp == ap->a_vp)
503: vrele(ap->a_vp);
504: else
505: vput(ap->a_vp);
506: vput(ap->a_dvp);
507: return (0);
508: }
509:
510: int
511: err_remove(struct vop_remove_args *ap)
512: {
513: (void)nop_remove(ap);
514: return (EOPNOTSUPP);
515: }
516:
517:
518: struct vop_link_args /* {
519: struct vnode *a_vp;
520: struct vnode *a_tdvp;
521: struct componentname *a_cnp;
522: } */;
523:
524: int
525: nop_link(struct vop_link_args *ap)
526: {
527: #if DIAGNOSTIC
528: if ((ap->a_cnp->cn_flags & HASBUF) == 0)
529: panic("nop_link: no name");
530: #endif
531: VOP_ABORTOP(ap->a_tdvp, ap->a_cnp);
532: vput(ap->a_tdvp);
533: return (0);
534: }
535:
536: int
537: err_link(struct vop_link_args *ap)
538: {
539: (void)nop_link(ap);
540: return (EOPNOTSUPP);
541: }
542:
543:
544: struct vop_rename_args /* {
545: struct vnode *a_fdvp;
546: struct vnode *a_fvp;
547: struct componentname *a_fcnp;
548: struct vnode *a_tdvp;
549: struct vnode *a_tvp;
550: struct componentname *a_tcnp;
551: } */;
552:
553: int
554: nop_rename(struct vop_rename_args *ap)
555: {
556: #if DIAGNOSTIC
557: if ((ap->a_tcnp->cn_flags & HASBUF) == 0 ||
558: (ap->a_fcnp->cn_flags & HASBUF) == 0)
559: panic("nop_rename: no name");
560: #endif
561: VOP_ABORTOP(ap->a_tdvp, ap->a_tcnp);
562: if (ap->a_tdvp == ap->a_tvp)
563: vrele(ap->a_tdvp);
564: else
565: vput(ap->a_tdvp);
566: if (ap->a_tvp)
567: vput(ap->a_tvp);
568: VOP_ABORTOP(ap->a_fdvp, ap->a_fcnp);
569: vrele(ap->a_fdvp);
570: vrele(ap->a_fvp);
571: return (0);
572: }
573:
574: int
575: err_rename(struct vop_rename_args *ap)
576: {
577: (void)nop_rename(ap);
578: return (EOPNOTSUPP);
579: }
580:
581:
582: struct vop_mkdir_args /* {
583: struct vnode *a_dvp;
584: struct vnode **a_vpp;
585: struct componentname *a_cnp;
586: struct vattr *a_vap;
587: } */;
588:
589: int
590: nop_mkdir(struct vop_mkdir_args *ap)
591: {
592: #if DIAGNOSTIC
593: if ((ap->a_cnp->cn_flags & HASBUF) == 0)
594: panic("nop_mkdir: no name");
595: #endif
596: VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
597: vput(ap->a_dvp);
598: return (0);
599: }
600:
601: int
602: err_mkdir(struct vop_mkdir_args *ap)
603: {
604: (void)nop_mkdir(ap);
605: return (EOPNOTSUPP);
606: }
607:
608:
609: struct vop_rmdir_args /* {
610: struct vnode *a_dvp;
611: struct vnode *a_vp;
612: struct componentname *a_cnp;
613: } */;
614:
615: int
616: nop_rmdir(struct vop_rmdir_args *ap)
617: {
618: vput(ap->a_dvp);
619: vput(ap->a_vp);
620: return (0);
621: }
622:
623: int
624: err_rmdir(struct vop_rmdir_args *ap)
625: {
626: (void)nop_rmdir(ap);
627: return (EOPNOTSUPP);
628: }
629:
630:
631: struct vop_symlink_args /* {
632: struct vnode *a_dvp;
633: struct vnode **a_vpp;
634: struct componentname *a_cnp;
635: struct vattr *a_vap;
636: char *a_target;
637: } */;
638:
639: int
640: nop_symlink(struct vop_symlink_args *ap)
641: {
642: #if DIAGNOSTIC
643: if ((ap->a_cnp->cn_flags & HASBUF) == 0)
644: panic("nop_symlink: no name");
645: #endif
646: VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
647: vput(ap->a_dvp);
648: return (0);
649: }
650:
651: int
652: err_symlink(struct vop_symlink_args *ap)
653: {
654: (void)nop_symlink(ap);
655: return (EOPNOTSUPP);
656: }
657:
658:
659: struct vop_readdir_args /* {
660: struct vnode *a_vp;
661: struct uio *a_uio;
662: struct ucred *a_cred;
663: int *a_eofflag;
664: int *a_ncookies;
665: u_long **a_cookies;
666: } */;
667:
668: int
669: nop_readdir(struct vop_readdir_args *ap)
670: {
671: return (0);
672: }
673:
674: int
675: err_readdir(struct vop_readdir_args *ap)
676: {
677: return (EOPNOTSUPP);
678: }
679:
680:
681: struct vop_readdirattr_args /* {
682: struct vnode *a_vp;
683: struct attrlist *a_alist;
684: struct uio *a_uio;
685: u_long a_maxcount;
686: u_long a_options;
687: int *a_newstate;
688: int *a_eofflag;
689: u_long *a_actualcount;
690: u_long **a_cookies;
691: struct ucred *a_cred;
692: } */;
693:
694: int
695: nop_readdirattr(struct vop_readdirattr_args *ap)
696: {
697: *(ap->a_actualcount) = 0;
698: *(ap->a_eofflag) = 0;
699: return (0);
700: }
701:
702: int
703: err_readdirattr(struct vop_readdirattr_args *ap)
704: {
705: (void)nop_readdirattr(ap);
706: return (EOPNOTSUPP);
707: }
708:
709:
710: struct vop_readlink_args /* {
711: struct vnode *vp;
712: struct uio *uio;
713: struct ucred *cred;
714: } */;
715:
716: int
717: nop_readlink(struct vop_readlink_args *ap)
718: {
719: return (0);
720: }
721:
722: int
723: err_readlink(struct vop_readlink_args *ap)
724: {
725: return (EOPNOTSUPP);
726: }
727:
728:
729: struct vop_abortop_args /* {
730: struct vnode *a_dvp;
731: struct componentname *a_cnp;
732: } */;
733:
734: int
735: nop_abortop(struct vop_abortop_args *ap)
736: {
737: if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
738: FREE_ZONE(ap->a_cnp->cn_pnbuf, ap->a_cnp->cn_pnlen, M_NAMEI);
739: return (0);
740: }
741:
742: int
743: err_abortop(struct vop_abortop_args *ap)
744: {
745: (void)nop_abortop(ap);
746: return (EOPNOTSUPP);
747: }
748:
749:
750: struct vop_inactive_args /* {
751: struct vnode *a_vp;
752: struct proc *a_p;
753: } */;
754:
755: int
756: nop_inactive(struct vop_inactive_args *ap)
757: {
758: VOP_UNLOCK(ap->a_vp, 0, ap->a_p);
759: return (0);
760: }
761:
762: int
763: err_inactive(struct vop_inactive_args *ap)
764: {
765: (void)nop_inactive(ap);
766: return (EOPNOTSUPP);
767: }
768:
769:
770: struct vop_reclaim_args /* {
771: struct vnode *a_vp;
772: struct proc *a_p;
773: } */;
774:
775: int
776: nop_reclaim(struct vop_reclaim_args *ap)
777: {
778: return (0);
779: }
780:
781: int
782: err_reclaim(struct vop_reclaim_args *ap)
783: {
784: return (EOPNOTSUPP);
785: }
786:
787:
788: struct vop_lock_args /* {
789: struct vnode *a_vp;
790: int a_flags;
791: struct proc *a_p;
792: } */;
793:
794: int
795: nop_lock(struct vop_lock_args *ap)
796: {
797: return (vop_nolock(ap));
798: }
799:
800: int
801: err_lock(struct vop_lock_args *ap)
802: {
803: (void)nop_lock(ap);
804: return (EOPNOTSUPP);
805: }
806:
807:
808: struct vop_unlock_args /* {
809: struct vnode *a_vp;
810: int a_flags;
811: struct proc *a_p;
812: } */;
813:
814: int
815: nop_unlock(struct vop_unlock_args *ap)
816: {
817: return (vop_nounlock(ap));
818: }
819:
820: int
821: err_unlock(struct vop_unlock_args *ap)
822: {
823: (void)nop_unlock(ap);
824: return (EOPNOTSUPP);
825: }
826:
827:
828: struct vop_bmap_args /* {
829: struct vnode *vp;
830: daddr_t bn;
831: struct vnode **vpp;
832: daddr_t *bnp;
833: int *runp;
834: } */;
835:
836: int
837: nop_bmap(struct vop_bmap_args *ap)
838: {
839: return (0);
840: }
841:
842: int
843: err_bmap(struct vop_bmap_args *ap)
844: {
845: return (EOPNOTSUPP);
846: }
847:
848:
849: struct vop_strategy_args /* {
850: struct buf *a_bp;
851: } */;
852:
853: int
854: nop_strategy(struct vop_strategy_args *ap)
855: {
856: return (0);
857: }
858:
859: int
860: err_strategy(struct vop_strategy_args *ap)
861: {
862: return (EOPNOTSUPP);
863: }
864:
865:
866: struct vop_print_args /* {
867: struct vnode *a_vp;
868: } */;
869:
870: int
871: nop_print(struct vop_print_args *ap)
872: {
873: return (0);
874: }
875:
876: int
877: err_print(struct vop_print_args *ap)
878: {
879: return (EOPNOTSUPP);
880: }
881:
882:
883: struct vop_islocked_args /* {
884: struct vnode *a_vp;
885: } */;
886:
887: int
888: nop_islocked(struct vop_islocked_args *ap)
889: {
890: return (vop_noislocked(ap));
891: }
892:
893: int
894: err_islocked(struct vop_islocked_args *ap)
895: {
896: (void)nop_islocked(ap);
897: return (EOPNOTSUPP);
898: }
899:
900:
901: struct vop_pathconf_args /* {
902: struct vnode *a_vp;
903: int a_name;
904: register_t *a_retval;
905: } */;
906:
907: int
908: nop_pathconf(struct vop_pathconf_args *ap)
909: {
910: return (0);
911: }
912:
913: int
914: err_pathconf(struct vop_pathconf_args *ap)
915: {
916: return (EOPNOTSUPP);
917: }
918:
919:
920: struct vop_advlock_args /* {
921: struct vnode *a_vp;
922: caddr_t a_id;
923: int a_op;
924: struct flock *a_fl;
925: int a_flags;
926: } */;
927:
928: int
929: nop_advlock(struct vop_advlock_args *ap)
930: {
931: return (0);
932: }
933:
934: int
935: err_advlock(struct vop_advlock_args *ap)
936: {
937: return (EOPNOTSUPP);
938: }
939:
940:
941: struct vop_blkatoff_args /* {
942: struct vnode *a_vp;
943: off_t a_offset;
944: char **a_res;
945: struct buf **a_bpp;
946: } */;
947:
948: int
949: nop_blkatoff(struct vop_blkatoff_args *ap)
950: {
951: *ap->a_bpp = NULL;
952: return (0);
953: }
954:
955: int
956: err_blkatoff(struct vop_blkatoff_args *ap)
957: {
958: (void)nop_blkatoff(ap);
959: return (EOPNOTSUPP);
960: }
961:
962:
963: struct vop_valloc_args /* {
964: struct vnode *a_pvp;
965: int a_mode;
966: struct ucred *a_cred;
967: struct vnode **a_vpp;
968: } */;
969:
970: int
971: nop_valloc(struct vop_valloc_args *ap)
972: {
973: *ap->a_vpp = NULL;
974: return (0);
975: }
976:
977: int
978: err_valloc(struct vop_valloc_args *ap)
979: {
980: (void)nop_valloc(ap);
981: return (EOPNOTSUPP);
982: }
983:
984:
985: struct vop_reallocblks_args /* {
986: struct vnode *a_vp;
987: struct cluster_save *a_buflist;
988: } */;
989:
990: int
991: nop_reallocblks(struct vop_reallocblks_args *ap)
992: {
993: return (0);
994: }
995:
996: int
997: err_reallocblks(struct vop_reallocblks_args *ap)
998: {
999: return (EOPNOTSUPP);
1000: }
1001:
1002:
1003: struct vop_vfree_args /* {
1004: struct vnode *a_pvp;
1005: ino_t a_ino;
1006: int a_mode;
1007: } */;
1008:
1009: int
1010: nop_vfree(struct vop_vfree_args *ap)
1011: {
1012: return (0);
1013: }
1014:
1015: int
1016: err_vfree(struct vop_vfree_args *ap)
1017: {
1018: return (EOPNOTSUPP);
1019: }
1020:
1021:
1022: struct vop_truncate_args /* {
1023: struct vnode *a_vp;
1024: off_t a_length;
1025: int a_flags;
1026: struct ucred *a_cred;
1027: struct proc *a_p;
1028: } */;
1029:
1030: int
1031: nop_truncate(struct vop_truncate_args *ap)
1032: {
1033: return (0);
1034: }
1035:
1036: int
1037: err_truncate(struct vop_truncate_args *ap)
1038: {
1039: return (EOPNOTSUPP);
1040: }
1041:
1042:
1043: struct vop_allocate_args /* {
1044: struct vnode *a_vp;
1045: off_t a_length;
1046: u_int32_t a_flags;
1047: off_t *a_bytesallocated;
1048: struct ucred *a_cred;
1049: struct proc *a_p;
1050: } */;
1051:
1052: int
1053: nop_allocate(struct vop_allocate_args *ap)
1054: {
1055: *(ap->a_bytesallocated) = 0;
1056: return (0);
1057: }
1058:
1059: int
1060: err_allocate(struct vop_allocate_args *ap)
1061: {
1062: (void)nop_allocate(ap);
1063: return (EOPNOTSUPP);
1064: }
1065:
1066:
1067: struct vop_update_args /* {
1068: struct vnode *a_vp;
1069: struct timeval *a_access;
1070: struct timeval *a_modify;
1071: int a_waitfor;
1072: } */;
1073:
1074: int
1075: nop_update(struct vop_update_args *ap)
1076: {
1077: return (0);
1078: }
1079:
1080: int
1081: err_update(struct vop_update_args *ap)
1082: {
1083: return (EOPNOTSUPP);
1084: }
1085:
1086:
1087: struct vop_pgrd_args /* {
1088: struct vnode *a_vp;
1089: struct uio *a_uio;
1090: struct ucred *a_cred;
1091: } */;
1092:
1093: int
1094: nop_pgrd(struct vop_pgrd_args *ap)
1095: {
1096: return (0);
1097: }
1098:
1099: int
1100: err_pgrd(struct vop_pgrd_args *ap)
1101: {
1102: return (EOPNOTSUPP);
1103: }
1104:
1105:
1106: struct vop_pgwr_args /* {
1107: struct vnode *a_vp;
1108: struct uio *a_uio;
1109: struct ucred *a_cred;
1110: vm_offset_t a_offset;
1111: } */;
1112:
1113: int
1114: nop_pgwr(struct vop_pgwr_args *ap)
1115: {
1116: return (0);
1117: }
1118:
1119: int
1120: err_pgwr(struct vop_pgwr_args *ap)
1121: {
1122: return (EOPNOTSUPP);
1123: }
1124:
1125:
1126: struct vop_bwrite_args /* {
1127: struct buf *a_bp;
1128: } */;
1129:
1130: int
1131: nop_bwrite(struct vop_bwrite_args *ap)
1132: {
1133: return (bwrite(ap->a_bp));
1134: }
1135:
1136: int
1137: err_bwrite(struct vop_bwrite_args *ap)
1138: {
1139: return (EOPNOTSUPP);
1140: }
1141:
1142:
1143: struct vop_pagein_args /* {
1144: struct vnode *a_vp;
1145: struct uio *a_uio;
1146: int a_ioflag;
1147: struct ucred *a_cred;
1148: } */;
1149:
1150: int
1151: nop_pagein(struct vop_pagein_args *ap)
1152: {
1153: /* pass thru to read */
1154: return (VOP_READ(ap->a_vp, ap->a_uio, ap->a_ioflag, ap->a_cred));
1155: }
1156:
1157: int
1158: err_pagein(struct vop_pagein_args *ap)
1159: {
1160: /* pass thru to read */
1161: return (VOP_READ(ap->a_vp, ap->a_uio, ap->a_ioflag, ap->a_cred));
1162: }
1163:
1164:
1165: struct vop_pageout_args /* {
1166: struct vnode *a_vp;
1167: struct uio *a_uio;
1168: int a_ioflag;
1169: struct ucred *a_cred;
1170: } */;
1171:
1172: int
1173: nop_pageout(struct vop_pageout_args *ap)
1174: {
1175: /* pass thru to write */
1176: return (VOP_WRITE(ap->a_vp, ap->a_uio, ap->a_ioflag, ap->a_cred));
1177: }
1178:
1179: int
1180: err_pageout(struct vop_pageout_args *ap)
1181: {
1182: /* pass thru to write */
1183: return (VOP_WRITE(ap->a_vp, ap->a_uio, ap->a_ioflag, ap->a_cred));
1184: }
1185:
1186:
1187: struct vop_devblocksize_args /* {
1188: struct vnode *a_vp;
1189: register_t *a_retval;
1190: } */;
1191:
1192: int
1193: nop_devblocksize(struct vop_devblocksize_args *ap)
1194: {
1195: /* XXX default value because the call sites do not check error */
1196: *ap->a_retval = 512;
1197: return (0);
1198: }
1199:
1200: int
1201: err_devblocksize(struct vop_devblocksize_args *ap)
1202: {
1203: (void)nop_devblocksize(ap);
1204: return (EOPNOTSUPP);
1205: }
1206:
1207:
1208: struct vop_searchfs /* {
1209: struct vnode *a_vp;
1210: void *a_searchparams1;
1211: void *a_searchparams2;
1212: struct attrlist *a_searchattrs;
1213: u_long a_maxmatches;
1214: struct timeval *a_timelimit;
1215: struct attrlist *a_returnattrs;
1216: u_long *a_nummatches;
1217: u_long a_scriptcode;
1218: u_long a_options;
1219: struct uio *a_uio;
1220: struct searchstate *a_searchstate;
1221: } */;
1222:
1223: int
1224: nop_searchfs(struct vop_searchfs_args *ap)
1225: {
1226: *(ap->a_nummatches) = 0;
1227: return (0);
1228: }
1229:
1230: int
1231: err_searchfs(struct vop_searchfs_args *ap)
1232: {
1233: (void)nop_searchfs(ap);
1234: return (EOPNOTSUPP);
1235: }
1236:
1237: struct vop_copyfile_args /*{
1238: struct vnodeop_desc *a_desc;
1239: struct vnode *a_fvp;
1240: struct vnode *a_tdvp;
1241: struct vnode *a_tvp;
1242: struct componentname *a_tcnp;
1243: int a_flags;
1244: }*/;
1245:
1246: int
1247: nop_copyfile(struct vop_copyfile_args *ap)
1248: {
1249: if (ap->a_tdvp == ap->a_tvp)
1250: vrele(ap->a_tdvp);
1251: else
1252: vput(ap->a_tdvp);
1253: if (ap->a_tvp)
1254: vput(ap->a_tvp);
1255: vrele(ap->a_fvp);
1256: return (0);
1257: }
1258:
1259:
1260: int
1261: err_copyfile(struct vop_copyfile_args *ap)
1262: {
1263: (void)nop_copyfile(ap);
1264: return (EOPNOTSUPP);
1265: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.