{This file is automatically generated by "vop_generator"}

unit vnode_if;

interface

{$mode objfpc}{$H+}
{$CALLING SysV_ABI_CDecl}

uses
 sys_event,
 vnode,
 vnamei,
 vfile,
 vuio,
 vmount,
 vfcntl,
 vsocketvar;

type
 PPPtrUint     =^PPtrUint;
 pp_bufobj     =Pointer;
 daddr_t       =PtrUint;
 p_daddr_t     =PPtrUint;
 p_buf         =Pointer;
 p_task        =Pointer;
 p_cluster_save=Pointer;
 p_vm_page_t   =Pointer;

 p_vop_islocked_args=^vop_islocked_args;
 vop_islocked_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 p_vop_lookup_args=^vop_lookup_args;
 vop_lookup_args=record
  a_gen:p_vnodeop_desc;
  a_dvp:p_vnode;
  a_vpp:pp_vnode;
  a_cnp:p_componentname;
 end;

 p_vop_create_args=^vop_create_args;
 vop_create_args=record
  a_gen:p_vnodeop_desc;
  a_dvp:p_vnode;
  a_vpp:pp_vnode;
  a_cnp:p_componentname;
  a_vap:p_vattr;
 end;

 p_vop_whiteout_args=^vop_whiteout_args;
 vop_whiteout_args=record
  a_gen  :p_vnodeop_desc;
  a_dvp  :p_vnode;
  a_cnp  :p_componentname;
  a_flags:Integer;
 end;

 p_vop_mknod_args=^vop_mknod_args;
 vop_mknod_args=record
  a_gen:p_vnodeop_desc;
  a_dvp:p_vnode;
  a_vpp:pp_vnode;
  a_cnp:p_componentname;
  a_vap:p_vattr;
 end;

 p_vop_open_args=^vop_open_args;
 vop_open_args=record
  a_gen :p_vnodeop_desc;
  a_vp  :p_vnode;
  a_mode:Integer;
  a_fp  :p_file;
 end;

 p_vop_close_args=^vop_close_args;
 vop_close_args=record
  a_gen  :p_vnodeop_desc;
  a_vp   :p_vnode;
  a_fflag:Integer;
 end;

 p_vop_access_args=^vop_access_args;
 vop_access_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_accmode:accmode_t;
 end;

 p_vop_accessx_args=^vop_accessx_args;
 vop_accessx_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_accmode:accmode_t;
 end;

 p_vop_getattr_args=^vop_getattr_args;
 vop_getattr_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_vap:p_vattr;
 end;

 p_vop_setattr_args=^vop_setattr_args;
 vop_setattr_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_vap:p_vattr;
 end;

 p_vop_markatime_args=^vop_markatime_args;
 vop_markatime_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 p_vop_read_args=^vop_read_args;
 vop_read_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_uio   :p_uio;
  a_ioflag:Integer;
 end;

 p_vop_write_args=^vop_write_args;
 vop_write_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_uio   :p_uio;
  a_ioflag:Integer;
 end;

 p_vop_ioctl_args=^vop_ioctl_args;
 vop_ioctl_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_command:PtrUint;
  a_data   :Pointer;
  a_fflag  :Integer;
 end;

 p_vop_poll_args=^vop_poll_args;
 vop_poll_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_events:Integer;
 end;

 p_vop_kqfilter_args=^vop_kqfilter_args;
 vop_kqfilter_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_kn :p_knote;
 end;

 p_vop_revoke_args=^vop_revoke_args;
 vop_revoke_args=record
  a_gen  :p_vnodeop_desc;
  a_vp   :p_vnode;
  a_flags:Integer;
 end;

 p_vop_fsync_args=^vop_fsync_args;
 vop_fsync_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_waitfor:Integer;
 end;

 p_vop_remove_args=^vop_remove_args;
 vop_remove_args=record
  a_gen:p_vnodeop_desc;
  a_dvp:p_vnode;
  a_vp :p_vnode;
  a_cnp:p_componentname;
 end;

 p_vop_link_args=^vop_link_args;
 vop_link_args=record
  a_gen :p_vnodeop_desc;
  a_tdvp:p_vnode;
  a_vp  :p_vnode;
  a_cnp :p_componentname;
 end;

 p_vop_rename_args=^vop_rename_args;
 vop_rename_args=record
  a_gen :p_vnodeop_desc;
  a_fdvp:p_vnode;
  a_fvp :p_vnode;
  a_fcnp:p_componentname;
  a_tdvp:p_vnode;
  a_tvp :p_vnode;
  a_tcnp:p_componentname;
 end;

 p_vop_mkdir_args=^vop_mkdir_args;
 vop_mkdir_args=record
  a_gen:p_vnodeop_desc;
  a_dvp:p_vnode;
  a_vpp:pp_vnode;
  a_cnp:p_componentname;
  a_vap:p_vattr;
 end;

 p_vop_rmdir_args=^vop_rmdir_args;
 vop_rmdir_args=record
  a_gen:p_vnodeop_desc;
  a_dvp:p_vnode;
  a_vp :p_vnode;
  a_cnp:p_componentname;
 end;

 p_vop_symlink_args=^vop_symlink_args;
 vop_symlink_args=record
  a_gen   :p_vnodeop_desc;
  a_dvp   :p_vnode;
  a_vpp   :pp_vnode;
  a_cnp   :p_componentname;
  a_vap   :p_vattr;
  a_target:PChar;
 end;

 p_vop_readdir_args=^vop_readdir_args;
 vop_readdir_args=record
  a_gen     :p_vnodeop_desc;
  a_vp      :p_vnode;
  a_uio     :p_uio;
  a_eofflag :PInteger;
  a_ncookies:PInteger;
  a_cookies :PPPtrUint;
 end;

 p_vop_readlink_args=^vop_readlink_args;
 vop_readlink_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_uio:p_uio;
 end;

 p_vop_inactive_args=^vop_inactive_args;
 vop_inactive_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 p_vop_reclaim_args=^vop_reclaim_args;
 vop_reclaim_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 p_vop_lock1_args=^vop_lock1_args;
 vop_lock1_args=record
  a_gen  :p_vnodeop_desc;
  a_vp   :p_vnode;
  a_flags:Integer;
  a_file :PChar;
  a_line :Integer;
 end;

 p_vop_unlock_args=^vop_unlock_args;
 vop_unlock_args=record
  a_gen  :p_vnodeop_desc;
  a_vp   :p_vnode;
  a_flags:Integer;
 end;

 p_vop_bmap_args=^vop_bmap_args;
 vop_bmap_args=record
  a_gen :p_vnodeop_desc;
  a_vp  :p_vnode;
  a_bn  :daddr_t;
  a_bop :pp_bufobj;
  a_bnp :p_daddr_t;
  a_runp:PInteger;
  a_runb:PInteger;
 end;

 p_vop_strategy_args=^vop_strategy_args;
 vop_strategy_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_bp :p_buf;
 end;

 p_vop_getwritemount_args=^vop_getwritemount_args;
 vop_getwritemount_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_mpp:pp_mount;
 end;

 p_vop_print_args=^vop_print_args;
 vop_print_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 p_vop_pathconf_args=^vop_pathconf_args;
 vop_pathconf_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_name  :Integer;
  a_retval:PPtrUint;
 end;

 p_vop_advlock_args=^vop_advlock_args;
 vop_advlock_args=record
  a_gen  :p_vnodeop_desc;
  a_vp   :p_vnode;
  a_id   :Pointer;
  a_op   :Integer;
  a_fl   :p_flock;
  a_flags:Integer;
 end;

 p_vop_advlockasync_args=^vop_advlockasync_args;
 vop_advlockasync_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_id     :Pointer;
  a_op     :Integer;
  a_fl     :p_flock;
  a_flags  :Integer;
  a_task   :p_task;
  a_cookiep:PPointer;
 end;

 p_vop_advlockpurge_args=^vop_advlockpurge_args;
 vop_advlockpurge_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 p_vop_reallocblks_args=^vop_reallocblks_args;
 vop_reallocblks_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_buflist:p_cluster_save;
 end;

 p_vop_getpages_args=^vop_getpages_args;
 vop_getpages_args=record
  a_gen    :p_vnodeop_desc;
  a_vp     :p_vnode;
  a_m      :p_vm_page_t;
  a_count  :Integer;
  a_reqpage:Integer;
  a_offset :PtrUint;
 end;

 p_vop_putpages_args=^vop_putpages_args;
 vop_putpages_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_m     :p_vm_page_t;
  a_count :Integer;
  a_sync  :Integer;
  a_rtvals:PInteger;
  a_offset:PtrUint;
 end;

 p_vop_vptofh_args=^vop_vptofh_args;
 vop_vptofh_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
  a_fhp:p_fid;
 end;

 p_vop_vptocnp_args=^vop_vptocnp_args;
 vop_vptocnp_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_vpp   :pp_vnode;
  a_buf   :PChar;
  a_buflen:PInteger;
 end;

 p_vop_allocate_args=^vop_allocate_args;
 vop_allocate_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_offset:PPtrUint;
  a_len   :PPtrUint;
 end;

 p_vop_unp_bind_args=^vop_unp_bind_args;
 vop_unp_bind_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_socket:p_socket;
 end;

 p_vop_unp_connect_args=^vop_unp_connect_args;
 vop_unp_connect_args=record
  a_gen   :p_vnodeop_desc;
  a_vp    :p_vnode;
  a_socket:pp_socket;
 end;

 p_vop_unp_detach_args=^vop_unp_detach_args;
 vop_unp_detach_args=record
  a_gen:p_vnodeop_desc;
  a_vp :p_vnode;
 end;

 vop_islocked_t     =function(ap:p_vop_islocked_args):Integer;
 vop_lookup_t       =function(ap:p_vop_lookup_args):Integer;
 vop_create_t       =function(ap:p_vop_create_args):Integer;
 vop_whiteout_t     =function(ap:p_vop_whiteout_args):Integer;
 vop_mknod_t        =function(ap:p_vop_mknod_args):Integer;
 vop_open_t         =function(ap:p_vop_open_args):Integer;
 vop_close_t        =function(ap:p_vop_close_args):Integer;
 vop_access_t       =function(ap:p_vop_access_args):Integer;
 vop_accessx_t      =function(ap:p_vop_accessx_args):Integer;
 vop_getattr_t      =function(ap:p_vop_getattr_args):Integer;
 vop_setattr_t      =function(ap:p_vop_setattr_args):Integer;
 vop_markatime_t    =function(ap:p_vop_markatime_args):Integer;
 vop_read_t         =function(ap:p_vop_read_args):Integer;
 vop_write_t        =function(ap:p_vop_write_args):Integer;
 vop_ioctl_t        =function(ap:p_vop_ioctl_args):Integer;
 vop_poll_t         =function(ap:p_vop_poll_args):Integer;
 vop_kqfilter_t     =function(ap:p_vop_kqfilter_args):Integer;
 vop_revoke_t       =function(ap:p_vop_revoke_args):Integer;
 vop_fsync_t        =function(ap:p_vop_fsync_args):Integer;
 vop_remove_t       =function(ap:p_vop_remove_args):Integer;
 vop_link_t         =function(ap:p_vop_link_args):Integer;
 vop_rename_t       =function(ap:p_vop_rename_args):Integer;
 vop_mkdir_t        =function(ap:p_vop_mkdir_args):Integer;
 vop_rmdir_t        =function(ap:p_vop_rmdir_args):Integer;
 vop_symlink_t      =function(ap:p_vop_symlink_args):Integer;
 vop_readdir_t      =function(ap:p_vop_readdir_args):Integer;
 vop_readlink_t     =function(ap:p_vop_readlink_args):Integer;
 vop_inactive_t     =function(ap:p_vop_inactive_args):Integer;
 vop_reclaim_t      =function(ap:p_vop_reclaim_args):Integer;
 vop_lock1_t        =function(ap:p_vop_lock1_args):Integer;
 vop_unlock_t       =function(ap:p_vop_unlock_args):Integer;
 vop_bmap_t         =function(ap:p_vop_bmap_args):Integer;
 vop_strategy_t     =function(ap:p_vop_strategy_args):Integer;
 vop_getwritemount_t=function(ap:p_vop_getwritemount_args):Integer;
 vop_print_t        =function(ap:p_vop_print_args):Integer;
 vop_pathconf_t     =function(ap:p_vop_pathconf_args):Integer;
 vop_advlock_t      =function(ap:p_vop_advlock_args):Integer;
 vop_advlockasync_t =function(ap:p_vop_advlockasync_args):Integer;
 vop_advlockpurge_t =function(ap:p_vop_advlockpurge_args):Integer;
 vop_reallocblks_t  =function(ap:p_vop_reallocblks_args):Integer;
 vop_getpages_t     =function(ap:p_vop_getpages_args):Integer;
 vop_putpages_t     =function(ap:p_vop_putpages_args):Integer;
 vop_vptofh_t       =function(ap:p_vop_vptofh_args):Integer;
 vop_vptocnp_t      =function(ap:p_vop_vptocnp_args):Integer;
 vop_allocate_t     =function(ap:p_vop_allocate_args):Integer;
 vop_unp_bind_t     =function(ap:p_vop_unp_bind_args):Integer;
 vop_unp_connect_t  =function(ap:p_vop_unp_connect_args):Integer;
 vop_unp_detach_t   =function(ap:p_vop_unp_detach_args):Integer;

function VOP_ISLOCKED     (vp:p_vnode):Integer;
function VOP_LOOKUP       (dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer;
function VOP_CREATE       (dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
function VOP_WHITEOUT     (dvp:p_vnode;cnp:p_componentname;flags:Integer):Integer;
function VOP_MKNOD        (dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
function VOP_OPEN         (vp:p_vnode;mode:Integer;fp:p_file):Integer;
function VOP_CLOSE        (vp:p_vnode;fflag:Integer):Integer;
function VOP_ACCESS       (vp:p_vnode;accmode:accmode_t):Integer;
function VOP_ACCESSX      (vp:p_vnode;accmode:accmode_t):Integer;
function VOP_GETATTR      (vp:p_vnode;vap:p_vattr):Integer;
function VOP_SETATTR      (vp:p_vnode;vap:p_vattr):Integer;
function VOP_MARKATIME    (vp:p_vnode):Integer;
function VOP_READ         (vp:p_vnode;uio:p_uio;ioflag:Integer):Integer;
function VOP_WRITE        (vp:p_vnode;uio:p_uio;ioflag:Integer):Integer;
function VOP_IOCTL        (vp:p_vnode;command:PtrUint;data:Pointer;fflag:Integer):Integer;
function VOP_POLL         (vp:p_vnode;events:Integer):Integer;
function VOP_KQFILTER     (vp:p_vnode;kn:p_knote):Integer;
function VOP_REVOKE       (vp:p_vnode;flags:Integer):Integer;
function VOP_FSYNC        (vp:p_vnode;waitfor:Integer):Integer;
function VOP_REMOVE       (dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
function VOP_LINK         (tdvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
function VOP_RENAME       (fdvp:p_vnode;fvp:p_vnode;fcnp:p_componentname;tdvp:p_vnode;tvp:p_vnode;tcnp:p_componentname):Integer;
function VOP_MKDIR        (dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
function VOP_RMDIR        (dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
function VOP_SYMLINK      (dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr;target:PChar):Integer;
function VOP_READDIR      (vp:p_vnode;uio:p_uio;eofflag:PInteger;ncookies:PInteger;cookies:PPPtrUint):Integer;
function VOP_READLINK     (vp:p_vnode;uio:p_uio):Integer;
function VOP_INACTIVE     (vp:p_vnode):Integer;
function VOP_RECLAIM      (vp:p_vnode):Integer;
function VOP_LOCK         (vp:p_vnode;flags:Integer;_file:PChar;line:Integer):Integer;
function VOP_UNLOCK       (vp:p_vnode;flags:Integer):Integer;
function VOP_BMAP         (vp:p_vnode;bn:daddr_t;bop:pp_bufobj;bnp:p_daddr_t;runp:PInteger;runb:PInteger):Integer;
function VOP_STRATEGY     (vp:p_vnode;bp:p_buf):Integer;
function VOP_GETWRITEMOUNT(vp:p_vnode;mpp:pp_mount):Integer;
function VOP_PRINT        (vp:p_vnode):Integer;
function VOP_PATHCONF     (vp:p_vnode;name:Integer;retval:PPtrUint):Integer;
function VOP_ADVLOCK      (vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer):Integer;
function VOP_ADVLOCKASYNC (vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer;task:p_task;cookiep:PPointer):Integer;
function VOP_ADVLOCKPURGE (vp:p_vnode):Integer;
function VOP_REALLOCBLKS  (vp:p_vnode;buflist:p_cluster_save):Integer;
function VOP_GETPAGES     (vp:p_vnode;m:p_vm_page_t;count:Integer;reqpage:Integer;offset:PtrUint):Integer;
function VOP_PUTPAGES     (vp:p_vnode;m:p_vm_page_t;count:Integer;sync:Integer;rtvals:PInteger;offset:PtrUint):Integer;
function VOP_VPTOFH       (vp:p_vnode;fhp:p_fid):Integer;
function VOP_VPTOCNP      (vp:p_vnode;vpp:pp_vnode;buf:PChar;buflen:PInteger):Integer;
function VOP_ALLOCATE     (vp:p_vnode;offset:PPtrUint;len:PPtrUint):Integer;
function VOP_UNP_BIND     (vp:p_vnode;socket:p_socket):Integer;
function VOP_UNP_CONNECT  (vp:p_vnode;socket:pp_socket):Integer;
function VOP_UNP_DETACH   (vp:p_vnode):Integer;

const
 vop_islocked_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_islocked_args(nil)^.a_vp)),Byte(-1));
 vop_lookup_vp_offsets       :array[0..1] of Byte=(Byte(ptrint(@p_vop_lookup_args(nil)^.a_dvp)),Byte(-1));
 vop_create_vp_offsets       :array[0..1] of Byte=(Byte(ptrint(@p_vop_create_args(nil)^.a_dvp)),Byte(-1));
 vop_whiteout_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_whiteout_args(nil)^.a_dvp)),Byte(-1));
 vop_mknod_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_mknod_args(nil)^.a_dvp)),Byte(-1));
 vop_open_vp_offsets         :array[0..1] of Byte=(Byte(ptrint(@p_vop_open_args(nil)^.a_vp)),Byte(-1));
 vop_close_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_close_args(nil)^.a_vp)),Byte(-1));
 vop_access_vp_offsets       :array[0..1] of Byte=(Byte(ptrint(@p_vop_access_args(nil)^.a_vp)),Byte(-1));
 vop_accessx_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_accessx_args(nil)^.a_vp)),Byte(-1));
 vop_getattr_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_getattr_args(nil)^.a_vp)),Byte(-1));
 vop_setattr_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_setattr_args(nil)^.a_vp)),Byte(-1));
 vop_markatime_vp_offsets    :array[0..1] of Byte=(Byte(ptrint(@p_vop_markatime_args(nil)^.a_vp)),Byte(-1));
 vop_read_vp_offsets         :array[0..1] of Byte=(Byte(ptrint(@p_vop_read_args(nil)^.a_vp)),Byte(-1));
 vop_write_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_write_args(nil)^.a_vp)),Byte(-1));
 vop_ioctl_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_ioctl_args(nil)^.a_vp)),Byte(-1));
 vop_poll_vp_offsets         :array[0..1] of Byte=(Byte(ptrint(@p_vop_poll_args(nil)^.a_vp)),Byte(-1));
 vop_kqfilter_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_kqfilter_args(nil)^.a_vp)),Byte(-1));
 vop_revoke_vp_offsets       :array[0..1] of Byte=(Byte(ptrint(@p_vop_revoke_args(nil)^.a_vp)),Byte(-1));
 vop_fsync_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_fsync_args(nil)^.a_vp)),Byte(-1));
 vop_remove_vp_offsets       :array[0..2] of Byte=(Byte(ptrint(@p_vop_remove_args(nil)^.a_dvp)),Byte(ptrint(@p_vop_remove_args(nil)^.a_vp)),Byte(-1));
 vop_link_vp_offsets         :array[0..2] of Byte=(Byte(ptrint(@p_vop_link_args(nil)^.a_tdvp)),Byte(ptrint(@p_vop_link_args(nil)^.a_vp)),Byte(-1));
 vop_rename_vp_offsets       :array[0..4] of Byte=(Byte(ptrint(@p_vop_rename_args(nil)^.a_fdvp)),Byte(ptrint(@p_vop_rename_args(nil)^.a_fvp)),Byte(ptrint(@p_vop_rename_args(nil)^.a_tdvp)),Byte(ptrint(@p_vop_rename_args(nil)^.a_tvp)),Byte(-1));
 vop_mkdir_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_mkdir_args(nil)^.a_dvp)),Byte(-1));
 vop_rmdir_vp_offsets        :array[0..2] of Byte=(Byte(ptrint(@p_vop_rmdir_args(nil)^.a_dvp)),Byte(ptrint(@p_vop_rmdir_args(nil)^.a_vp)),Byte(-1));
 vop_symlink_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_symlink_args(nil)^.a_dvp)),Byte(-1));
 vop_readdir_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_readdir_args(nil)^.a_vp)),Byte(-1));
 vop_readlink_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_readlink_args(nil)^.a_vp)),Byte(-1));
 vop_inactive_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_inactive_args(nil)^.a_vp)),Byte(-1));
 vop_reclaim_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_reclaim_args(nil)^.a_vp)),Byte(-1));
 vop_lock1_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_lock1_args(nil)^.a_vp)),Byte(-1));
 vop_unlock_vp_offsets       :array[0..1] of Byte=(Byte(ptrint(@p_vop_unlock_args(nil)^.a_vp)),Byte(-1));
 vop_bmap_vp_offsets         :array[0..1] of Byte=(Byte(ptrint(@p_vop_bmap_args(nil)^.a_vp)),Byte(-1));
 vop_strategy_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_strategy_args(nil)^.a_vp)),Byte(-1));
 vop_getwritemount_vp_offsets:array[0..1] of Byte=(Byte(ptrint(@p_vop_getwritemount_args(nil)^.a_vp)),Byte(-1));
 vop_print_vp_offsets        :array[0..1] of Byte=(Byte(ptrint(@p_vop_print_args(nil)^.a_vp)),Byte(-1));
 vop_pathconf_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_pathconf_args(nil)^.a_vp)),Byte(-1));
 vop_advlock_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_advlock_args(nil)^.a_vp)),Byte(-1));
 vop_advlockasync_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_advlockasync_args(nil)^.a_vp)),Byte(-1));
 vop_advlockpurge_vp_offsets :array[0..1] of Byte=(Byte(ptrint(@p_vop_advlockpurge_args(nil)^.a_vp)),Byte(-1));
 vop_reallocblks_vp_offsets  :array[0..1] of Byte=(Byte(ptrint(@p_vop_reallocblks_args(nil)^.a_vp)),Byte(-1));
 vop_getpages_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_getpages_args(nil)^.a_vp)),Byte(-1));
 vop_putpages_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_putpages_args(nil)^.a_vp)),Byte(-1));
 vop_vptofh_vp_offsets       :array[0..1] of Byte=(Byte(ptrint(@p_vop_vptofh_args(nil)^.a_vp)),Byte(-1));
 vop_vptocnp_vp_offsets      :array[0..1] of Byte=(Byte(ptrint(@p_vop_vptocnp_args(nil)^.a_vp)),Byte(-1));
 vop_allocate_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_allocate_args(nil)^.a_vp)),Byte(-1));
 vop_unp_bind_vp_offsets     :array[0..1] of Byte=(Byte(ptrint(@p_vop_unp_bind_args(nil)^.a_vp)),Byte(-1));
 vop_unp_connect_vp_offsets  :array[0..1] of Byte=(Byte(ptrint(@p_vop_unp_connect_args(nil)^.a_vp)),Byte(-1));
 vop_unp_detach_vp_offsets   :array[0..1] of Byte=(Byte(ptrint(@p_vop_unp_detach_args(nil)^.a_vp)),Byte(-1));

 vop_default_desc:t_vnodeop_desc=(
  vdesc_name                :'default';
  vdesc_call                :nil;
  vdesc_vp_offsets          :nil;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_islocked_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_islocked';
  vdesc_call                :@p_vop_vector(nil)^.vop_islocked;
  vdesc_vp_offsets          :@vop_islocked_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_lookup_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_lookup';
  vdesc_call                :@p_vop_vector(nil)^.vop_lookup;
  vdesc_vp_offsets          :@vop_lookup_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :Integer(ptrint(@p_vop_lookup_args(nil)^.a_vpp));
 );

 vop_create_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_create';
  vdesc_call                :@p_vop_vector(nil)^.vop_create;
  vdesc_vp_offsets          :@vop_create_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :Integer(ptrint(@p_vop_create_args(nil)^.a_vpp));
 );

 vop_whiteout_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_whiteout';
  vdesc_call                :@p_vop_vector(nil)^.vop_whiteout;
  vdesc_vp_offsets          :@vop_whiteout_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_mknod_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_mknod';
  vdesc_call                :@p_vop_vector(nil)^.vop_mknod;
  vdesc_vp_offsets          :@vop_mknod_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :Integer(ptrint(@p_vop_mknod_args(nil)^.a_vpp));
 );

 vop_open_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_open';
  vdesc_call                :@p_vop_vector(nil)^.vop_open;
  vdesc_vp_offsets          :@vop_open_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_close_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_close';
  vdesc_call                :@p_vop_vector(nil)^.vop_close;
  vdesc_vp_offsets          :@vop_close_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_access_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_access';
  vdesc_call                :@p_vop_vector(nil)^.vop_access;
  vdesc_vp_offsets          :@vop_access_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_accessx_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_accessx';
  vdesc_call                :@p_vop_vector(nil)^.vop_accessx;
  vdesc_vp_offsets          :@vop_accessx_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_getattr_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_getattr';
  vdesc_call                :@p_vop_vector(nil)^.vop_getattr;
  vdesc_vp_offsets          :@vop_getattr_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_setattr_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_setattr';
  vdesc_call                :@p_vop_vector(nil)^.vop_setattr;
  vdesc_vp_offsets          :@vop_setattr_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_markatime_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_markatime';
  vdesc_call                :@p_vop_vector(nil)^.vop_markatime;
  vdesc_vp_offsets          :@vop_markatime_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_read_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_read';
  vdesc_call                :@p_vop_vector(nil)^.vop_read;
  vdesc_vp_offsets          :@vop_read_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_write_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_write';
  vdesc_call                :@p_vop_vector(nil)^.vop_write;
  vdesc_vp_offsets          :@vop_write_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_ioctl_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_ioctl';
  vdesc_call                :@p_vop_vector(nil)^.vop_ioctl;
  vdesc_vp_offsets          :@vop_ioctl_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_poll_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_poll';
  vdesc_call                :@p_vop_vector(nil)^.vop_poll;
  vdesc_vp_offsets          :@vop_poll_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_kqfilter_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_kqfilter';
  vdesc_call                :@p_vop_vector(nil)^.vop_kqfilter;
  vdesc_vp_offsets          :@vop_kqfilter_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_revoke_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_revoke';
  vdesc_call                :@p_vop_vector(nil)^.vop_revoke;
  vdesc_vp_offsets          :@vop_revoke_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_fsync_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_fsync';
  vdesc_call                :@p_vop_vector(nil)^.vop_fsync;
  vdesc_vp_offsets          :@vop_fsync_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_remove_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_remove';
  vdesc_call                :@p_vop_vector(nil)^.vop_remove;
  vdesc_vp_offsets          :@vop_remove_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_link_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_link';
  vdesc_call                :@p_vop_vector(nil)^.vop_link;
  vdesc_vp_offsets          :@vop_link_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_rename_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_rename';
  vdesc_call                :@p_vop_vector(nil)^.vop_rename;
  vdesc_vp_offsets          :@vop_rename_vp_offsets;
  vdesc_flags               :VDESC_VP0_WILLRELE or VDESC_VP1_WILLRELE or VDESC_VP2_WILLRELE or VDESC_VP3_WILLRELE;
  vdesc_vpp_offset          :-1;
 );

 vop_mkdir_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_mkdir';
  vdesc_call                :@p_vop_vector(nil)^.vop_mkdir;
  vdesc_vp_offsets          :@vop_mkdir_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :Integer(ptrint(@p_vop_mkdir_args(nil)^.a_vpp));
 );

 vop_rmdir_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_rmdir';
  vdesc_call                :@p_vop_vector(nil)^.vop_rmdir;
  vdesc_vp_offsets          :@vop_rmdir_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_symlink_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_symlink';
  vdesc_call                :@p_vop_vector(nil)^.vop_symlink;
  vdesc_vp_offsets          :@vop_symlink_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :Integer(ptrint(@p_vop_symlink_args(nil)^.a_vpp));
 );

 vop_readdir_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_readdir';
  vdesc_call                :@p_vop_vector(nil)^.vop_readdir;
  vdesc_vp_offsets          :@vop_readdir_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_readlink_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_readlink';
  vdesc_call                :@p_vop_vector(nil)^.vop_readlink;
  vdesc_vp_offsets          :@vop_readlink_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_inactive_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_inactive';
  vdesc_call                :@p_vop_vector(nil)^.vop_inactive;
  vdesc_vp_offsets          :@vop_inactive_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_reclaim_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_reclaim';
  vdesc_call                :@p_vop_vector(nil)^.vop_reclaim;
  vdesc_vp_offsets          :@vop_reclaim_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_lock1_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_lock1';
  vdesc_call                :@p_vop_vector(nil)^.vop_lock1;
  vdesc_vp_offsets          :@vop_lock1_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_unlock_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_unlock';
  vdesc_call                :@p_vop_vector(nil)^.vop_unlock;
  vdesc_vp_offsets          :@vop_unlock_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_bmap_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_bmap';
  vdesc_call                :@p_vop_vector(nil)^.vop_bmap;
  vdesc_vp_offsets          :@vop_bmap_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_strategy_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_strategy';
  vdesc_call                :@p_vop_vector(nil)^.vop_strategy;
  vdesc_vp_offsets          :@vop_strategy_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_getwritemount_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_getwritemount';
  vdesc_call                :@p_vop_vector(nil)^.vop_getwritemount;
  vdesc_vp_offsets          :@vop_getwritemount_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_print_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_print';
  vdesc_call                :@p_vop_vector(nil)^.vop_print;
  vdesc_vp_offsets          :@vop_print_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_pathconf_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_pathconf';
  vdesc_call                :@p_vop_vector(nil)^.vop_pathconf;
  vdesc_vp_offsets          :@vop_pathconf_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_advlock_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_advlock';
  vdesc_call                :@p_vop_vector(nil)^.vop_advlock;
  vdesc_vp_offsets          :@vop_advlock_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_advlockasync_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_advlockasync';
  vdesc_call                :@p_vop_vector(nil)^.vop_advlockasync;
  vdesc_vp_offsets          :@vop_advlockasync_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_advlockpurge_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_advlockpurge';
  vdesc_call                :@p_vop_vector(nil)^.vop_advlockpurge;
  vdesc_vp_offsets          :@vop_advlockpurge_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_reallocblks_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_reallocblks';
  vdesc_call                :@p_vop_vector(nil)^.vop_reallocblks;
  vdesc_vp_offsets          :@vop_reallocblks_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_getpages_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_getpages';
  vdesc_call                :@p_vop_vector(nil)^.vop_getpages;
  vdesc_vp_offsets          :@vop_getpages_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_putpages_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_putpages';
  vdesc_call                :@p_vop_vector(nil)^.vop_putpages;
  vdesc_vp_offsets          :@vop_putpages_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_vptofh_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_vptofh';
  vdesc_call                :@p_vop_vector(nil)^.vop_vptofh;
  vdesc_vp_offsets          :@vop_vptofh_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_vptocnp_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_vptocnp';
  vdesc_call                :@p_vop_vector(nil)^.vop_vptocnp;
  vdesc_vp_offsets          :@vop_vptocnp_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :Integer(ptrint(@p_vop_vptocnp_args(nil)^.a_vpp));
 );

 vop_allocate_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_allocate';
  vdesc_call                :@p_vop_vector(nil)^.vop_allocate;
  vdesc_vp_offsets          :@vop_allocate_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_unp_bind_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_unp_bind';
  vdesc_call                :@p_vop_vector(nil)^.vop_unp_bind;
  vdesc_vp_offsets          :@vop_unp_bind_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_unp_connect_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_unp_connect';
  vdesc_call                :@p_vop_vector(nil)^.vop_unp_connect;
  vdesc_vp_offsets          :@vop_unp_connect_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

 vop_unp_detach_desc:t_vnodeop_desc=(
  vdesc_name                :'vop_unp_detach';
  vdesc_call                :@p_vop_vector(nil)^.vop_unp_detach;
  vdesc_vp_offsets          :@vop_unp_detach_vp_offsets;
  vdesc_flags               :0;
  vdesc_vpp_offset          :-1;
 );

implementation

function get_vp_cb(vp:p_vnode;offset:Pointer):Pointer; inline;
var
 v:p_vop_vector;
 p:Pointer;
begin
 Result:=nil;
 if (vp=nil) then Exit;
 v:=vp^.v_op;
 while (v<>nil) do
 begin
  p:=PPointer(Pointer(v)+ptrint(offset))^;
  if (p<>nil) then
  begin
   Exit(p);
  end;
  p:=v^.vop_bypass;
  if (p<>nil) then
  begin
   Exit(p);
  end;
  v:=v^.vop_default;
 end;
end;

function VOP_ISLOCKED(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_islocked_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_islocked_desc.vdesc_call);
 Assert(c<>nil,'VOP_ISLOCKED');
 a.a_gen:=@vop_islocked_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_islocked_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_LOOKUP(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname):Integer;
var
 c:Pointer;
 a:vop_lookup_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_lookup_desc.vdesc_call);
 Assert(c<>nil,'VOP_LOOKUP');
 a.a_gen:=@vop_lookup_desc;
 a.a_dvp:=dvp;
 a.a_vpp:=vpp;
 a.a_cnp:=cnp;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_lookup_t(c)(@a);
 VFS_EPILOGUE(s);
end;

procedure vop_create_post(ap:p_vop_create_args;rc:Integer); external;

function VOP_CREATE(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
var
 c:Pointer;
 a:vop_create_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_create_desc.vdesc_call);
 Assert(c<>nil,'VOP_CREATE');
 a.a_gen:=@vop_create_desc;
 a.a_dvp:=dvp;
 a.a_vpp:=vpp;
 a.a_cnp:=cnp;
 a.a_vap:=vap;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_create_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_create_post(@a,Result);
end;

function VOP_WHITEOUT(dvp:p_vnode;cnp:p_componentname;flags:Integer):Integer;
var
 c:Pointer;
 a:vop_whiteout_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_whiteout_desc.vdesc_call);
 Assert(c<>nil,'VOP_WHITEOUT');
 a.a_gen  :=@vop_whiteout_desc;
 a.a_dvp  :=dvp;
 a.a_cnp  :=cnp;
 a.a_flags:=flags;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_whiteout_t(c)(@a);
 VFS_EPILOGUE(s);
end;

procedure vop_mknod_post(ap:p_vop_mknod_args;rc:Integer); external;

function VOP_MKNOD(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
var
 c:Pointer;
 a:vop_mknod_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_mknod_desc.vdesc_call);
 Assert(c<>nil,'VOP_MKNOD');
 a.a_gen:=@vop_mknod_desc;
 a.a_dvp:=dvp;
 a.a_vpp:=vpp;
 a.a_cnp:=cnp;
 a.a_vap:=vap;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_mknod_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_mknod_post(@a,Result);
end;

function VOP_OPEN(vp:p_vnode;mode:Integer;fp:p_file):Integer;
var
 c:Pointer;
 a:vop_open_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_open_desc.vdesc_call);
 Assert(c<>nil,'VOP_OPEN');
 a.a_gen :=@vop_open_desc;
 a.a_vp  :=vp;
 a.a_mode:=mode;
 a.a_fp  :=fp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_open_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_CLOSE(vp:p_vnode;fflag:Integer):Integer;
var
 c:Pointer;
 a:vop_close_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_close_desc.vdesc_call);
 Assert(c<>nil,'VOP_CLOSE');
 a.a_gen  :=@vop_close_desc;
 a.a_vp   :=vp;
 a.a_fflag:=fflag;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_close_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_ACCESS(vp:p_vnode;accmode:accmode_t):Integer;
var
 c:Pointer;
 a:vop_access_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_access_desc.vdesc_call);
 Assert(c<>nil,'VOP_ACCESS');
 a.a_gen    :=@vop_access_desc;
 a.a_vp     :=vp;
 a.a_accmode:=accmode;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_access_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_ACCESSX(vp:p_vnode;accmode:accmode_t):Integer;
var
 c:Pointer;
 a:vop_accessx_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_accessx_desc.vdesc_call);
 Assert(c<>nil,'VOP_ACCESSX');
 a.a_gen    :=@vop_accessx_desc;
 a.a_vp     :=vp;
 a.a_accmode:=accmode;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_accessx_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_GETATTR(vp:p_vnode;vap:p_vattr):Integer;
var
 c:Pointer;
 a:vop_getattr_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_getattr_desc.vdesc_call);
 Assert(c<>nil,'VOP_GETATTR');
 a.a_gen:=@vop_getattr_desc;
 a.a_vp :=vp;
 a.a_vap:=vap;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_getattr_t(c)(@a);
 VFS_EPILOGUE(s);
end;

procedure vop_setattr_post(ap:p_vop_setattr_args;rc:Integer); external;

function VOP_SETATTR(vp:p_vnode;vap:p_vattr):Integer;
var
 c:Pointer;
 a:vop_setattr_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_setattr_desc.vdesc_call);
 Assert(c<>nil,'VOP_SETATTR');
 a.a_gen:=@vop_setattr_desc;
 a.a_vp :=vp;
 a.a_vap:=vap;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_setattr_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_setattr_post(@a,Result);
end;

function VOP_MARKATIME(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_markatime_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_markatime_desc.vdesc_call);
 Assert(c<>nil,'VOP_MARKATIME');
 a.a_gen:=@vop_markatime_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_markatime_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_READ(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer;
var
 c:Pointer;
 a:vop_read_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_read_desc.vdesc_call);
 Assert(c<>nil,'VOP_READ');
 a.a_gen   :=@vop_read_desc;
 a.a_vp    :=vp;
 a.a_uio   :=uio;
 a.a_ioflag:=ioflag;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_read_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function  VOP_WRITE_PRE(ap:p_vop_write_args;var osize,ooffset:Int64):Integer; external;
procedure VOP_WRITE_POST(ap:p_vop_write_args;ret:Integer;var osize,ooffset:Int64); external;

function VOP_WRITE(vp:p_vnode;uio:p_uio;ioflag:Integer):Integer;
var
 osize,ooffset:Int64;
 c:Pointer;
 a:vop_write_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_write_desc.vdesc_call);
 Assert(c<>nil,'VOP_WRITE');
 a.a_gen   :=@vop_write_desc;
 a.a_vp    :=vp;
 a.a_uio   :=uio;
 a.a_ioflag:=ioflag;
 osize  :=0;
 ooffset:=0;
 VOP_WRITE_PRE(@a,osize,ooffset);
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_write_t(c)(@a);
 VFS_EPILOGUE(s);
 VOP_WRITE_POST(@a,Result,osize,ooffset);
end;

function VOP_IOCTL(vp:p_vnode;command:PtrUint;data:Pointer;fflag:Integer):Integer;
var
 c:Pointer;
 a:vop_ioctl_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_ioctl_desc.vdesc_call);
 Assert(c<>nil,'VOP_IOCTL');
 a.a_gen    :=@vop_ioctl_desc;
 a.a_vp     :=vp;
 a.a_command:=command;
 a.a_data   :=data;
 a.a_fflag  :=fflag;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_ioctl_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_POLL(vp:p_vnode;events:Integer):Integer;
var
 c:Pointer;
 a:vop_poll_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_poll_desc.vdesc_call);
 Assert(c<>nil,'VOP_POLL');
 a.a_gen   :=@vop_poll_desc;
 a.a_vp    :=vp;
 a.a_events:=events;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_poll_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_KQFILTER(vp:p_vnode;kn:p_knote):Integer;
var
 c:Pointer;
 a:vop_kqfilter_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_kqfilter_desc.vdesc_call);
 Assert(c<>nil,'VOP_KQFILTER');
 a.a_gen:=@vop_kqfilter_desc;
 a.a_vp :=vp;
 a.a_kn :=kn;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_kqfilter_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_REVOKE(vp:p_vnode;flags:Integer):Integer;
var
 c:Pointer;
 a:vop_revoke_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_revoke_desc.vdesc_call);
 Assert(c<>nil,'VOP_REVOKE');
 a.a_gen  :=@vop_revoke_desc;
 a.a_vp   :=vp;
 a.a_flags:=flags;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_revoke_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_FSYNC(vp:p_vnode;waitfor:Integer):Integer;
var
 c:Pointer;
 a:vop_fsync_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_fsync_desc.vdesc_call);
 Assert(c<>nil,'VOP_FSYNC');
 a.a_gen    :=@vop_fsync_desc;
 a.a_vp     :=vp;
 a.a_waitfor:=waitfor;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_fsync_t(c)(@a);
 VFS_EPILOGUE(s);
end;

procedure vop_remove_post(ap:p_vop_remove_args;rc:Integer); external;

function VOP_REMOVE(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
var
 c:Pointer;
 a:vop_remove_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_remove_desc.vdesc_call);
 Assert(c<>nil,'VOP_REMOVE');
 a.a_gen:=@vop_remove_desc;
 a.a_dvp:=dvp;
 a.a_vp :=vp;
 a.a_cnp:=cnp;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_remove_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_remove_post(@a,Result);
end;

procedure vop_link_post(ap:p_vop_link_args;rc:Integer); external;

function VOP_LINK(tdvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
var
 c:Pointer;
 a:vop_link_args;
 s:Boolean;
begin
 c:=get_vp_cb(tdvp,vop_link_desc.vdesc_call);
 Assert(c<>nil,'VOP_LINK');
 a.a_gen :=@vop_link_desc;
 a.a_tdvp:=tdvp;
 a.a_vp  :=vp;
 a.a_cnp :=cnp;
 s:=VFS_PROLOGUE(tdvp^.v_mount);
 Result:=vop_link_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_link_post(@a,Result);
end;

procedure vop_rename_pre (ap:p_vop_rename_args); external;
procedure vop_rename_post(ap:p_vop_rename_args;rc:Integer); external;

function VOP_RENAME(fdvp:p_vnode;fvp:p_vnode;fcnp:p_componentname;tdvp:p_vnode;tvp:p_vnode;tcnp:p_componentname):Integer;
var
 c:Pointer;
 a:vop_rename_args;
 s:Boolean;
begin
 c:=get_vp_cb(fdvp,vop_rename_desc.vdesc_call);
 Assert(c<>nil,'VOP_RENAME');
 a.a_gen :=@vop_rename_desc;
 a.a_fdvp:=fdvp;
 a.a_fvp :=fvp;
 a.a_fcnp:=fcnp;
 a.a_tdvp:=tdvp;
 a.a_tvp :=tvp;
 a.a_tcnp:=tcnp;
 vop_rename_pre(@a);
 s:=VFS_PROLOGUE(fdvp^.v_mount);
 Result:=vop_rename_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_rename_post(@a,Result);
end;

procedure vop_mkdir_post(ap:p_vop_mkdir_args;rc:Integer); external;

function VOP_MKDIR(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr):Integer;
var
 c:Pointer;
 a:vop_mkdir_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_mkdir_desc.vdesc_call);
 Assert(c<>nil,'VOP_MKDIR');
 a.a_gen:=@vop_mkdir_desc;
 a.a_dvp:=dvp;
 a.a_vpp:=vpp;
 a.a_cnp:=cnp;
 a.a_vap:=vap;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_mkdir_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_mkdir_post(@a,Result);
end;

procedure vop_rmdir_post(ap:p_vop_rmdir_args;rc:Integer); external;

function VOP_RMDIR(dvp:p_vnode;vp:p_vnode;cnp:p_componentname):Integer;
var
 c:Pointer;
 a:vop_rmdir_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_rmdir_desc.vdesc_call);
 Assert(c<>nil,'VOP_RMDIR');
 a.a_gen:=@vop_rmdir_desc;
 a.a_dvp:=dvp;
 a.a_vp :=vp;
 a.a_cnp:=cnp;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_rmdir_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_rmdir_post(@a,Result);
end;

procedure vop_symlink_post(ap:p_vop_symlink_args;rc:Integer); external;

function VOP_SYMLINK(dvp:p_vnode;vpp:pp_vnode;cnp:p_componentname;vap:p_vattr;target:PChar):Integer;
var
 c:Pointer;
 a:vop_symlink_args;
 s:Boolean;
begin
 c:=get_vp_cb(dvp,vop_symlink_desc.vdesc_call);
 Assert(c<>nil,'VOP_SYMLINK');
 a.a_gen   :=@vop_symlink_desc;
 a.a_dvp   :=dvp;
 a.a_vpp   :=vpp;
 a.a_cnp   :=cnp;
 a.a_vap   :=vap;
 a.a_target:=target;
 s:=VFS_PROLOGUE(dvp^.v_mount);
 Result:=vop_symlink_t(c)(@a);
 VFS_EPILOGUE(s);
 vop_symlink_post(@a,Result);
end;

function VOP_READDIR(vp:p_vnode;uio:p_uio;eofflag:PInteger;ncookies:PInteger;cookies:PPPtrUint):Integer;
var
 c:Pointer;
 a:vop_readdir_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_readdir_desc.vdesc_call);
 Assert(c<>nil,'VOP_READDIR');
 a.a_gen     :=@vop_readdir_desc;
 a.a_vp      :=vp;
 a.a_uio     :=uio;
 a.a_eofflag :=eofflag;
 a.a_ncookies:=ncookies;
 a.a_cookies :=cookies;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_readdir_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_READLINK(vp:p_vnode;uio:p_uio):Integer;
var
 c:Pointer;
 a:vop_readlink_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_readlink_desc.vdesc_call);
 Assert(c<>nil,'VOP_READLINK');
 a.a_gen:=@vop_readlink_desc;
 a.a_vp :=vp;
 a.a_uio:=uio;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_readlink_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_INACTIVE(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_inactive_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_inactive_desc.vdesc_call);
 Assert(c<>nil,'VOP_INACTIVE');
 a.a_gen:=@vop_inactive_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_inactive_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_RECLAIM(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_reclaim_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_reclaim_desc.vdesc_call);
 Assert(c<>nil,'VOP_RECLAIM');
 a.a_gen:=@vop_reclaim_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_reclaim_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_LOCK(vp:p_vnode;flags:Integer;_file:PChar;line:Integer):Integer;
var
 c:Pointer;
 a:vop_lock1_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_lock1_desc.vdesc_call);
 Assert(c<>nil,'VOP_LOCK');
 a.a_gen  :=@vop_lock1_desc;
 a.a_vp   :=vp;
 a.a_flags:=flags;
 a.a_file :=_file;
 a.a_line :=line;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_lock1_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_UNLOCK(vp:p_vnode;flags:Integer):Integer;
var
 c:Pointer;
 a:vop_unlock_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_unlock_desc.vdesc_call);
 Assert(c<>nil,'VOP_UNLOCK');
 a.a_gen  :=@vop_unlock_desc;
 a.a_vp   :=vp;
 a.a_flags:=flags;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_unlock_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_BMAP(vp:p_vnode;bn:daddr_t;bop:pp_bufobj;bnp:p_daddr_t;runp:PInteger;runb:PInteger):Integer;
var
 c:Pointer;
 a:vop_bmap_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_bmap_desc.vdesc_call);
 Assert(c<>nil,'VOP_BMAP');
 a.a_gen :=@vop_bmap_desc;
 a.a_vp  :=vp;
 a.a_bn  :=bn;
 a.a_bop :=bop;
 a.a_bnp :=bnp;
 a.a_runp:=runp;
 a.a_runb:=runb;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_bmap_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_STRATEGY(vp:p_vnode;bp:p_buf):Integer;
var
 c:Pointer;
 a:vop_strategy_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_strategy_desc.vdesc_call);
 Assert(c<>nil,'VOP_STRATEGY');
 a.a_gen:=@vop_strategy_desc;
 a.a_vp :=vp;
 a.a_bp :=bp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_strategy_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_GETWRITEMOUNT(vp:p_vnode;mpp:pp_mount):Integer;
var
 c:Pointer;
 a:vop_getwritemount_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_getwritemount_desc.vdesc_call);
 Assert(c<>nil,'VOP_GETWRITEMOUNT');
 a.a_gen:=@vop_getwritemount_desc;
 a.a_vp :=vp;
 a.a_mpp:=mpp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_getwritemount_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_PRINT(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_print_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_print_desc.vdesc_call);
 Assert(c<>nil,'VOP_PRINT');
 a.a_gen:=@vop_print_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_print_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_PATHCONF(vp:p_vnode;name:Integer;retval:PPtrUint):Integer;
var
 c:Pointer;
 a:vop_pathconf_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_pathconf_desc.vdesc_call);
 Assert(c<>nil,'VOP_PATHCONF');
 a.a_gen   :=@vop_pathconf_desc;
 a.a_vp    :=vp;
 a.a_name  :=name;
 a.a_retval:=retval;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_pathconf_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_ADVLOCK(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer):Integer;
var
 c:Pointer;
 a:vop_advlock_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_advlock_desc.vdesc_call);
 Assert(c<>nil,'VOP_ADVLOCK');
 a.a_gen  :=@vop_advlock_desc;
 a.a_vp   :=vp;
 a.a_id   :=id;
 a.a_op   :=op;
 a.a_fl   :=fl;
 a.a_flags:=flags;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_advlock_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_ADVLOCKASYNC(vp:p_vnode;id:Pointer;op:Integer;fl:p_flock;flags:Integer;task:p_task;cookiep:PPointer):Integer;
var
 c:Pointer;
 a:vop_advlockasync_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_advlockasync_desc.vdesc_call);
 Assert(c<>nil,'VOP_ADVLOCKASYNC');
 a.a_gen    :=@vop_advlockasync_desc;
 a.a_vp     :=vp;
 a.a_id     :=id;
 a.a_op     :=op;
 a.a_fl     :=fl;
 a.a_flags  :=flags;
 a.a_task   :=task;
 a.a_cookiep:=cookiep;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_advlockasync_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_ADVLOCKPURGE(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_advlockpurge_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_advlockpurge_desc.vdesc_call);
 Assert(c<>nil,'VOP_ADVLOCKPURGE');
 a.a_gen:=@vop_advlockpurge_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_advlockpurge_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_REALLOCBLKS(vp:p_vnode;buflist:p_cluster_save):Integer;
var
 c:Pointer;
 a:vop_reallocblks_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_reallocblks_desc.vdesc_call);
 Assert(c<>nil,'VOP_REALLOCBLKS');
 a.a_gen    :=@vop_reallocblks_desc;
 a.a_vp     :=vp;
 a.a_buflist:=buflist;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_reallocblks_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_GETPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;reqpage:Integer;offset:PtrUint):Integer;
var
 c:Pointer;
 a:vop_getpages_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_getpages_desc.vdesc_call);
 Assert(c<>nil,'VOP_GETPAGES');
 a.a_gen    :=@vop_getpages_desc;
 a.a_vp     :=vp;
 a.a_m      :=m;
 a.a_count  :=count;
 a.a_reqpage:=reqpage;
 a.a_offset :=offset;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_getpages_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_PUTPAGES(vp:p_vnode;m:p_vm_page_t;count:Integer;sync:Integer;rtvals:PInteger;offset:PtrUint):Integer;
var
 c:Pointer;
 a:vop_putpages_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_putpages_desc.vdesc_call);
 Assert(c<>nil,'VOP_PUTPAGES');
 a.a_gen   :=@vop_putpages_desc;
 a.a_vp    :=vp;
 a.a_m     :=m;
 a.a_count :=count;
 a.a_sync  :=sync;
 a.a_rtvals:=rtvals;
 a.a_offset:=offset;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_putpages_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_VPTOFH(vp:p_vnode;fhp:p_fid):Integer;
var
 c:Pointer;
 a:vop_vptofh_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_vptofh_desc.vdesc_call);
 Assert(c<>nil,'VOP_VPTOFH');
 a.a_gen:=@vop_vptofh_desc;
 a.a_vp :=vp;
 a.a_fhp:=fhp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_vptofh_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_VPTOCNP(vp:p_vnode;vpp:pp_vnode;buf:PChar;buflen:PInteger):Integer;
var
 c:Pointer;
 a:vop_vptocnp_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_vptocnp_desc.vdesc_call);
 Assert(c<>nil,'VOP_VPTOCNP');
 a.a_gen   :=@vop_vptocnp_desc;
 a.a_vp    :=vp;
 a.a_vpp   :=vpp;
 a.a_buf   :=buf;
 a.a_buflen:=buflen;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_vptocnp_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_ALLOCATE(vp:p_vnode;offset:PPtrUint;len:PPtrUint):Integer;
var
 c:Pointer;
 a:vop_allocate_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_allocate_desc.vdesc_call);
 Assert(c<>nil,'VOP_ALLOCATE');
 a.a_gen   :=@vop_allocate_desc;
 a.a_vp    :=vp;
 a.a_offset:=offset;
 a.a_len   :=len;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_allocate_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_UNP_BIND(vp:p_vnode;socket:p_socket):Integer;
var
 c:Pointer;
 a:vop_unp_bind_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_unp_bind_desc.vdesc_call);
 Assert(c<>nil,'VOP_UNP_BIND');
 a.a_gen   :=@vop_unp_bind_desc;
 a.a_vp    :=vp;
 a.a_socket:=socket;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_unp_bind_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_UNP_CONNECT(vp:p_vnode;socket:pp_socket):Integer;
var
 c:Pointer;
 a:vop_unp_connect_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_unp_connect_desc.vdesc_call);
 Assert(c<>nil,'VOP_UNP_CONNECT');
 a.a_gen   :=@vop_unp_connect_desc;
 a.a_vp    :=vp;
 a.a_socket:=socket;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_unp_connect_t(c)(@a);
 VFS_EPILOGUE(s);
end;

function VOP_UNP_DETACH(vp:p_vnode):Integer;
var
 c:Pointer;
 a:vop_unp_detach_args;
 s:Boolean;
begin
 c:=get_vp_cb(vp,vop_unp_detach_desc.vdesc_call);
 Assert(c<>nil,'VOP_UNP_DETACH');
 a.a_gen:=@vop_unp_detach_desc;
 a.a_vp :=vp;
 s:=VFS_PROLOGUE(vp^.v_mount);
 Result:=vop_unp_detach_t(c)(@a);
 VFS_EPILOGUE(s);
end;

end.

