#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 */
#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}
};
#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_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;
}
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;
*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)
}
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);
}
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();
- code = afs_close(VTOAFS(ap->a_vp), ap->a_fflag, ap->a_cred, ap->a_p);
+ code = afs_close(VTOAFS(ap->a_vp), ap->a_fflag, ap->a_cred);
AFS_GUNLOCK();
return code;
}
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();
}
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();
}
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();
}
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();
}
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
}
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... */
}
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;
}
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;
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;
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);
}
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;
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';
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)
}
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;
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);
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;
if (dvp == vp) {
vrele(dvp);
vput(vp);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ DROPCNP(cnp);
DROPNAME();
return (EINVAL);
}
}
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. */
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();
}
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();
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();
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();
}
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];
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();
}
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);
}
* 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:
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();