|
|
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.