BSD CMs: Don't call nonexistent afs_FlushVS in afs_vop_reclaim
[openafs.git] / src / afs / OBSD / osi_vnodeops.c
index 0b62291..b45ba6c 100644 (file)
@@ -98,8 +98,6 @@ NONINFRINGEMENT.
 #include <afsconfig.h>
 #include "afs/param.h"
 
-RCSID
-    ("$Header$");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afs/afsincludes.h"   /* Afs-based standard headers */
@@ -107,94 +105,97 @@ RCSID
 
 #include <sys/malloc.h>
 #include <sys/namei.h>
+#ifdef AFS_OBSD36_ENV
+#include <sys/pool.h>
+#endif
 
 #include "afs/afs_cbqueue.h"
 #include "afs/nfsclient.h"
 #include "afs/afs_osidnlc.h"
 
-#ifdef AFS_DISCON_ENV
-extern int afs_FlushVS(struct vcache *tvc);
-#endif
-
 #define M_AFSNODE (M_TEMP-1)   /* XXX */
 
-int afs_nbsd_lookup(struct vop_lookup_args *);
-int afs_nbsd_create(struct vop_create_args *);
-int afs_nbsd_mknod(struct vop_mknod_args *);
-int afs_nbsd_open(struct vop_open_args *);
-int afs_nbsd_close(struct vop_close_args *);
-int afs_nbsd_access(struct vop_access_args *);
-int afs_nbsd_getattr(struct vop_getattr_args *);
-int afs_nbsd_setattr(struct vop_setattr_args *);
-int afs_nbsd_read(struct vop_read_args *);
-int afs_nbsd_write(struct vop_write_args *);
-int afs_nbsd_ioctl(struct vop_ioctl_args *);
-int afs_nbsd_fsync(struct vop_fsync_args *);
-int afs_nbsd_remove(struct vop_remove_args *);
-int afs_nbsd_link(struct vop_link_args *);
-int afs_nbsd_rename(struct vop_rename_args *);
-int afs_nbsd_mkdir(struct vop_mkdir_args *);
-int afs_nbsd_rmdir(struct vop_rmdir_args *);
-int afs_nbsd_symlink(struct vop_symlink_args *);
-int afs_nbsd_readdir(struct vop_readdir_args *);
-int afs_nbsd_readlink(struct vop_readlink_args *);
-extern int ufs_abortop(struct vop_abortop_args *);
-int afs_nbsd_inactive(struct vop_inactive_args *);
-int afs_nbsd_reclaim(struct vop_reclaim_args *);
-int afs_nbsd_lock(struct vop_lock_args *);
-int afs_nbsd_unlock(struct vop_unlock_args *);
-int afs_nbsd_bmap(struct vop_bmap_args *);
-int afs_nbsd_strategy(struct vop_strategy_args *);
-int afs_nbsd_print(struct vop_print_args *);
-int afs_nbsd_islocked(struct vop_islocked_args *);
-int afs_nbsd_pathconf(struct vop_pathconf_args *);
-int afs_nbsd_advlock(struct vop_advlock_args *);
-
-#define afs_nbsd_opnotsupp \
-       ((int (*) __P((struct  vop_reallocblks_args *)))eopnotsupp)
-#define afs_nbsd_reallocblks afs_nbsd_opnotsupp
+int afs_obsd_lookup(void *);
+int afs_obsd_create(void *);
+int afs_obsd_mknod(void *);
+int afs_obsd_open(void *);
+int afs_obsd_close(void *);
+int afs_obsd_access(void *);
+int afs_obsd_getattr(void *);
+int afs_obsd_setattr(void *);
+int afs_obsd_read(void *);
+int afs_obsd_write(void *);
+int afs_obsd_ioctl(void *);
+int afs_obsd_select(void *);
+int afs_obsd_fsync(void *);
+int afs_obsd_remove(void *);
+int afs_obsd_link(void *);
+int afs_obsd_rename(void *);
+int afs_obsd_mkdir(void *);
+int afs_obsd_rmdir(void *);
+int afs_obsd_symlink(void *);
+int afs_obsd_readdir(void *);
+int afs_obsd_readlink(void *);
+int afs_obsd_inactive(void *);
+int afs_obsd_reclaim(void *);
+int afs_obsd_lock(void *);
+int afs_obsd_unlock(void *);
+int afs_obsd_bmap(void *);
+int afs_obsd_strategy(void *);
+int afs_obsd_print(void *);
+int afs_obsd_islocked(void *);
+int afs_obsd_pathconf(void *);
+int afs_obsd_advlock(void *);
+
+#define afs_obsd_opnotsupp \
+       ((int (*) __P((void *)))eopnotsupp)
+#define afs_obsd_reallocblks afs_obsd_opnotsupp
 
 /* Global vfs data structures for AFS. */
 int (**afs_vnodeop_p) __P((void *));
 struct vnodeopv_entry_desc afs_vnodeop_entries[] = {
+#ifdef AFS_OBSD44_ENV /* feel free to zero in on this */
+  {&vop_default_desc, eopnotsupp},
+#else
     {&vop_default_desc, vn_default_error},
-    {&vop_lookup_desc, afs_nbsd_lookup},       /* lookup */
-    {&vop_create_desc, afs_nbsd_create},       /* create */
-    {&vop_mknod_desc, afs_nbsd_mknod},         /* mknod */
-    {&vop_open_desc, afs_nbsd_open},           /* open */
-    {&vop_close_desc, afs_nbsd_close},         /* close */
-    {&vop_access_desc, afs_nbsd_access},       /* access */
-    {&vop_getattr_desc, afs_nbsd_getattr},     /* getattr */
-    {&vop_setattr_desc, afs_nbsd_setattr},     /* setattr */
-    {&vop_read_desc, afs_nbsd_read},           /* read */
-    {&vop_write_desc, afs_nbsd_write},         /* write */
-    {&vop_ioctl_desc, afs_nbsd_ioctl},         /* XXX ioctl */
+#endif
+    {&vop_lookup_desc, afs_obsd_lookup},       /* lookup */
+    {&vop_create_desc, afs_obsd_create},       /* create */
+    {&vop_mknod_desc, afs_obsd_mknod},         /* mknod */
+    {&vop_open_desc, afs_obsd_open},           /* open */
+    {&vop_close_desc, afs_obsd_close},         /* close */
+    {&vop_access_desc, afs_obsd_access},       /* access */
+    {&vop_getattr_desc, afs_obsd_getattr},     /* getattr */
+    {&vop_setattr_desc, afs_obsd_setattr},     /* setattr */
+    {&vop_read_desc, afs_obsd_read},           /* read */
+    {&vop_write_desc, afs_obsd_write},         /* write */
+    {&vop_ioctl_desc, afs_obsd_ioctl},         /* XXX ioctl */
 #ifdef AFS_OBSD35_ENV
-    {&vop_poll_desc, seltrue},                 /* select */
+    {&vop_poll_desc, afs_obsd_select},         /* select */
 #else
-    {&vop_select_desc, seltrue},               /* select */
+    {&vop_select_desc, afs_obsd_select},       /* select */
 #endif
-    {&vop_fsync_desc, afs_nbsd_fsync},         /* fsync */
-    {&vop_remove_desc, afs_nbsd_remove},       /* remove */
-    {&vop_link_desc, afs_nbsd_link},           /* link */
-    {&vop_rename_desc, afs_nbsd_rename},       /* rename */
-    {&vop_mkdir_desc, afs_nbsd_mkdir},         /* mkdir */
-    {&vop_rmdir_desc, afs_nbsd_rmdir},         /* rmdir */
-    {&vop_symlink_desc, afs_nbsd_symlink},     /* symlink */
-    {&vop_readdir_desc, afs_nbsd_readdir},     /* readdir */
-    {&vop_readlink_desc, afs_nbsd_readlink},   /* readlink */
+    {&vop_fsync_desc, afs_obsd_fsync},         /* fsync */
+    {&vop_remove_desc, afs_obsd_remove},       /* remove */
+    {&vop_link_desc, afs_obsd_link},           /* link */
+    {&vop_rename_desc, afs_obsd_rename},       /* rename */
+    {&vop_mkdir_desc, afs_obsd_mkdir},         /* mkdir */
+    {&vop_rmdir_desc, afs_obsd_rmdir},         /* rmdir */
+    {&vop_symlink_desc, afs_obsd_symlink},     /* symlink */
+    {&vop_readdir_desc, afs_obsd_readdir},     /* readdir */
+    {&vop_readlink_desc, afs_obsd_readlink},   /* readlink */
     {&vop_abortop_desc, vop_generic_abortop},  /* abortop */
-    {&vop_inactive_desc, afs_nbsd_inactive},   /* inactive */
-    {&vop_reclaim_desc, afs_nbsd_reclaim},     /* reclaim */
-    {&vop_lock_desc, afs_nbsd_lock},           /* lock */
-    {&vop_unlock_desc, afs_nbsd_unlock},       /* unlock */
-    {&vop_bmap_desc, afs_nbsd_bmap},           /* bmap */
-    {&vop_strategy_desc, afs_nbsd_strategy},   /* strategy */
-    {&vop_print_desc, afs_nbsd_print},         /* print */
-    {&vop_islocked_desc, afs_nbsd_islocked},   /* islocked */
-    {&vop_pathconf_desc, afs_nbsd_pathconf},   /* pathconf */
-    {&vop_advlock_desc, afs_nbsd_advlock},     /* advlock */
-    {&vop_reallocblks_desc, afs_nbsd_reallocblks},     /* reallocblks */
+    {&vop_inactive_desc, afs_obsd_inactive},   /* inactive */
+    {&vop_reclaim_desc, afs_obsd_reclaim},     /* reclaim */
+    {&vop_lock_desc, afs_obsd_lock},           /* lock */
+    {&vop_unlock_desc, afs_obsd_unlock},       /* unlock */
+    {&vop_bmap_desc, afs_obsd_bmap},           /* bmap */
+    {&vop_strategy_desc, afs_obsd_strategy},   /* strategy */
+    {&vop_print_desc, afs_obsd_print},         /* print */
+    {&vop_islocked_desc, afs_obsd_islocked},   /* islocked */
+    {&vop_pathconf_desc, afs_obsd_pathconf},   /* pathconf */
+    {&vop_advlock_desc, afs_obsd_advlock},     /* advlock */
+    {&vop_reallocblks_desc, afs_obsd_reallocblks},     /* reallocblks */
     {&vop_bwrite_desc, vop_generic_bwrite},
     {(struct vnodeop_desc *)NULL, (int (*)__P((void *)))NULL}
 };
@@ -204,23 +205,29 @@ struct vnodeopv_desc afs_vnodeop_opv_desc =
 #define GETNAME()      \
     struct componentname *cnp = ap->a_cnp; \
     char *name; \
-    MALLOC(name, char *, cnp->cn_namelen+1, M_TEMP, M_WAITOK); \
+    BSD_KMALLOC(name, char *, cnp->cn_namelen+1, M_TEMP, M_WAITOK); \
     bcopy(cnp->cn_nameptr, name, cnp->cn_namelen); \
     name[cnp->cn_namelen] = '\0'
 
-#define DROPNAME() FREE(name, M_TEMP)
+#define DROPNAME() BSD_KFREE(name, M_TEMP)
+
+#ifdef AFS_OBSD36_ENV
+#define DROPCNP(cnp) pool_put(&namei_pool, (cnp)->cn_pnbuf)
+#else
+#define DROPCNP(cnp) FREE((cnp)->cn_pnbuf, M_NAMEI)
+#endif
 
 int afs_debug;
 
 int
-afs_nbsd_lookup(ap)
-     struct vop_lookup_args    /* {
+afs_obsd_lookup(void *v)
+{
+    struct vop_lookup_args     /* {
                                 * struct vnodeop_desc * a_desc;
                                 * struct vnode *a_dvp;
                                 * struct vnode **a_vpp;
                                 * struct componentname *a_cnp;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
     struct vcache *vcp;
     struct vnode *vp, *dvp;
@@ -294,14 +301,14 @@ afs_nbsd_lookup(ap)
 }
 
 int
-afs_nbsd_create(ap)
-     struct vop_create_args    /* {
+afs_obsd_create(void *v)
+{
+    struct vop_create_args     /* {
                                 * struct vnode *a_dvp;
                                 * struct vnode **a_vpp;
                                 * struct componentname *a_cnp;
                                 * struct vattr *a_vap;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code = 0;
     struct vcache *vcp;
     struct vnode *dvp = ap->a_dvp;
@@ -331,7 +338,7 @@ afs_nbsd_create(ap)
        *ap->a_vpp = 0;
 
     if ((cnp->cn_flags & SAVESTART) == 0)
-       FREE(cnp->cn_pnbuf, M_NAMEI);
+       DROPCNP(cnp);
     vput(dvp);
     DROPNAME();
     if (afs_debug & AFSDEB_VNLAYER)
@@ -340,28 +347,28 @@ afs_nbsd_create(ap)
 }
 
 int
-afs_nbsd_mknod(ap)
-     struct vop_mknod_args     /* {
+afs_obsd_mknod(void *v)
+{
+    struct vop_mknod_args      /* {
                                 * struct vnode *a_dvp;
                                 * struct vnode **a_vpp;
                                 * struct componentname *a_cnp;
                                 * struct vattr *a_vap;
-                                * } */ *ap;
-{
-    free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+                                * } */ *ap = v;
+    DROPCNP(ap->a_cnp);
     vput(ap->a_dvp);
     return (ENODEV);
 }
 
 int
-afs_nbsd_open(ap)
-     struct vop_open_args      /* {
+afs_obsd_open(void *v)
+{
+    struct vop_open_args       /* {
                                 * struct vnode *a_vp;
                                 * int  a_mode;
                                 * struct ucred *a_cred;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
     struct vcache *vc = VTOAFS(ap->a_vp);
 
@@ -376,14 +383,14 @@ afs_nbsd_open(ap)
 }
 
 int
-afs_nbsd_close(ap)
-     struct vop_close_args     /* {
+afs_obsd_close(void *v)
+{
+    struct vop_close_args      /* {
                                 * struct vnode *a_vp;
                                 * int  a_fflag;
                                 * struct ucred *a_cred;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -393,14 +400,14 @@ afs_nbsd_close(ap)
 }
 
 int
-afs_nbsd_access(ap)
-     struct vop_access_args    /* {
+afs_obsd_access(void *v)
+{
+    struct vop_access_args     /* {
                                 * struct vnode *a_vp;
                                 * int  a_mode;
                                 * struct ucred *a_cred;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -410,14 +417,14 @@ afs_nbsd_access(ap)
 }
 
 int
-afs_nbsd_getattr(ap)
-     struct vop_getattr_args   /* {
+afs_obsd_getattr(void *v)
+{
+    struct vop_getattr_args    /* {
                                 * struct vnode *a_vp;
                                 * struct vattr *a_vap;
                                 * struct ucred *a_cred;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -427,14 +434,14 @@ afs_nbsd_getattr(ap)
 }
 
 int
-afs_nbsd_setattr(ap)
-     struct vop_setattr_args   /* {
+afs_obsd_setattr(void *v)
+{
+    struct vop_setattr_args    /* {
                                 * struct vnode *a_vp;
                                 * struct vattr *a_vap;
                                 * struct ucred *a_cred;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -444,14 +451,14 @@ afs_nbsd_setattr(ap)
 }
 
 int
-afs_nbsd_read(ap)
-     struct vop_read_args      /* {
+afs_obsd_read(void *v)
+{
+    struct vop_read_args       /* {
                                 * struct vnode *a_vp;
                                 * struct uio *a_uio;
                                 * int a_ioflag;
                                 * struct ucred *a_cred;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -463,14 +470,14 @@ afs_nbsd_read(ap)
 }
 
 int
-afs_nbsd_write(ap)
-     struct vop_write_args     /* {
+afs_obsd_write(void *v)
+{
+    struct vop_write_args      /* {
                                 * struct vnode *a_vp;
                                 * struct uio *a_uio;
                                 * int a_ioflag;
                                 * struct ucred *a_cred;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
 #ifdef UVM
@@ -486,16 +493,16 @@ afs_nbsd_write(ap)
 }
 
 int
-afs_nbsd_ioctl(ap)
-     struct vop_ioctl_args     /* {
+afs_obsd_ioctl(void *v)
+{
+    struct vop_ioctl_args      /* {
                                 * struct vnode *a_vp;
                                 * int  a_command;
                                 * caddr_t  a_data;
                                 * int  a_fflag;
                                 * struct ucred *a_cred;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     /* in case we ever get in here... */
@@ -515,14 +522,20 @@ afs_nbsd_ioctl(ap)
 }
 
 int
-afs_nbsd_fsync(ap)
-     struct vop_fsync_args     /* {
+afs_obsd_select(void *v)
+{
+    return 1;
+}
+
+int
+afs_obsd_fsync(void *v)
+{
+    struct vop_fsync_args      /* {
                                 * struct vnode *a_vp;
                                 * struct ucred *a_cred;
                                 * int a_waitfor;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int wait = ap->a_waitfor == MNT_WAIT;
     struct vnode *vp = ap->a_vp;
     int code;
@@ -535,13 +548,13 @@ afs_nbsd_fsync(ap)
 }
 
 int
-afs_nbsd_remove(ap)
-     struct vop_remove_args    /* {
+afs_obsd_remove(void *v)
+{
+    struct vop_remove_args     /* {
                                 * struct vnode *a_dvp;
                                 * struct vnode *a_vp;
                                 * struct componentname *a_cnp;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
     struct vnode *vp = ap->a_vp;
     struct vnode *dvp = ap->a_dvp;
@@ -555,19 +568,19 @@ afs_nbsd_remove(ap)
     else
        vput(vp);
     vput(dvp);
-    FREE(cnp->cn_pnbuf, M_NAMEI);
+    DROPCNP(cnp);
     DROPNAME();
     return code;
 }
 
 int
-afs_nbsd_link(ap)
-     struct vop_link_args      /* {
+afs_obsd_link(void *v)
+{
+    struct vop_link_args       /* {
                                 * struct vnode *a_vp;
                                 * struct vnode *a_tdvp;
                                 * struct componentname *a_cnp;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
     struct vnode *dvp = ap->a_dvp;
     struct vnode *vp = ap->a_vp;
@@ -591,7 +604,7 @@ afs_nbsd_link(ap)
     AFS_GLOCK();
     code = afs_link(VTOAFS(vp), VTOAFS(dvp), name, cnp->cn_cred);
     AFS_GUNLOCK();
-    FREE(cnp->cn_pnbuf, M_NAMEI);
+    DROPCNP(cnp);
     if (dvp != vp)
        VOP_UNLOCK(vp, 0, curproc);
 
@@ -602,16 +615,16 @@ afs_nbsd_link(ap)
 }
 
 int
-afs_nbsd_rename(ap)
-     struct vop_rename_args    /* {
+afs_obsd_rename(void *v)
+{
+    struct vop_rename_args     /* {
                                 * struct vnode *a_fdvp;
                                 * struct vnode *a_fvp;
                                 * struct componentname *a_fcnp;
                                 * struct vnode *a_tdvp;
                                 * struct vnode *a_tvp;
                                 * struct componentname *a_tcnp;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code = 0;
     struct componentname *fcnp = ap->a_fcnp;
     char *fname;
@@ -672,10 +685,10 @@ afs_nbsd_rename(ap)
     if ((code = vn_lock(fvp, LK_EXCLUSIVE | LK_RETRY, curproc)))
        goto abortit;
 
-    MALLOC(fname, char *, fcnp->cn_namelen + 1, M_TEMP, M_WAITOK);
+    BSD_KMALLOC(fname, char *, fcnp->cn_namelen + 1, M_TEMP, M_WAITOK);
     bcopy(fcnp->cn_nameptr, fname, fcnp->cn_namelen);
     fname[fcnp->cn_namelen] = '\0';
-    MALLOC(tname, char *, tcnp->cn_namelen + 1, M_TEMP, M_WAITOK);
+    BSD_KMALLOC(tname, char *, tcnp->cn_namelen + 1, M_TEMP, M_WAITOK);
     bcopy(tcnp->cn_nameptr, tname, tcnp->cn_namelen);
     tname[tcnp->cn_namelen] = '\0';
 
@@ -687,8 +700,8 @@ afs_nbsd_rename(ap)
     AFS_GUNLOCK();
 
     VOP_UNLOCK(fvp, 0, curproc);
-    FREE(fname, M_TEMP);
-    FREE(tname, M_TEMP);
+    BSD_KFREE(fname, M_TEMP);
+    BSD_KFREE(tname, M_TEMP);
     if (code)
        goto abortit;           /* XXX */
     if (tdvp == tvp)
@@ -703,14 +716,14 @@ afs_nbsd_rename(ap)
 }
 
 int
-afs_nbsd_mkdir(ap)
-     struct vop_mkdir_args     /* {
+afs_obsd_mkdir(void *v)
+{
+    struct vop_mkdir_args      /* {
                                 * struct vnode *a_dvp;
                                 * struct vnode **a_vpp;
                                 * struct componentname *a_cnp;
                                 * struct vattr *a_vap;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     struct vnode *dvp = ap->a_dvp;
     struct vattr *vap = ap->a_vap;
     int code;
@@ -719,7 +732,7 @@ afs_nbsd_mkdir(ap)
     GETNAME();
 #ifdef DIAGNOSTIC
     if ((cnp->cn_flags & HASBUF) == 0)
-       panic("afs_nbsd_mkdir: no name");
+       panic("afs_obsd_mkdir: no name");
 #endif
     AFS_GLOCK();
     code = afs_mkdir(VTOAFS(dvp), name, vap, &vcp, cnp->cn_cred);
@@ -735,20 +748,20 @@ afs_nbsd_mkdir(ap)
        vn_lock(AFSTOV(vcp), LK_EXCLUSIVE | LK_RETRY, curproc);
     } else
        *ap->a_vpp = 0;
+    DROPCNP(cnp);
     DROPNAME();
-    FREE(cnp->cn_pnbuf, M_NAMEI);
     vput(dvp);
     return code;
 }
 
 int
-afs_nbsd_rmdir(ap)
-     struct vop_rmdir_args     /* {
+afs_obsd_rmdir(void *v)
+{
+    struct vop_rmdir_args      /* {
                                 * struct vnode *a_dvp;
                                 * struct vnode *a_vp;
                                 * struct componentname *a_cnp;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
     struct vnode *vp = ap->a_vp;
     struct vnode *dvp = ap->a_dvp;
@@ -757,7 +770,7 @@ afs_nbsd_rmdir(ap)
     if (dvp == vp) {
        vrele(dvp);
        vput(vp);
-       FREE(cnp->cn_pnbuf, M_NAMEI);
+       DROPCNP(cnp);
        DROPNAME();
        return (EINVAL);
     }
@@ -772,15 +785,15 @@ afs_nbsd_rmdir(ap)
 }
 
 int
-afs_nbsd_symlink(ap)
-     struct vop_symlink_args   /* {
+afs_obsd_symlink(void *v)
+{
+    struct vop_symlink_args    /* {
                                 * struct vnode *a_dvp;
                                 * struct vnode **a_vpp;
                                 * struct componentname *a_cnp;
                                 * struct vattr *a_vap;
                                 * char *a_target;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     struct vnode *dvp = ap->a_dvp;
     int code;
     /* NFS ignores a_vpp; so do we. */
@@ -790,23 +803,23 @@ afs_nbsd_symlink(ap)
     code =
        afs_symlink(VTOAFS(dvp), name, ap->a_vap, ap->a_target, cnp->cn_cred);
     AFS_GUNLOCK();
+    DROPCNP(cnp);
     DROPNAME();
-    FREE(cnp->cn_pnbuf, M_NAMEI);
     vput(dvp);
     return code;
 }
 
 int
-afs_nbsd_readdir(ap)
-     struct vop_readdir_args   /* {
+afs_obsd_readdir(void *v)
+{
+    struct vop_readdir_args    /* {
                                 * struct vnode *a_vp;
                                 * struct uio *a_uio;
                                 * struct ucred *a_cred;
                                 * int *a_eofflag;
                                 * int *a_ncookies;
                                 * u_long **a_cookies;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -825,13 +838,13 @@ afs_nbsd_readdir(ap)
 }
 
 int
-afs_nbsd_readlink(ap)
-     struct vop_readlink_args  /* {
+afs_obsd_readlink(void *v)
+{
+    struct vop_readlink_args   /* {
                                 * struct vnode *a_vp;
                                 * struct uio *a_uio;
                                 * struct ucred *a_cred;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();
@@ -843,11 +856,11 @@ afs_nbsd_readlink(ap)
 extern int prtactive;
 
 int
-afs_nbsd_inactive(ap)
-     struct vop_inactive_args  /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_obsd_inactive(void *v)
 {
+    struct vop_inactive_args   /* {
+                                * struct vnode *a_vp;
+                                * } */ *ap = v;
     struct vnode *vp = ap->a_vp;
     struct vcache *vc = VTOAFS(vp);
     int haveGlock = ISAFS_GLOCK();
@@ -855,7 +868,7 @@ afs_nbsd_inactive(ap)
     AFS_STATCNT(afs_inactive);
 
     if (prtactive && vp->v_usecount != 0)
-       vprint("afs_nbsd_inactive(): pushing active", vp);
+       vprint("afs_obsd_inactive(): pushing active", vp);
 
     if (!haveGlock)
        AFS_GLOCK();
@@ -868,94 +881,103 @@ afs_nbsd_inactive(ap)
 }
 
 int
-afs_nbsd_reclaim(ap)
-     struct vop_reclaim_args   /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_obsd_reclaim(void *v)
 {
+    struct vop_reclaim_args    /* {
+                                * struct vnode *a_vp;
+                                * } */ *ap = v;
     int code, slept;
     struct vnode *vp = ap->a_vp;
     struct vcache *avc = VTOAFS(vp);
     int haveGlock = ISAFS_GLOCK();
     int haveVlock = CheckLock(&afs_xvcache);
 
+#if 0
+    printf("reclaim usecount %d\n", vp->v_usecount);
+    /* OK, there are no internal vrefCounts, so there shouldn't
+     * be any more refs here. */
+    vp->v_data = NULL;         /* remove from vnode */
+    avc->v = NULL;             /* also drop the ptr to vnode */
+    return 0;
+#else
     if (!haveGlock)
        AFS_GLOCK();
     if (!haveVlock)
        ObtainWriteLock(&afs_xvcache, 901);
-#ifndef AFS_DISCON_ENV
-    code = afs_FlushVCache(avc, &slept);       /* tosses our stuff from vnode */
-#else
     /* reclaim the vnode and the in-memory vcache, but keep the on-disk vcache */
-    code = afs_FlushVS(avc);
-#endif
+    code = afs_FlushVCache(avc, &slept);
     if (!haveVlock)
        ReleaseWriteLock(&afs_xvcache);
     if (!haveGlock)
        AFS_GUNLOCK();
     return code;
+#endif
 }
 
+#ifdef AFS_OBSD42_ENV
+#define VP_INTERLOCK NULL
+#else
+#define VP_INTERLOCK (&vp->v_interlock)
+#endif
+
 int
-afs_nbsd_lock(ap)
-     struct vop_lock_args      /* {
+afs_obsd_lock(void *v)
+{
+    struct vop_lock_args       /* {
                                 * struct vnode *a_vp;
                                 * int a_flags;
                                 * sturct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     struct vnode *vp = ap->a_vp;
     struct vcache *vc = VTOAFS(vp);
 
     if (!vc)
-       panic("afs_nbsd_lock: null vcache");
-    return lockmgr(&vc->rwlock, ap->a_flags | LK_CANRECURSE, &vp->v_interlock,
-                  ap->a_p);
+       panic("afs_obsd_lock: null vcache");
+    return afs_osi_lockmgr(&vc->rwlock, ap->a_flags | LK_CANRECURSE, VP_INTERLOCK, ap->a_p);
 }
 
 int
-afs_nbsd_unlock(ap)
-     struct vop_unlock_args    /* {
+afs_obsd_unlock(void *v)
+{
+    struct vop_unlock_args     /* {
                                 * struct vnode *a_vp;
                                 * int a_flags;
                                 * struct proc *a_p;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     struct vnode *vp = ap->a_vp;
     struct vcache *vc = VTOAFS(vp);
 
     if (!vc)
-       panic("afs_nbsd_unlock: null vcache");
-    return lockmgr(&vc->rwlock, ap->a_flags | LK_RELEASE, &vp->v_interlock,
-                  ap->a_p);
+       panic("afs_obsd_unlock: null vcache");
+    return afs_osi_lockmgr(&vc->rwlock, ap->a_flags | LK_RELEASE, VP_INTERLOCK, ap->a_p);
 }
 
 int
-afs_nbsd_bmap(ap)
-     struct vop_bmap_args      /* {
+afs_obsd_bmap(void *v)
+{
+    struct vop_bmap_args       /* {
                                 * struct vnode *a_vp;
                                 * daddr_t  a_bn;
                                 * struct vnode **a_vpp;
                                 * daddr_t *a_bnp;
                                 * int *a_runp;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     struct vcache *vcp = VTOAFS(ap->a_vp);
 
     AFS_STATCNT(afs_bmap);
     if (ap->a_bnp)
-       ap->a_bnp = (daddr_t *) (ap->a_bn * (8192 / DEV_BSIZE));
+       *ap->a_bnp = ap->a_bn * btodb(8192);
     if (ap->a_vpp)
        *ap->a_vpp = (vcp) ? AFSTOV(vcp) : NULL;
     return 0;
 }
 
 int
-afs_nbsd_strategy(ap)
-     struct vop_strategy_args  /* {
-                                * struct buf *a_bp;
-                                * } */ *ap;
+afs_obsd_strategy(void *v)
 {
+    struct vop_strategy_args   /* {
+                                * struct buf *a_bp;
+                                * } */ *ap = v;
     struct buf *abp = ap->a_bp;
     struct uio tuio;
     struct iovec tiovec[1];
@@ -970,15 +992,14 @@ afs_nbsd_strategy(ap)
     tuio.afsio_iovcnt = 1;
     tuio.afsio_seg = AFS_UIOSYS;
     tuio.afsio_resid = len;
-    tiovec[0].iov_base = abp->b_un.b_addr;
+    tiovec[0].iov_base = abp->b_data;
     tiovec[0].iov_len = len;
 
     AFS_GLOCK();
     if ((abp->b_flags & B_READ) == B_READ) {
        code = afs_rdwr(tvc, &tuio, UIO_READ, 0, credp);
        if (code == 0 && tuio.afsio_resid > 0)
-           bzero(abp->b_un.b_addr + len - tuio.afsio_resid,
-                 tuio.afsio_resid);
+           bzero(abp->b_data + len - tuio.afsio_resid, tuio.afsio_resid);
     } else
        code = afs_rdwr(tvc, &tuio, UIO_WRITE, 0, credp);
     AFS_GUNLOCK();
@@ -989,28 +1010,28 @@ afs_nbsd_strategy(ap)
 }
 
 int
-afs_nbsd_print(ap)
-     struct vop_print_args     /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_obsd_print(void *v)
 {
+    struct vop_print_args      /* {
+                                * struct vnode *a_vp;
+                                * } */ *ap = v;
     struct vnode *vp = ap->a_vp;
     struct vcache *vc = VTOAFS(ap->a_vp);
 
-    printf("tag %d, fid: %d.%x.%x.%x, ", vp->v_tag, vc->fid.Cell,
-          (int)vc->fid.Fid.Volume, (int)vc->fid.Fid.Vnode,
-          (int)vc->fid.Fid.Unique);
+    printf("tag %d, fid: %d.%x.%x.%x, ", vp->v_tag, vc->f.fid.Cell,
+          (int)vc->f.fid.Fid.Volume, (int)vc->f.fid.Fid.Vnode,
+          (int)vc->f.fid.Fid.Unique);
     lockmgr_printinfo(&vc->rwlock);
     printf("\n");
     return 0;
 }
 
 int
-afs_nbsd_islocked(ap)
-     struct vop_islocked_args  /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_obsd_islocked(void *v)
 {
+    struct vop_islocked_args   /* {
+                                * struct vnode *a_vp;
+                                * } */ *ap = v;
     return lockstatus(&VTOAFS(ap->a_vp)->rwlock);
 }
 
@@ -1018,13 +1039,13 @@ afs_nbsd_islocked(ap)
  * Return POSIX pathconf information applicable to ufs filesystems.
  */
 int
-afs_nbsd_pathconf(ap)
-     struct vop_pathconf_args  /* {
+afs_obsd_pathconf(void *v)
+{
+    struct vop_pathconf_args   /* {
                                 * struct vnode *a_vp;
                                 * int a_name;
                                 * int *a_retval;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     AFS_STATCNT(afs_cntl);
     switch (ap->a_name) {
     case _PC_LINK_MAX:
@@ -1053,21 +1074,21 @@ afs_nbsd_pathconf(ap)
 
 extern int
   afs_lockctl(struct vcache *avc, struct AFS_FLOCK *af, int acmd,
-             struct AFS_UCRED *acred, pid_t clid);
+             afs_ucred_t *acred, pid_t clid);
 
 /*
  * Advisory record locking support (fcntl() POSIX style)
  */
 int
-afs_nbsd_advlock(ap)
-     struct vop_advlock_args   /* {
+afs_obsd_advlock(void *v)
+{
+    struct vop_advlock_args    /* {
                                 * struct vnode *a_vp;
                                 * caddr_t  a_id;
                                 * int  a_op;
                                 * struct flock *a_fl;
                                 * int  a_flags;
-                                * } */ *ap;
-{
+                                * } */ *ap = v;
     int code;
 
     AFS_GLOCK();