]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/vfs/vnode_if.c
xnu-4570.31.3.tar.gz
[apple/xnu.git] / bsd / vfs / vnode_if.c
index 3a5438e57fbdf467fd472723c22235b8b9319800..f0c1fa80d3f4d60711dc5f37ec4b5c337b1f6a93 100644 (file)
@@ -1,17 +1,20 @@
 
 /*
- * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2016 Apple Computer, Inc. All rights reserved.
  *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
+ * 
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
  * 
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
@@ -21,7 +24,7 @@
  * Please see the License for the specific language governing rights and
  * limitations under the License.
  * 
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*
  * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
 
 
 #include <sys/param.h>
-#include <sys/mount.h>
+#include <sys/mount_internal.h>
 #include <sys/vm.h>
-#include <sys/vnode.h>
+#include <sys/vnode_internal.h>
 
-struct vnodeop_desc vop_default_desc = {
+struct vnodeop_desc vnop_default_desc = {
        0,
        "default",
        0,
@@ -81,1061 +84,1176 @@ struct vnodeop_desc vop_default_desc = {
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
 
-int vop_lookup_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_lookup_args,a_dvp),
+int vnop_lookup_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_lookup_args,a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_lookup_desc = {
+struct vnodeop_desc vnop_lookup_desc = {
        0,
-       "vop_lookup",
+       "vnop_lookup",
        0,
-       vop_lookup_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_lookup_args, a_vpp),
+       vnop_lookup_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_lookup_args, a_vpp),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_lookup_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_lookup_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_lookup_args, a_context),
+       NULL
 };
 
-int vop_cachedlookup_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_cachedlookup_args,a_dvp),
+int vnop_compound_open_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_compound_open_args, a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_cachedlookup_desc = {
-       0,
-       "vop_cachedlookup",
+
+struct vnodeop_desc vnop_compound_open_desc = {
        0,
-       vop_cachedlookup_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_cachedlookup_args, a_vpp),
+       "vnop_compound_open",
+       0 | VDESC_VP0_WILLRELE,
+       vnop_compound_open_vp_offsets, 
+       VOPARG_OFFSETOF(struct vnop_compound_open_args, a_vpp),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_cachedlookup_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_compound_open_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_compound_open_args, a_context),
+       NULL
 };
 
-int vop_create_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_create_args,a_dvp),
+int vnop_create_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_create_args,a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_create_desc = {
+struct vnodeop_desc vnop_create_desc = {
        0,
-       "vop_create",
+       "vnop_create",
        0 | VDESC_VP0_WILLRELE,
-       vop_create_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_create_args, a_vpp),
+       vnop_create_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_create_args, a_vpp),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_create_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_create_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_create_args, a_context),
+       NULL
 };
 
-int vop_whiteout_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_whiteout_args,a_dvp),
+int vnop_whiteout_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_whiteout_args,a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_whiteout_desc = {
+struct vnodeop_desc vnop_whiteout_desc = {
        0,
-       "vop_whiteout",
+       "vnop_whiteout",
        0 | VDESC_VP0_WILLRELE,
-       vop_whiteout_vp_offsets,
+       vnop_whiteout_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_whiteout_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_whiteout_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_whiteout_args, a_context),
+       NULL
 };
 
-int vop_mknod_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_mknod_args,a_dvp),
-       VDESC_NO_OFFSET
+int vnop_mknod_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_mknod_args,a_dvp),
+       VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_mknod_desc = {
-       0,
-       "vop_mknod",
-       0 | VDESC_VP0_WILLRELE | VDESC_VPP_WILLRELE,
-       vop_mknod_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_mknod_args, a_vpp),
-       VDESC_NO_OFFSET,
-       VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_mknod_args, a_cnp),
-       NULL,
+struct vnodeop_desc vnop_mknod_desc = {
+       0,
+       "vnop_mknod",
+       0 | VDESC_VP0_WILLRELE | VDESC_VPP_WILLRELE,
+       vnop_mknod_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_mknod_args, a_vpp),
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_mknod_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_mknod_args, a_context),
+       NULL
 };
 
-int vop_mkcomplex_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_mkcomplex_args,a_dvp),
+int vnop_open_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_open_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_mkcomplex_desc = {
+struct vnodeop_desc vnop_open_desc = {
+       0,
+       "vnop_open",
        0,
-       "vop_mkcomplex",
-       0 | VDESC_VP0_WILLRELE | VDESC_VPP_WILLRELE,
-       vop_mkcomplex_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_mkcomplex_args, a_vpp),
+       vnop_open_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_mkcomplex_args, a_cnp),
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_open_args, a_context),
+       NULL
 };
 
-int vop_open_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_open_args,a_vp),
+int vnop_close_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_close_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_open_desc = {
+struct vnodeop_desc vnop_close_desc = {
        0,
-       "vop_open",
+       "vnop_close",
        0,
-       vop_open_vp_offsets,
+       vnop_close_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_open_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_open_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_close_args, a_context),
+       NULL
 };
 
-int vop_close_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_close_args,a_vp),
+int vnop_access_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_access_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_close_desc = {
+struct vnodeop_desc vnop_access_desc = {
        0,
-       "vop_close",
+       "vnop_access",
        0,
-       vop_close_vp_offsets,
+       vnop_access_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_close_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_close_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_close_args, a_context),
+       NULL
 };
 
-int vop_access_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_access_args,a_vp),
+int vnop_getattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_getattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_access_desc = {
+struct vnodeop_desc vnop_getattr_desc = {
        0,
-       "vop_access",
+       "vnop_getattr",
        0,
-       vop_access_vp_offsets,
+       vnop_getattr_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_access_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_access_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_getattr_args, a_context),
+       NULL
 };
 
-int vop_getattr_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_getattr_args,a_vp),
+int vnop_setattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_setattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_getattr_desc = {
+struct vnodeop_desc vnop_setattr_desc = {
        0,
-       "vop_getattr",
+       "vnop_setattr",
        0,
-       vop_getattr_vp_offsets,
+       vnop_setattr_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_getattr_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_getattr_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_setattr_args, a_context),
+       NULL
 };
 
-int vop_setattr_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_setattr_args,a_vp),
+int vnop_read_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_read_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_setattr_desc = {
+struct vnodeop_desc vnop_read_desc = {
        0,
-       "vop_setattr",
+       "vnop_read",
        0,
-       vop_setattr_vp_offsets,
+       vnop_read_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_setattr_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_setattr_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_read_args, a_context),
+       NULL
 };
 
-int vop_getattrlist_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_getattrlist_args,a_vp),
+int vnop_write_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_write_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_getattrlist_desc = {
+struct vnodeop_desc vnop_write_desc = {
        0,
-       "vop_getattrlist",
+       "vnop_write",
        0,
-       vop_getattrlist_vp_offsets,
+       vnop_write_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_getattrlist_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_getattrlist_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_write_args, a_context),
+       NULL
 };
 
-int vop_setattrlist_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_setattrlist_args,a_vp),
+int vnop_ioctl_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_ioctl_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_setattrlist_desc = {
+struct vnodeop_desc vnop_ioctl_desc = {
        0,
-       "vop_setattrlist",
+       "vnop_ioctl",
        0,
-       vop_setattrlist_vp_offsets,
+       vnop_ioctl_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_setattrlist_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_setattrlist_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_ioctl_args, a_context),
+       NULL
 };
 
-int vop_read_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_read_args,a_vp),
+int vnop_select_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_select_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_read_desc = {
+struct vnodeop_desc vnop_select_desc = {
        0,
-       "vop_read",
+       "vnop_select",
        0,
-       vop_read_vp_offsets,
+       vnop_select_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_read_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_select_args, a_context),
+       NULL
 };
 
-int vop_write_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_write_args,a_vp),
+int vnop_exchange_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_exchange_args,a_fvp),
+       VOPARG_OFFSETOF(struct vnop_exchange_args,a_tvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_write_desc = {
+struct vnodeop_desc vnop_exchange_desc = {
        0,
-       "vop_write",
+       "vnop_exchange",
        0,
-       vop_write_vp_offsets,
+       vnop_exchange_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_write_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_exchange_args, a_context),
+       NULL
 };
 
-int vop_lease_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_lease_args,a_vp),
+int vnop_kqfilt_add_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_kqfilt_add_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_lease_desc = {
+struct vnodeop_desc vnop_kqfilt_add_desc = {
        0,
-       "vop_lease",
+       "vnop_kqfilt_add",
        0,
-       vop_lease_vp_offsets,
+       vnop_kqfilt_add_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_lease_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_lease_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_kqfilt_add_args, a_context),
+       NULL
 };
 
-int vop_ioctl_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_ioctl_args,a_vp),
+int vnop_kqfilt_remove_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_kqfilt_remove_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_ioctl_desc = {
+struct vnodeop_desc vnop_kqfilt_remove_desc = {
        0,
-       "vop_ioctl",
+       "vnop_kqfilt_remove",
        0,
-       vop_ioctl_vp_offsets,
+       vnop_kqfilt_remove_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_ioctl_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_ioctl_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_kqfilt_remove_args, a_context),
+       NULL
 };
 
-int vop_select_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_select_args,a_vp),
+int vnop_monitor_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_monitor_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_select_desc = {
+struct vnodeop_desc vnop_monitor_desc = {
        0,
-       "vop_select",
+       "vnop_monitor",
        0,
-       vop_select_vp_offsets,
+       vnop_monitor_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_select_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_select_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_monitor_args, a_context),
+       NULL
 };
 
-int vop_exchange_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_exchange_args,a_fvp),
-       VOPARG_OFFSETOF(struct vop_exchange_args,a_tvp),
+int vnop_setlabel_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_setlabel_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_exchange_desc = {
+struct vnodeop_desc vnop_setlabel_desc = {
        0,
-       "vop_exchange",
+       "vnop_setlabel",
        0,
-       vop_exchange_vp_offsets,
+       vnop_setlabel_vp_offsets,
+       VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_exchange_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_exchange_args, a_p),
        VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_setlabel_args, a_context),
        NULL,
 };
 
-int vop_revoke_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_revoke_args,a_vp),
+int vnop_revoke_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_revoke_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_revoke_desc = {
+struct vnodeop_desc vnop_revoke_desc = {
        0,
-       "vop_revoke",
+       "vnop_revoke",
        0,
-       vop_revoke_vp_offsets,
+       vnop_revoke_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_mmap_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_mmap_args,a_vp),
+
+int vnop_mmap_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_mmap_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_mmap_desc = {
+struct vnodeop_desc vnop_mmap_desc = {
        0,
-       "vop_mmap",
+       "vnop_mmap",
        0,
-       vop_mmap_vp_offsets,
+       vnop_mmap_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_mmap_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_mmap_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_fsync_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_fsync_args,a_vp),
+
+int vnop_mnomap_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_mnomap_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_fsync_desc = {
+struct vnodeop_desc vnop_mnomap_desc = {
        0,
-       "vop_fsync",
+       "vnop_mnomap",
        0,
-       vop_fsync_vp_offsets,
+       vnop_mnomap_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_fsync_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_fsync_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_seek_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_seek_args,a_vp),
+
+int vnop_fsync_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_fsync_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_seek_desc = {
+struct vnodeop_desc vnop_fsync_desc = {
        0,
-       "vop_seek",
+       "vnop_fsync",
        0,
-       vop_seek_vp_offsets,
+       vnop_fsync_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_seek_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_fsync_args, a_context),
+       NULL
 };
 
-int vop_remove_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_remove_args,a_dvp),
-       VOPARG_OFFSETOF(struct vop_remove_args,a_vp),
+int vnop_remove_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_remove_args,a_dvp),
+       VOPARG_OFFSETOF(struct vnop_remove_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_remove_desc = {
+struct vnodeop_desc vnop_remove_desc = {
        0,
-       "vop_remove",
+       "vnop_remove",
        0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE,
-       vop_remove_vp_offsets,
+       vnop_remove_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_remove_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_remove_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_remove_args, a_context),
+       NULL
 };
 
-int vop_link_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_link_args,a_vp),
-       VOPARG_OFFSETOF(struct vop_link_args,a_tdvp),
+int vnop_remove_extended_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_remove_args,a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_link_desc = {
+struct vnodeop_desc vnop_compound_remove_desc = {
        0,
-       "vop_link",
-       0 | VDESC_VP0_WILLRELE,
-       vop_link_vp_offsets,
-       VDESC_NO_OFFSET,
+       "vnop_compound_remove",
+       0,
+       vnop_remove_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_compound_remove_args, a_vpp),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_link_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_remove_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_remove_args, a_context),
+       NULL
 };
 
-int vop_rename_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_rename_args,a_fdvp),
-       VOPARG_OFFSETOF(struct vop_rename_args,a_fvp),
-       VOPARG_OFFSETOF(struct vop_rename_args,a_tdvp),
-       VOPARG_OFFSETOF(struct vop_rename_args,a_tvp),
+int vnop_link_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_link_args,a_vp),
+       VOPARG_OFFSETOF(struct vnop_link_args,a_tdvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_rename_desc = {
+struct vnodeop_desc vnop_link_desc = {
        0,
-       "vop_rename",
-       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLRELE | VDESC_VP3_WILLRELE,
-       vop_rename_vp_offsets,
+       "vnop_link",
+       0 | VDESC_VP1_WILLRELE,
+       vnop_link_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_rename_args, a_fcnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_link_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_link_args, a_context),
+       NULL
 };
 
-int vop_mkdir_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_mkdir_args,a_dvp),
+int vnop_rename_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_rename_args,a_fdvp),
+       VOPARG_OFFSETOF(struct vnop_rename_args,a_fvp),
+       VOPARG_OFFSETOF(struct vnop_rename_args,a_tdvp),
+       VOPARG_OFFSETOF(struct vnop_rename_args,a_tvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_mkdir_desc = {
+struct vnodeop_desc vnop_rename_desc = {
        0,
-       "vop_mkdir",
-       0 | VDESC_VP0_WILLRELE,
-       vop_mkdir_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_mkdir_args, a_vpp),
+       "vnop_rename",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLRELE | VDESC_VP3_WILLRELE,
+       vnop_rename_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_mkdir_args, a_cnp),
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_rename_args, a_fcnp),
+       VOPARG_OFFSETOF(struct vnop_rename_args, a_context),
+       NULL
 };
 
-int vop_rmdir_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_rmdir_args,a_dvp),
-       VOPARG_OFFSETOF(struct vop_rmdir_args,a_vp),
+int vnop_renamex_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_renamex_args,a_fdvp),
+       VOPARG_OFFSETOF(struct vnop_renamex_args,a_fvp),
+       VOPARG_OFFSETOF(struct vnop_renamex_args,a_tdvp),
+       VOPARG_OFFSETOF(struct vnop_renamex_args,a_tvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_rmdir_desc = {
+struct vnodeop_desc vnop_renamex_desc = {
        0,
-       "vop_rmdir",
-       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE,
-       vop_rmdir_vp_offsets,
+       "vnop_renamex",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLRELE | VDESC_VP3_WILLRELE,
+       vnop_renamex_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_rmdir_args, a_cnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_renamex_args, a_fcnp),
+       VOPARG_OFFSETOF(struct vnop_renamex_args, a_context),
+       NULL
 };
 
-int vop_symlink_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_symlink_args,a_dvp),
+int vnop_compound_rename_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_compound_rename_args,a_fdvp),
+       VOPARG_OFFSETOF(struct vnop_compound_rename_args,a_fvpp),
+       VOPARG_OFFSETOF(struct vnop_compound_rename_args,a_tdvp),
+       VOPARG_OFFSETOF(struct vnop_compound_rename_args,a_tvpp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_symlink_desc = {
+struct vnodeop_desc vnop_compound_rename_desc = {
        0,
-       "vop_symlink",
-       0 | VDESC_VP0_WILLRELE | VDESC_VPP_WILLRELE,
-       vop_symlink_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_symlink_args, a_vpp),
+       "vnop_compound_rename",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLRELE | VDESC_VP3_WILLRELE,
+       vnop_compound_rename_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_symlink_args, a_cnp),
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_compound_rename_args, a_fcnp),
+       VOPARG_OFFSETOF(struct vnop_compound_rename_args, a_context),
+       NULL
 };
 
-int vop_readdir_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_readdir_args,a_vp),
+int vnop_mkdir_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_mkdir_args,a_dvp),
+       VDESC_NO_OFFSET
+};
+struct vnodeop_desc vnop_mkdir_desc = {
+       0,
+       "vnop_mkdir",
+       0 | VDESC_VP0_WILLRELE,
+       vnop_mkdir_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_mkdir_args, a_vpp),
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_mkdir_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_mkdir_args, a_context),
+       NULL
+};
+
+int vnop_compound_mkdir_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_compound_mkdir_args,a_dvp),
+       VDESC_NO_OFFSET
+};
+struct vnodeop_desc vnop_compound_mkdir_desc = {
+       0,
+       "vnop_compound_mkdir",
+       0 | VDESC_VP0_WILLRELE,
+       vnop_compound_mkdir_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_compound_mkdir_args, a_vpp),
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_compound_mkdir_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_compound_mkdir_args, a_context),
+       NULL
+};
+
+
+int vnop_rmdir_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_rmdir_args,a_dvp),
+       VOPARG_OFFSETOF(struct vnop_rmdir_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_readdir_desc = {
-       0,
-       "vop_readdir",
+struct vnodeop_desc vnop_rmdir_desc = {
        0,
-       vop_readdir_vp_offsets,
+       "vnop_rmdir",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE,
+       vnop_rmdir_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_readdir_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_rmdir_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_rmdir_args, a_context),
+       NULL
 };
 
-int vop_readdirattr_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_readdirattr_args,a_vp),
+int vnop_compound_rmdir_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_compound_rmdir_args,a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_readdirattr_desc = {
-       0,
-       "vop_readdirattr",
+struct vnodeop_desc vnop_compound_rmdir_desc = {
        0,
-       vop_readdirattr_vp_offsets,
+       "vnop_compound_rmdir",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE,
+       vnop_rmdir_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_readdirattr_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_compound_rmdir_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_compound_rmdir_args, a_context),
+       NULL
 };
 
-int vop_readlink_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_readlink_args,a_vp),
-       VDESC_NO_OFFSET
+int vnop_symlink_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_symlink_args,a_dvp),
+       VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_readlink_desc = {
-       0,
-       "vop_readlink",
-       0,
-       vop_readlink_vp_offsets,
-       VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_readlink_args, a_cred),
-       VDESC_NO_OFFSET,
-       VDESC_NO_OFFSET,
-       NULL,
+struct vnodeop_desc vnop_symlink_desc = {
+       0,
+       "vnop_symlink",
+       0 | VDESC_VP0_WILLRELE | VDESC_VPP_WILLRELE,
+       vnop_symlink_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_symlink_args, a_vpp),
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_symlink_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_symlink_args, a_context),
+       NULL
 };
 
-int vop_abortop_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_abortop_args,a_dvp),
+int vnop_readdir_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_readdir_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_abortop_desc = {
+struct vnodeop_desc vnop_readdir_desc = {
        0,
-       "vop_abortop",
+       "vnop_readdir",
        0,
-       vop_abortop_vp_offsets,
+       vnop_readdir_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_abortop_args, a_cnp),
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_symlink_args, a_context),
+       NULL
 };
 
-int vop_inactive_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_inactive_args,a_vp),
+int vnop_readdirattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_readdirattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_inactive_desc = {
+struct vnodeop_desc vnop_readdirattr_desc = {
        0,
-       "vop_inactive",
+       "vnop_readdirattr",
        0,
-       vop_inactive_vp_offsets,
+       vnop_readdirattr_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_inactive_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_readdirattr_args, a_context),
+       NULL
 };
 
-int vop_reclaim_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_reclaim_args,a_vp),
+int vnop_getattrlistbulk_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_getattrlistbulk_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_reclaim_desc = {
+struct vnodeop_desc vnop_getattrlistbulk_desc = {
        0,
-       "vop_reclaim",
+       "vnop_getattrlistbulk",
        0,
-       vop_reclaim_vp_offsets,
+       vnop_getattrlistbulk_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_reclaim_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_getattrlistbulk_args, a_context),
+       NULL
 };
 
-int vop_lock_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_lock_args,a_vp),
+int vnop_readlink_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_readlink_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_lock_desc = {
+struct vnodeop_desc vnop_readlink_desc = {
        0,
-       "vop_lock",
+       "vnop_readlink",
        0,
-       vop_lock_vp_offsets,
+       vnop_readlink_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_lock_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_readlink_args, a_context),
+       NULL
 };
 
-int vop_unlock_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_unlock_args,a_vp),
+int vnop_inactive_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_inactive_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_unlock_desc = {
+struct vnodeop_desc vnop_inactive_desc = {
        0,
-       "vop_unlock",
+       "vnop_inactive",
        0,
-       vop_unlock_vp_offsets,
+       vnop_inactive_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_unlock_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_inactive_args, a_context),
+       NULL
 };
 
-int vop_bmap_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_bmap_args,a_vp),
+int vnop_reclaim_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_reclaim_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_bmap_desc = {
+struct vnodeop_desc vnop_reclaim_desc = {
        0,
-       "vop_bmap",
+       "vnop_reclaim",
        0,
-       vop_bmap_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_bmap_args, a_vpp),
+       vnop_reclaim_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_reclaim_args, a_context),
+       NULL
 };
 
-int vop_print_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_print_args,a_vp),
+int vnop_pathconf_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_pathconf_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_print_desc = {
+struct vnodeop_desc vnop_pathconf_desc = {
        0,
-       "vop_print",
+       "vnop_pathconf",
        0,
-       vop_print_vp_offsets,
+       vnop_pathconf_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_pathconf_args, a_context),
+       NULL
 };
 
-int vop_islocked_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_islocked_args,a_vp),
+int vnop_advlock_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_advlock_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_islocked_desc = {
+struct vnodeop_desc vnop_advlock_desc = {
        0,
-       "vop_islocked",
+       "vnop_advlock",
        0,
-       vop_islocked_vp_offsets,
+       vnop_advlock_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_advlock_args, a_context),
+       NULL
 };
 
-int vop_pathconf_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_pathconf_args,a_vp),
+int vnop_allocate_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_allocate_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_pathconf_desc = {
+struct vnodeop_desc vnop_allocate_desc = {
        0,
-       "vop_pathconf",
+       "vnop_allocate",
        0,
-       vop_pathconf_vp_offsets,
+       vnop_allocate_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_allocate_args, a_context),
+       NULL
 };
 
-int vop_advlock_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_advlock_args,a_vp),
+int vnop_pagein_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_pagein_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_advlock_desc = {
+struct vnodeop_desc vnop_pagein_desc = {
        0,
-       "vop_advlock",
+       "vnop_pagein",
        0,
-       vop_advlock_vp_offsets,
+       vnop_pagein_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_pagein_args, a_context),
+       NULL
 };
 
-int vop_blkatoff_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_blkatoff_args,a_vp),
+int vnop_pageout_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_pageout_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_blkatoff_desc = {
+struct vnodeop_desc vnop_pageout_desc = {
        0,
-       "vop_blkatoff",
+       "vnop_pageout",
        0,
-       vop_blkatoff_vp_offsets,
+       vnop_pageout_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_pageout_args, a_context),
+       NULL
 };
 
-int vop_valloc_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_valloc_args,a_pvp),
+int vnop_searchfs_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_searchfs_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_valloc_desc = {
+struct vnodeop_desc vnop_searchfs_desc = {
        0,
-       "vop_valloc",
+       "vnop_searchfs",
        0,
-       vop_valloc_vp_offsets,
-       VOPARG_OFFSETOF(struct vop_valloc_args, a_vpp),
-       VOPARG_OFFSETOF(struct vop_valloc_args, a_cred),
+       vnop_searchfs_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
-};
-
-int vop_reallocblks_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_reallocblks_args,a_vp),
-       VDESC_NO_OFFSET
-};
-struct vnodeop_desc vop_reallocblks_desc = {
-       0,
-       "vop_reallocblks",
-       0,
-       vop_reallocblks_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VDESC_NO_OFFSET,
-       NULL,
+       NULL
 };
 
-int vop_vfree_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_vfree_args,a_pvp),
+int vnop_copyfile_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_copyfile_args,a_fvp),
+       VOPARG_OFFSETOF(struct vnop_copyfile_args,a_tdvp),
+       VOPARG_OFFSETOF(struct vnop_copyfile_args,a_tvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_vfree_desc = {
-       0,
-       "vop_vfree",
+struct vnodeop_desc vnop_copyfile_desc = {
        0,
-       vop_vfree_vp_offsets,
+       "vnop_copyfile",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLRELE,
+       vnop_copyfile_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_copyfile_args, a_tcnp),
        VDESC_NO_OFFSET,
-       NULL,
+       NULL
 };
 
-int vop_truncate_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_truncate_args,a_vp),
+int vnop_clonefile_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_clonefile_args,a_fvp),
+       VOPARG_OFFSETOF(struct vnop_clonefile_args,a_dvp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_truncate_desc = {
+struct vnodeop_desc vnop_clonefile_desc = {
        0,
-       "vop_truncate",
-       0,
-       vop_truncate_vp_offsets,
+       "vnop_clonefile",
+       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VPP_WILLRELE,
+       vnop_clonefile_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_clonefile_args, a_vpp),
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_truncate_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_truncate_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_clonefile_args, a_cnp),
+       VOPARG_OFFSETOF(struct vnop_clonefile_args, a_context),
+       NULL
 };
 
-int vop_allocate_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_allocate_args,a_vp),
+int vop_getxattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_getxattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_allocate_desc = {
+struct vnodeop_desc vnop_getxattr_desc = {
        0,
-       "vop_allocate",
+       "vnop_getxattr",
        0,
-       vop_allocate_vp_offsets,
+       vop_getxattr_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_allocate_args, a_cred),
-       VOPARG_OFFSETOF(struct vop_allocate_args, a_p),
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_getxattr_args, a_context),
+       NULL
 };
 
-int vop_update_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_update_args,a_vp),
+int vop_setxattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_setxattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_update_desc = {
+struct vnodeop_desc vnop_setxattr_desc = {
        0,
-       "vop_update",
+       "vnop_setxattr",
        0,
-       vop_update_vp_offsets,
+       vop_setxattr_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_setxattr_args, a_context),
+       NULL
 };
 
-int vop_pgrd_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_pgrd_args,a_vp),
+int vop_removexattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_removexattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_pgrd_desc = {
+struct vnodeop_desc vnop_removexattr_desc = {
        0,
-       "vop_pgrd",
+       "vnop_removexattr",
        0,
-       vop_pgrd_vp_offsets,
+       vop_removexattr_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_pgrd_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_removexattr_args, a_context),
+       NULL
 };
 
-int vop_pgwr_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_pgwr_args,a_vp),
+int vop_listxattr_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_listxattr_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_pgwr_desc = {
+struct vnodeop_desc vnop_listxattr_desc = {
        0,
-       "vop_pgwr",
+       "vnop_listxattr",
        0,
-       vop_pgwr_vp_offsets,
+       vop_listxattr_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_pgwr_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_listxattr_args, a_context),
+       NULL
 };
 
-int vop_pagein_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_pagein_args,a_vp),
+int vnop_blktooff_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_blktooff_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_pagein_desc = {
+struct vnodeop_desc vnop_blktooff_desc = {
        0,
-       "vop_pagein",
+       "vnop_blktooff",
        0,
-       vop_pagein_vp_offsets,
+       vnop_blktooff_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_pagein_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_pageout_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_pageout_args,a_vp),
+int vnop_offtoblk_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_offtoblk_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_pageout_desc = {
+struct vnodeop_desc vnop_offtoblk_desc = {
        0,
-       "vop_pageout",
+       "vnop_offtoblk",
        0,
-       vop_pageout_vp_offsets,
+       vnop_offtoblk_vp_offsets,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_pageout_args, a_cred),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_devblocksize_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_devblocksize_args,a_vp),
+int vnop_blockmap_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_blockmap_args,a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_devblocksize_desc = {
+struct vnodeop_desc vnop_blockmap_desc = {
        0,
-       "vop_devblocksize",
+       "vnop_blockmap",
        0,
-       vop_devblocksize_vp_offsets,
+       vnop_blockmap_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_searchfs_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_searchfs_args,a_vp),
+#if NAMEDSTREAMS
+int vnop_getnamedstream_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_getnamedstream_args, a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_searchfs_desc = {
+struct vnodeop_desc vnop_getnamedstream_desc = {
        0,
-       "vop_searchfs",
+       "vnop_getnamedstream",
        0,
-       vop_searchfs_vp_offsets,
+       vnop_getnamedstream_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_getnamedstream_args, a_svpp),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
+       VOPARG_OFFSETOF(struct vnop_getnamedstream_args, a_name),
+       VOPARG_OFFSETOF(struct vnop_getnamedstream_args, a_context),
+       NULL
+};
+
+int vnop_makenamedstream_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_makenamedstream_args, a_vp),
+       VDESC_NO_OFFSET
+};
+struct vnodeop_desc vnop_makenamedstream_desc = {
+       0,
+       "vnop_makenamedstream",
+       0, /* flags */
+       vnop_makenamedstream_vp_offsets,
+       VOPARG_OFFSETOF(struct vnop_makenamedstream_args, a_svpp),
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_makenamedstream_args, a_name),
+       VOPARG_OFFSETOF(struct vnop_makenamedstream_args, a_context),
+       NULL
 };
 
-int vop_copyfile_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_copyfile_args,a_fvp),
-       VOPARG_OFFSETOF(struct vop_copyfile_args,a_tdvp),
-       VOPARG_OFFSETOF(struct vop_copyfile_args,a_tvp),
+int vnop_removenamedstream_vp_offsets[] = {
+       VOPARG_OFFSETOF(struct vnop_removenamedstream_args, a_vp),
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_copyfile_desc = {
+struct vnodeop_desc vnop_removenamedstream_desc = {
        0,
-       "vop_copyfile",
-       0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLRELE,
-       vop_copyfile_vp_offsets,
+       "vnop_removenamedstream",
+       0,
+       vnop_removenamedstream_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       VOPARG_OFFSETOF(struct vop_copyfile_args, a_tcnp),
-       NULL,
+       VOPARG_OFFSETOF(struct vnop_removenamedstream_args, a_name),
+       VOPARG_OFFSETOF(struct vnop_removenamedstream_args, a_context),
+       NULL
 };
-
-int vop_blktooff_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_blktooff_args,a_vp),
+#else
+int vnop_getnamedstream_vp_offsets[] = {
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_blktooff_desc = {
-       0,
-       "vop_blktooff",
+struct vnodeop_desc vnop_getnamedstream_desc = {
        0,
-       vop_blktooff_vp_offsets,
+       "vnop_getnamedstream",
+       VDESC_DISABLED, /* flags */
+       vnop_getnamedstream_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_offtoblk_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_offtoblk_args,a_vp),
+int vnop_makenamedstream_vp_offsets[] = {
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_offtoblk_desc = {
+struct vnodeop_desc vnop_makenamedstream_desc = {
        0,
-       "vop_offtoblk",
-       0,
-       vop_offtoblk_vp_offsets,
+       "vnop_makenamedstream",
+       VDESC_DISABLED, /* flags */
+       vnop_makenamedstream_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_cmap_vp_offsets[] = {
-       VOPARG_OFFSETOF(struct vop_cmap_args,a_vp),
+int vnop_removenamedstream_vp_offsets[] = {
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_cmap_desc = {
+struct vnodeop_desc vnop_removenamedstream_desc = {
        0,
-       "vop_cmap",
-       0,
-       vop_cmap_vp_offsets,
+       "vnop_removenamedstream",
+       VDESC_DISABLED, /* flags */
+       vnop_removenamedstream_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
+#endif
 
 /* Special cases: */
 
-int vop_strategy_vp_offsets[] = {
+int vnop_strategy_vp_offsets[] = {
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_strategy_desc = {
+struct vnodeop_desc vnop_strategy_desc = {
        0,
-       "vop_strategy",
+       "vnop_strategy",
        0,
-       vop_strategy_vp_offsets,
+       vnop_strategy_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
-int vop_bwrite_vp_offsets[] = {
+int vnop_bwrite_vp_offsets[] = {
        VDESC_NO_OFFSET
 };
-struct vnodeop_desc vop_bwrite_desc = {
+struct vnodeop_desc vnop_bwrite_desc = {
        0,
-       "vop_bwrite",
+       "vnop_bwrite",
        0,
-       vop_bwrite_vp_offsets,
+       vnop_bwrite_vp_offsets,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
        VDESC_NO_OFFSET,
-       NULL,
+       VDESC_NO_OFFSET,
+       NULL
 };
 
 /* End of special cases. */
 
 struct vnodeop_desc *vfs_op_descs[] = {
-       &vop_default_desc,      /* MUST BE FIRST */
-       &vop_strategy_desc,     /* XXX: SPECIAL CASE */
-       &vop_bwrite_desc,       /* XXX: SPECIAL CASE */
-
-       &vop_lookup_desc,
-       &vop_cachedlookup_desc,
-       &vop_create_desc,
-       &vop_whiteout_desc,
-       &vop_mknod_desc,
-       &vop_mkcomplex_desc,
-       &vop_open_desc,
-       &vop_close_desc,
-       &vop_access_desc,
-       &vop_getattr_desc,
-       &vop_setattr_desc,
-       &vop_getattrlist_desc,
-       &vop_setattrlist_desc,
-       &vop_read_desc,
-       &vop_write_desc,
-       &vop_lease_desc,
-       &vop_ioctl_desc,
-       &vop_select_desc,
-       &vop_exchange_desc,
-       &vop_revoke_desc,
-       &vop_mmap_desc,
-       &vop_fsync_desc,
-       &vop_seek_desc,
-       &vop_remove_desc,
-       &vop_link_desc,
-       &vop_rename_desc,
-       &vop_mkdir_desc,
-       &vop_rmdir_desc,
-       &vop_symlink_desc,
-       &vop_readdir_desc,
-       &vop_readdirattr_desc,
-       &vop_readlink_desc,
-       &vop_abortop_desc,
-       &vop_inactive_desc,
-       &vop_reclaim_desc,
-       &vop_lock_desc,
-       &vop_unlock_desc,
-       &vop_bmap_desc,
-       &vop_print_desc,
-       &vop_islocked_desc,
-       &vop_pathconf_desc,
-       &vop_advlock_desc,
-       &vop_blkatoff_desc,
-       &vop_valloc_desc,
-       &vop_reallocblks_desc,
-       &vop_vfree_desc,
-       &vop_truncate_desc,
-       &vop_allocate_desc,
-       &vop_update_desc,
-       &vop_pgrd_desc,
-       &vop_pgwr_desc,
-       &vop_pagein_desc,
-       &vop_pageout_desc,
-       &vop_devblocksize_desc,
-       &vop_searchfs_desc,
-       &vop_copyfile_desc,
-       &vop_blktooff_desc,
-       &vop_offtoblk_desc,
-       &vop_cmap_desc,
+       &vnop_default_desc,     /* MUST BE FIRST */
+       &vnop_strategy_desc,    /* XXX: SPECIAL CASE */
+       &vnop_bwrite_desc,      /* XXX: SPECIAL CASE */
+
+       &vnop_lookup_desc,
+       &vnop_create_desc,
+       &vnop_mknod_desc,
+       &vnop_whiteout_desc,
+       &vnop_open_desc,
+       &vnop_compound_open_desc,
+       &vnop_close_desc,
+       &vnop_access_desc,
+       &vnop_getattr_desc,
+       &vnop_setattr_desc,
+       &vnop_read_desc,
+       &vnop_write_desc,
+       &vnop_ioctl_desc,
+       &vnop_select_desc,
+       &vnop_exchange_desc,
+       &vnop_kqfilt_add_desc,
+       &vnop_kqfilt_remove_desc,
+       &vnop_setlabel_desc,
+       &vnop_revoke_desc,
+       &vnop_mmap_desc,
+       &vnop_mnomap_desc,
+       &vnop_fsync_desc,
+       &vnop_remove_desc,
+       &vnop_compound_remove_desc,
+       &vnop_link_desc,
+       &vnop_rename_desc,
+       &vnop_renamex_desc,
+       &vnop_compound_rename_desc,
+       &vnop_mkdir_desc,
+       &vnop_compound_mkdir_desc,
+       &vnop_rmdir_desc,
+       &vnop_compound_rmdir_desc,
+       &vnop_symlink_desc,
+       &vnop_readdir_desc,
+       &vnop_readdirattr_desc,
+       &vnop_getattrlistbulk_desc,
+       &vnop_readlink_desc,
+       &vnop_inactive_desc,
+       &vnop_reclaim_desc,
+       &vnop_pathconf_desc,
+       &vnop_advlock_desc,
+       &vnop_allocate_desc,
+       &vnop_pagein_desc,
+       &vnop_pageout_desc,
+       &vnop_searchfs_desc,
+       &vnop_copyfile_desc,
+       &vnop_clonefile_desc,
+       &vnop_getxattr_desc,
+       &vnop_setxattr_desc,
+       &vnop_removexattr_desc,
+       &vnop_listxattr_desc,
+       &vnop_blktooff_desc,
+       &vnop_offtoblk_desc,
+       &vnop_blockmap_desc,
+       &vnop_monitor_desc,
+#if !defined(NAMEDSTREAMS)
+       /*
+        * We define the named streams ops descriptors as we _always_ have to
+        * have symbols with their names, and as such we really really need
+        * those symbols to be valid operations descriptors. However if
+        * named streams support is not enabled, we flag these descriptors
+        * as ignored.
+        */
+#endif
+       &vnop_getnamedstream_desc,
+       &vnop_makenamedstream_desc,
+       &vnop_removenamedstream_desc,
        NULL
 };