obsd44-pass1-20090123
[openafs.git] / src / afs / OBSD / osi_vnodeops.c
index 4715adf..e01b1bf 100644 (file)
@@ -107,6 +107,9 @@ 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"
@@ -118,46 +121,50 @@ extern int afs_FlushVS(struct vcache *tvc);
 
 #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 *);
+int afs_nbsd_lookup(void *);
+int afs_nbsd_create(void *);
+int afs_nbsd_mknod(void *);
+int afs_nbsd_open(void *);
+int afs_nbsd_close(void *);
+int afs_nbsd_access(void *);
+int afs_nbsd_getattr(void *);
+int afs_nbsd_setattr(void *);
+int afs_nbsd_read(void *);
+int afs_nbsd_write(void *);
+int afs_nbsd_ioctl(void *);
+int afs_nbsd_select(void *);
+int afs_nbsd_fsync(void *);
+int afs_nbsd_remove(void *);
+int afs_nbsd_link(void *);
+int afs_nbsd_rename(void *);
+int afs_nbsd_mkdir(void *);
+int afs_nbsd_rmdir(void *);
+int afs_nbsd_symlink(void *);
+int afs_nbsd_readdir(void *);
+int afs_nbsd_readlink(void *);
+int afs_nbsd_inactive(void *);
+int afs_nbsd_reclaim(void *);
+int afs_nbsd_lock(void *);
+int afs_nbsd_unlock(void *);
+int afs_nbsd_bmap(void *);
+int afs_nbsd_strategy(void *);
+int afs_nbsd_print(void *);
+int afs_nbsd_islocked(void *);
+int afs_nbsd_pathconf(void *);
+int afs_nbsd_advlock(void *);
 
 #define afs_nbsd_opnotsupp \
-       ((int (*) __P((struct  vop_reallocblks_args *)))eopnotsupp)
+       ((int (*) __P((void *)))eopnotsupp)
 #define afs_nbsd_reallocblks afs_nbsd_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},
+#endif
     {&vop_lookup_desc, afs_nbsd_lookup},       /* lookup */
     {&vop_create_desc, afs_nbsd_create},       /* create */
     {&vop_mknod_desc, afs_nbsd_mknod},         /* mknod */
@@ -170,9 +177,9 @@ struct vnodeopv_entry_desc afs_vnodeop_entries[] = {
     {&vop_write_desc, afs_nbsd_write},         /* write */
     {&vop_ioctl_desc, afs_nbsd_ioctl},         /* XXX ioctl */
 #ifdef AFS_OBSD35_ENV
-    {&vop_poll_desc, seltrue},                 /* select */
+    {&vop_poll_desc, afs_nbsd_select},         /* select */
 #else
-    {&vop_select_desc, seltrue},               /* select */
+    {&vop_select_desc, afs_nbsd_select},       /* select */
 #endif
     {&vop_fsync_desc, afs_nbsd_fsync},         /* fsync */
     {&vop_remove_desc, afs_nbsd_remove},       /* remove */
@@ -204,28 +211,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)
 
-int afs_debug;
+#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
 
-#undef vrele
-#define vrele afs_nbsd_rele
-#undef VREF
-#define VREF afs_nbsd_ref
+int afs_debug;
 
 int
-afs_nbsd_lookup(ap)
-     struct vop_lookup_args    /* {
+afs_nbsd_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;
@@ -299,14 +307,14 @@ afs_nbsd_lookup(ap)
 }
 
 int
-afs_nbsd_create(ap)
-     struct vop_create_args    /* {
+afs_nbsd_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;
@@ -336,7 +344,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)
@@ -345,28 +353,28 @@ afs_nbsd_create(ap)
 }
 
 int
-afs_nbsd_mknod(ap)
-     struct vop_mknod_args     /* {
+afs_nbsd_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_nbsd_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);
 
@@ -381,14 +389,14 @@ afs_nbsd_open(ap)
 }
 
 int
-afs_nbsd_close(ap)
-     struct vop_close_args     /* {
+afs_nbsd_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();
@@ -398,14 +406,14 @@ afs_nbsd_close(ap)
 }
 
 int
-afs_nbsd_access(ap)
-     struct vop_access_args    /* {
+afs_nbsd_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();
@@ -415,14 +423,14 @@ afs_nbsd_access(ap)
 }
 
 int
-afs_nbsd_getattr(ap)
-     struct vop_getattr_args   /* {
+afs_nbsd_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();
@@ -432,14 +440,14 @@ afs_nbsd_getattr(ap)
 }
 
 int
-afs_nbsd_setattr(ap)
-     struct vop_setattr_args   /* {
+afs_nbsd_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();
@@ -449,14 +457,14 @@ afs_nbsd_setattr(ap)
 }
 
 int
-afs_nbsd_read(ap)
-     struct vop_read_args      /* {
+afs_nbsd_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();
@@ -468,14 +476,14 @@ afs_nbsd_read(ap)
 }
 
 int
-afs_nbsd_write(ap)
-     struct vop_write_args     /* {
+afs_nbsd_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
@@ -491,16 +499,16 @@ afs_nbsd_write(ap)
 }
 
 int
-afs_nbsd_ioctl(ap)
-     struct vop_ioctl_args     /* {
+afs_nbsd_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... */
@@ -520,14 +528,20 @@ afs_nbsd_ioctl(ap)
 }
 
 int
-afs_nbsd_fsync(ap)
-     struct vop_fsync_args     /* {
+afs_nbsd_select(void *v)
+{
+    return 1;
+}
+
+int
+afs_nbsd_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;
@@ -540,13 +554,13 @@ afs_nbsd_fsync(ap)
 }
 
 int
-afs_nbsd_remove(ap)
-     struct vop_remove_args    /* {
+afs_nbsd_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;
@@ -560,19 +574,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_nbsd_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;
@@ -596,7 +610,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);
 
@@ -607,16 +621,16 @@ afs_nbsd_link(ap)
 }
 
 int
-afs_nbsd_rename(ap)
-     struct vop_rename_args    /* {
+afs_nbsd_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;
@@ -677,10 +691,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';
 
@@ -692,8 +706,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)
@@ -708,14 +722,14 @@ afs_nbsd_rename(ap)
 }
 
 int
-afs_nbsd_mkdir(ap)
-     struct vop_mkdir_args     /* {
+afs_nbsd_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;
@@ -740,20 +754,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_nbsd_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;
@@ -762,7 +776,7 @@ afs_nbsd_rmdir(ap)
     if (dvp == vp) {
        vrele(dvp);
        vput(vp);
-       FREE(cnp->cn_pnbuf, M_NAMEI);
+       DROPCNP(cnp);
        DROPNAME();
        return (EINVAL);
     }
@@ -777,15 +791,15 @@ afs_nbsd_rmdir(ap)
 }
 
 int
-afs_nbsd_symlink(ap)
-     struct vop_symlink_args   /* {
+afs_nbsd_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. */
@@ -795,23 +809,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_nbsd_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();
@@ -830,13 +844,13 @@ afs_nbsd_readdir(ap)
 }
 
 int
-afs_nbsd_readlink(ap)
-     struct vop_readlink_args  /* {
+afs_nbsd_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();
@@ -848,11 +862,11 @@ afs_nbsd_readlink(ap)
 extern int prtactive;
 
 int
-afs_nbsd_inactive(ap)
-     struct vop_inactive_args  /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_nbsd_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();
@@ -873,17 +887,25 @@ afs_nbsd_inactive(ap)
 }
 
 int
-afs_nbsd_reclaim(ap)
-     struct vop_reclaim_args   /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_nbsd_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)
@@ -899,68 +921,73 @@ afs_nbsd_reclaim(ap)
     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_nbsd_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);
+    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_nbsd_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);
+    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_nbsd_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_nbsd_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];
@@ -975,15 +1002,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();
@@ -994,11 +1020,11 @@ afs_nbsd_strategy(ap)
 }
 
 int
-afs_nbsd_print(ap)
-     struct vop_print_args     /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_nbsd_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);
 
@@ -1011,11 +1037,11 @@ afs_nbsd_print(ap)
 }
 
 int
-afs_nbsd_islocked(ap)
-     struct vop_islocked_args  /* {
-                                * struct vnode *a_vp;
-                                * } */ *ap;
+afs_nbsd_islocked(void *v)
 {
+    struct vop_islocked_args   /* {
+                                * struct vnode *a_vp;
+                                * } */ *ap = v;
     return lockstatus(&VTOAFS(ap->a_vp)->rwlock);
 }
 
@@ -1023,13 +1049,13 @@ afs_nbsd_islocked(ap)
  * Return POSIX pathconf information applicable to ufs filesystems.
  */
 int
-afs_nbsd_pathconf(ap)
-     struct vop_pathconf_args  /* {
+afs_nbsd_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:
@@ -1064,15 +1090,15 @@ extern int
  * Advisory record locking support (fcntl() POSIX style)
  */
 int
-afs_nbsd_advlock(ap)
-     struct vop_advlock_args   /* {
+afs_nbsd_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();