summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcsapuntz <csapuntz@openbsd.org>1998-08-06 19:34:18 +0000
committercsapuntz <csapuntz@openbsd.org>1998-08-06 19:34:18 +0000
commit49e90f704e6505506772b877647c4b34e66d67e9 (patch)
tree07066b4a6914a2a42642e9734d912d1800507749
parentMention new extened help and some minor cleanups (diff)
downloadwireguard-openbsd-49e90f704e6505506772b877647c4b34e66d67e9.tar.xz
wireguard-openbsd-49e90f704e6505506772b877647c4b34e66d67e9.zip
Rename vop_revoke, vn_bwrite, vop_noislocked, vop_nolock, vop_nounlock
to be vop_generic_revoke, vop_generic_bwrite, vop_generic_islocked, vop_generic_lock and vop_generic_unlock. Create vop_generic_abortop and propogate change to all file systems. Fix PR/371. Get rid of locking in NULLFS (should be mostly unnecessary now except for forced unmounts).
-rw-r--r--sys/adosfs/advnops.c19
-rw-r--r--sys/isofs/cd9660/cd9660_vnops.c29
-rw-r--r--sys/kern/vfs_default.c36
-rw-r--r--sys/kern/vfs_subr.c147
-rw-r--r--sys/kern/vfs_sync.c8
-rw-r--r--sys/kern/vfs_vnops.c4
-rw-r--r--sys/miscfs/deadfs/dead_vnops.c6
-rw-r--r--sys/miscfs/fdesc/fdesc_vnops.c27
-rw-r--r--sys/miscfs/fifofs/fifo.h10
-rw-r--r--sys/miscfs/kernfs/kernfs_vnops.c27
-rw-r--r--sys/miscfs/nullfs/null.h23
-rw-r--r--sys/miscfs/nullfs/null_subr.c28
-rw-r--r--sys/miscfs/nullfs/null_vnops.c344
-rw-r--r--sys/miscfs/portal/portal_vnops.c27
-rw-r--r--sys/miscfs/procfs/procfs_vnops.c24
-rw-r--r--sys/miscfs/specfs/specdev.h12
-rw-r--r--sys/miscfs/umapfs/umap_vnops.c6
-rw-r--r--sys/miscfs/union/union_vnops.c6
-rw-r--r--sys/msdosfs/msdosfs_vnops.c20
-rw-r--r--sys/nfs/nfs_node.c20
-rw-r--r--sys/nfs/nfs_var.h3
-rw-r--r--sys/nfs/nfs_vnops.c10
-rw-r--r--sys/nfs/nfsnode.h11
-rw-r--r--sys/sys/specdev.h12
-rw-r--r--sys/sys/vnode.h20
-rw-r--r--sys/ufs/ext2fs/ext2fs_vnops.c10
-rw-r--r--sys/ufs/ffs/ffs_vnops.c12
-rw-r--r--sys/ufs/mfs/mfs_extern.h4
-rw-r--r--sys/ufs/mfs/mfsnode.h10
-rw-r--r--sys/ufs/ufs/ufs_extern.h5
-rw-r--r--sys/ufs/ufs/ufs_vnops.c20
31 files changed, 311 insertions, 629 deletions
diff --git a/sys/adosfs/advnops.c b/sys/adosfs/advnops.c
index 1daac26acc6..50628f1d583 100644
--- a/sys/adosfs/advnops.c
+++ b/sys/adosfs/advnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: advnops.c,v 1.12 1998/07/20 00:49:21 espie Exp $ */
+/* $OpenBSD: advnops.c,v 1.13 1998/08/06 19:34:18 csapuntz Exp $ */
/* $NetBSD: advnops.c,v 1.32 1996/10/13 02:52:09 christos Exp $ */
/*
@@ -63,7 +63,6 @@ int adosfs_select __P((void *));
int adosfs_strategy __P((void *));
int adosfs_link __P((void *));
int adosfs_symlink __P((void *));
-int adosfs_abortop __P((void *));
int adosfs_lock __P((void *));
int adosfs_unlock __P((void *));
int adosfs_bmap __P((void *));
@@ -129,7 +128,7 @@ struct vnodeopv_entry_desc adosfs_vnodeop_entries[] = {
{ &vop_symlink_desc, adosfs_symlink }, /* symlink */
{ &vop_readdir_desc, adosfs_readdir }, /* readdir */
{ &vop_readlink_desc, adosfs_readlink }, /* readlink */
- { &vop_abortop_desc, adosfs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, adosfs_inactive }, /* inactive */
{ &vop_reclaim_desc, adosfs_reclaim }, /* reclaim */
{ &vop_lock_desc, adosfs_lock }, /* lock */
@@ -499,20 +498,6 @@ adosfs_symlink(v)
return (EROFS);
}
-int
-adosfs_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
/*
* lock the anode
*/
diff --git a/sys/isofs/cd9660/cd9660_vnops.c b/sys/isofs/cd9660/cd9660_vnops.c
index 7310d19bd02..c8e9ee08298 100644
--- a/sys/isofs/cd9660/cd9660_vnops.c
+++ b/sys/isofs/cd9660/cd9660_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cd9660_vnops.c,v 1.9 1997/11/08 17:21:08 niklas Exp $ */
+/* $OpenBSD: cd9660_vnops.c,v 1.10 1998/08/06 19:34:22 csapuntz Exp $ */
/* $NetBSD: cd9660_vnops.c,v 1.42 1997/10/16 23:56:57 christos Exp $ */
/*-
@@ -825,23 +825,6 @@ cd9660_symlink(v)
}
/*
- * cd9660 abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. If a buffer has been saved in anticipation of a CREATE, delete it.
- */
-int
-cd9660_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
-/*
* Lock an inode.
*/
int
@@ -1002,7 +985,7 @@ int lease_check __P((void *));
#define cd9660_truncate eopnotsupp
#define cd9660_update eopnotsupp
#define cd9660_bwrite eopnotsupp
-#define cd9660_revoke vop_revoke
+#define cd9660_revoke vop_generic_revoke
/*
* Global vfs data structures for cd9660
@@ -1035,7 +1018,7 @@ struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {
{ &vop_symlink_desc, cd9660_symlink }, /* symlink */
{ &vop_readdir_desc, cd9660_readdir }, /* readdir */
{ &vop_readlink_desc, cd9660_readlink },/* readlink */
- { &vop_abortop_desc, cd9660_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, cd9660_inactive },/* inactive */
{ &vop_reclaim_desc, cd9660_reclaim }, /* reclaim */
{ &vop_lock_desc, cd9660_lock }, /* lock */
@@ -1051,7 +1034,7 @@ struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {
{ &vop_vfree_desc, cd9660_vfree }, /* vfree */
{ &vop_truncate_desc, cd9660_truncate },/* truncate */
{ &vop_update_desc, cd9660_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc cd9660_vnodeop_opv_desc =
@@ -1104,7 +1087,7 @@ struct vnodeopv_entry_desc cd9660_specop_entries[] = {
{ &vop_vfree_desc, spec_vfree }, /* vfree */
{ &vop_truncate_desc, spec_truncate }, /* truncate */
{ &vop_update_desc, cd9660_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc cd9660_specop_opv_desc =
@@ -1155,7 +1138,7 @@ struct vnodeopv_entry_desc cd9660_fifoop_entries[] = {
{ &vop_vfree_desc, fifo_vfree }, /* vfree */
{ &vop_truncate_desc, fifo_truncate }, /* truncate */
{ &vop_update_desc, cd9660_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc cd9660_fifoop_opv_desc =
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index 66811990ef2..26c9e49a5a2 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_default.c,v 1.2 1998/01/11 02:10:44 csapuntz Exp $ */
+/* $OpenBSD: vfs_default.c,v 1.3 1998/08/06 19:34:24 csapuntz Exp $ */
/*
@@ -47,7 +47,8 @@
#include <sys/proc.h>
#include <sys/mount.h>
#include <sys/vnode.h>
-
+#include <sys/namei.h>
+#include <sys/malloc.h>
#include <miscfs/specfs/specdev.h>
@@ -58,7 +59,7 @@ extern struct simplelock spechash_slock;
* and with all vnodes aliased to the requested vnode.
*/
int
-vop_revoke(v)
+vop_generic_revoke(v)
void *v;
{
struct vop_revoke_args /* {
@@ -70,7 +71,7 @@ vop_revoke(v)
#ifdef DIAGNOSTIC
if ((ap->a_flags & REVOKEALL) == 0)
- panic("vop_revoke");
+ panic("vop_generic_revoke");
#endif
vp = ap->a_vp;
@@ -84,7 +85,7 @@ vop_revoke(v)
if (vp->v_flag & VXLOCK) {
vp->v_flag |= VXWANT;
simple_unlock(&vp->v_interlock);
- tsleep((caddr_t)vp, PINOD, "vop_revokeall", 0);
+ tsleep((caddr_t)vp, PINOD, "vop_generic_revokeall", 0);
return(0);
}
/*
@@ -118,7 +119,7 @@ vop_revoke(v)
int
-vn_bwrite(v)
+vop_generic_bwrite(v)
void *v;
{
struct vop_bwrite_args *ap = v;
@@ -126,6 +127,21 @@ vn_bwrite(v)
return (bwrite(ap->a_bp));
}
+
+int
+vop_generic_abortop(v)
+ void *v;
+{
+ struct vop_abortop_args /* {
+ struct vnode *a_dvp;
+ struct componentname *a_cnp;
+ } */ *ap = v;
+
+ if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
+ FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ return (0);
+}
+
/*
* Stubs to use when there is no locking to be done on the underlying object.
* A minimal shared lock is necessary to ensure that the underlying object
@@ -133,7 +149,7 @@ vn_bwrite(v)
* count is maintained in an auxillary vnode lock structure.
*/
int
-vop_nolock(v)
+vop_generic_lock(v)
void *v;
{
struct vop_lock_args /* {
@@ -181,7 +197,7 @@ vop_nolock(v)
return (0);
case LK_RELEASE:
default:
- panic("vop_nolock: bad operation %d", flags & LK_TYPE_MASK);
+ panic("vop_generic_lock: bad operation %d", flags & LK_TYPE_MASK);
}
if (flags & LK_INTERLOCK)
vnflags |= LK_INTERLOCK;
@@ -202,7 +218,7 @@ vop_nolock(v)
*/
int
-vop_nounlock(v)
+vop_generic_unlock(v)
void *v;
{
struct vop_unlock_args /* {
@@ -222,7 +238,7 @@ vop_nounlock(v)
* Return whether or not the node is in use.
*/
int
-vop_noislocked(v)
+vop_generic_islocked(v)
void *v;
{
struct vop_islocked_args /* {
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index cf94b1cb114..f991eb6f0ea 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_subr.c,v 1.20 1998/04/25 07:04:11 niklas Exp $ */
+/* $OpenBSD: vfs_subr.c,v 1.21 1998/08/06 19:34:26 csapuntz Exp $ */
/* $NetBSD: vfs_subr.c,v 1.53 1996/04/22 01:39:13 christos Exp $ */
/*
@@ -103,12 +103,12 @@ struct simplelock spechash_slock;
void insmntque __P((struct vnode *, struct mount *));
int getdevvp __P((dev_t, struct vnode **, enum vtype));
-int vunref __P((struct vnode *));
int vfs_hang_addrlist __P((struct mount *, struct netexport *,
struct export_args *));
int vfs_free_netcred __P((struct radix_node *, void *));
void vfs_free_addrlist __P((struct netexport *));
+static __inline__ void vputonfreelist __P((struct vnode *));
#ifdef DEBUG
void printlockedvnodes __P((void));
@@ -419,9 +419,10 @@ getnewvnode(tag, mp, vops, vpp)
vprint("free vnode", vp);
panic("free vnode isn't");
}
+
TAILQ_REMOVE(listhd, vp, v_freelist);
- /* see comment on why 0xdeadb is set at end of vgone (below) */
- vp->v_flag |= VGONEHACK;
+ vp->v_flag &= ~VONFREELIST;
+
simple_unlock(&vnode_free_list_slock);
vp->v_lease = NULL;
if (vp->v_type != VBAD)
@@ -643,18 +644,22 @@ vget(vp, flags, p)
tsleep((caddr_t)vp, PINOD, "vget", 0);
return (ENOENT);
}
- if (vp->v_usecount == 0) {
+ if ((vp->v_flag & VONFREELIST) && (vp->v_usecount == 0)) {
simple_lock(&vnode_free_list_slock);
if (vp->v_holdcnt > 0)
TAILQ_REMOVE(&vnode_hold_list, vp, v_freelist);
else
TAILQ_REMOVE(&vnode_free_list, vp, v_freelist);
simple_unlock(&vnode_free_list_slock);
+ vp->v_flag &= ~VONFREELIST;
}
vp->v_usecount++;
if (flags & LK_TYPE_MASK) {
if ((error = vn_lock(vp, flags | LK_INTERLOCK, p)) != 0) {
- vunref(vp);
+ vp->v_usecount--;
+ if (vp->v_usecount == 0)
+ vputonfreelist(vp);
+
simple_unlock(&vp->v_interlock);
}
return (error);
@@ -680,37 +685,34 @@ vref(vp)
}
#endif /* DIAGNOSTIC */
-int
-vunref(vp)
- struct vnode *vp;
+static __inline__ void
+vputonfreelist(vp)
+ struct vnode *vp;
+
{
-#ifdef DIAGNOSTIC
- if (vp == NULL)
- panic("vrele: null vp");
-#endif
- simple_lock (&vp->v_interlock);
- vp->v_usecount--;
- if (vp->v_usecount > 0) {
- simple_unlock(&vp->v_interlock);
- return (vp->v_usecount);
- }
-#ifdef DIAGNOSTIC
- if (vp->v_usecount < 0 || vp->v_writecount != 0) {
- vprint("vrele: bad ref count", vp);
- panic("vrele: ref cnt");
- }
-#endif
+ struct freelst *lst;
+
/*
* insert at tail of LRU list
*/
+
+ vp->v_flag |= VONFREELIST;
+
simple_lock(&vnode_free_list_slock);
- if (vp->v_holdcnt > 0)
- TAILQ_INSERT_TAIL(&vnode_hold_list, vp, v_freelist);
+
+ if (vp->v_holdcnt > 0)
+ lst = &vnode_hold_list;
else
- TAILQ_INSERT_TAIL(&vnode_free_list, vp, v_freelist);
+ lst = &vnode_free_list;
+
+
+ if (vp->v_type == VBAD)
+ TAILQ_INSERT_HEAD(lst, vp, v_freelist);
+ else
+ TAILQ_INSERT_TAIL(lst, vp, v_freelist);
+
simple_unlock(&vnode_free_list_slock);
- return (0);
}
/*
@@ -722,7 +724,7 @@ vput(vp)
{
struct proc *p = curproc; /* XXX */
-#ifdef DIGANOSTIC
+#ifdef DIAGNOSTIC
if (vp == NULL)
panic("vput: null vp");
#endif
@@ -739,17 +741,12 @@ vput(vp)
panic("vput: ref cnt");
}
#endif
- /*
- * insert at tail of LRU list
- */
- simple_lock(&vnode_free_list_slock);
- if (vp->v_holdcnt > 0)
- TAILQ_INSERT_TAIL(&vnode_hold_list, vp, v_freelist);
- else
- TAILQ_INSERT_TAIL(&vnode_free_list, vp, v_freelist);
- simple_unlock(&vnode_free_list_slock);
- simple_unlock(&vp->v_interlock);
VOP_INACTIVE(vp, p);
+
+ if (vp->v_usecount == 0)
+ vputonfreelist(vp);
+
+ simple_unlock(&vp->v_interlock);
}
/*
@@ -760,11 +757,31 @@ void
vrele(vp)
register struct vnode *vp;
{
- struct proc *p = curproc;
+ struct proc *p = curproc; /* XXX */
- if (vunref(vp) == 0 &&
- vn_lock(vp, LK_EXCLUSIVE |LK_INTERLOCK, p) == 0)
+#ifdef DIAGNOSTIC
+ if (vp == NULL)
+ panic("vrele: null vp");
+#endif
+ simple_lock(&vp->v_interlock);
+ vp->v_usecount--;
+ if (vp->v_usecount > 0) {
+ simple_unlock(&vp->v_interlock);
+ return;
+ }
+#ifdef DIAGNOSTIC
+ if (vp->v_usecount < 0 || vp->v_writecount != 0) {
+ vprint("vrele: bad ref count", vp);
+ panic("vrele: ref cnt");
+ }
+#endif
+ if (vn_lock(vp, LK_EXCLUSIVE |LK_INTERLOCK, p) == 0)
VOP_INACTIVE(vp, p);
+
+ if (vp->v_usecount == 0)
+ vputonfreelist(vp);
+
+ simple_unlock(&vp->v_interlock);
}
#ifdef DIAGNOSTIC
@@ -779,16 +796,9 @@ vhold(vp)
/*
* If it is on the freelist and the hold count is currently
* zero, move it to the hold list.
- *
- * The VGONEHACK flag reflects a call from getnewvnode,
- * which will remove the vnode from the free list, but
- * will not increment the ref count until after it calls vgone
- * If the ref count we're incremented first, vgone would
- * (incorrectly) try to close the previous instance of the
- * underlying object.
*/
simple_lock(&vp->v_interlock);
- if (!(vp->v_flag & VGONEHACK) &&
+ if ((vp->v_flag & VONFREELIST) &&
vp->v_holdcnt == 0 && vp->v_usecount == 0) {
simple_lock(&vnode_free_list_slock);
TAILQ_REMOVE(&vnode_free_list, vp, v_freelist);
@@ -814,10 +824,8 @@ holdrele(vp)
/*
* If it is on the holdlist and the hold count drops to
* zero, move it to the free list.
- *
- * See above for VGONEHACK
*/
- if (!(vp->v_flag & VGONEHACK) &&
+ if ((vp->v_flag & VONFREELIST) &&
vp->v_holdcnt == 0 && vp->v_usecount == 0) {
simple_lock(&vnode_free_list_slock);
TAILQ_REMOVE(&vnode_hold_list, vp, v_freelist);
@@ -987,9 +995,13 @@ vclean(vp, flags, p)
if (VOP_RECLAIM(vp, p))
panic("vclean: cannot reclaim");
if (active) {
- if (vunref(vp) == 0 &&
- vp->v_holdcnt > 0)
- panic("vclean: not clean");
+ vp->v_usecount--;
+ if (vp->v_usecount == 0) {
+ if (vp->v_holdcnt > 0)
+ panic("vclean: not clean");
+ vputonfreelist(vp);
+ }
+
simple_unlock(&vp->v_interlock);
}
cache_purge(vp);
@@ -1121,21 +1133,20 @@ vgonel(vp, p)
/*
* If it is on the freelist and not already at the head,
* move it to the head of the list.
- *
- * See above about the VGONEHACK
*/
- if (vp->v_usecount == 0) {
- simple_lock(&vnode_free_list_slock);
+ vp->v_type = VBAD;
+
+ if ((vp->v_flag & VONFREELIST) &&
+ vp->v_usecount == 0) {
+ simple_lock(&vnode_free_list_slock);
if (vp->v_holdcnt > 0)
panic("vgonel: not clean");
- if (!(vp->v_flag & VGONEHACK) &&
- TAILQ_FIRST(&vnode_free_list) != vp) {
- TAILQ_REMOVE(&vnode_free_list, vp, v_freelist);
- TAILQ_INSERT_HEAD(&vnode_free_list, vp, v_freelist);
- }
- simple_unlock(&vnode_free_list_slock);
+ if (TAILQ_FIRST(&vnode_free_list) != vp) {
+ TAILQ_REMOVE(&vnode_free_list, vp, v_freelist);
+ TAILQ_INSERT_HEAD(&vnode_free_list, vp, v_freelist);
+ }
+ simple_unlock(&vnode_free_list_slock);
}
- vp->v_type = VBAD;
}
/*
diff --git a/sys/kern/vfs_sync.c b/sys/kern/vfs_sync.c
index f3eb30f0b4a..6225232e57a 100644
--- a/sys/kern/vfs_sync.c
+++ b/sys/kern/vfs_sync.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_sync.c,v 1.3 1998/03/14 19:32:59 millert Exp $ */
+/* $OpenBSD: vfs_sync.c,v 1.4 1998/08/06 19:34:27 csapuntz Exp $ */
/*
@@ -208,10 +208,10 @@ sched_sync(p)
int sync_fsync __P((void *));
int sync_inactive __P((void *));
#define sync_reclaim nullop
-#define sync_lock vop_nolock
-#define sync_unlock vop_nounlock
+#define sync_lock vop_generic_lock
+#define sync_unlock vop_generic_unlock
int sync_print __P((void *));
-#define sync_islocked vop_noislocked
+#define sync_islocked vop_generic_islocked
int (**sync_vnodeop_p) __P((void *));
struct vnodeopv_entry_desc sync_vnodeop_entries[] = {
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index f900d77fc24..b0eb7368432 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_vnops.c,v 1.16 1998/07/28 00:13:04 millert Exp $ */
+/* $OpenBSD: vfs_vnops.c,v 1.17 1998/08/06 19:34:29 csapuntz Exp $ */
/* $NetBSD: vfs_vnops.c,v 1.20 1996/02/04 02:18:41 christos Exp $ */
/*
@@ -465,7 +465,7 @@ vn_lock(vp, flags, p)
tsleep((caddr_t)vp, PINOD, "vn_lock", 0);
error = ENOENT;
} else {
- error = VOP_LOCK(vp, flags | LK_INTERLOCK, p);
+ error = VOP_LOCK(vp, flags | LK_INTERLOCK | LK_CANRECURSE, p);
if (error == 0)
return (error);
}
diff --git a/sys/miscfs/deadfs/dead_vnops.c b/sys/miscfs/deadfs/dead_vnops.c
index 76b3dd78b91..e14eda13afa 100644
--- a/sys/miscfs/deadfs/dead_vnops.c
+++ b/sys/miscfs/deadfs/dead_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dead_vnops.c,v 1.5 1997/11/06 05:58:31 csapuntz Exp $ */
+/* $OpenBSD: dead_vnops.c,v 1.6 1998/08/06 19:34:30 csapuntz Exp $ */
/* $NetBSD: dead_vnops.c,v 1.16 1996/02/13 13:12:48 mycroft Exp $ */
/*
@@ -78,11 +78,11 @@ int dead_select __P((void *));
#define dead_inactive nullop
#define dead_reclaim nullop
int dead_lock __P((void *));
-#define dead_unlock vop_nounlock
+#define dead_unlock vop_generic_unlock
int dead_bmap __P((void *));
int dead_strategy __P((void *));
int dead_print __P((void *));
-#define dead_islocked vop_noislocked
+#define dead_islocked vop_generic_islocked
#define dead_pathconf dead_ebadf
#define dead_advlock dead_ebadf
#define dead_blkatoff dead_badop
diff --git a/sys/miscfs/fdesc/fdesc_vnops.c b/sys/miscfs/fdesc/fdesc_vnops.c
index decb05b8883..25e241c30e5 100644
--- a/sys/miscfs/fdesc/fdesc_vnops.c
+++ b/sys/miscfs/fdesc/fdesc_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fdesc_vnops.c,v 1.11 1998/06/11 16:34:21 deraadt Exp $ */
+/* $OpenBSD: fdesc_vnops.c,v 1.12 1998/08/06 19:34:32 csapuntz Exp $ */
/* $NetBSD: fdesc_vnops.c,v 1.32 1996/04/11 11:24:29 mrg Exp $ */
/*
@@ -108,7 +108,7 @@ int fdesc_select __P((void *));
#define fdesc_fsync nullop
#define fdesc_seek nullop
#define fdesc_remove eopnotsupp
-#define fdesc_revoke vop_revoke
+#define fdesc_revoke vop_generic_revoke
int fdesc_link __P((void *));
#define fdesc_rename eopnotsupp
#define fdesc_mkdir eopnotsupp
@@ -116,16 +116,15 @@ int fdesc_link __P((void *));
int fdesc_symlink __P((void *));
int fdesc_readdir __P((void *));
int fdesc_readlink __P((void *));
-int fdesc_abortop __P((void *));
int fdesc_inactive __P((void *));
int fdesc_reclaim __P((void *));
-#define fdesc_lock vop_nolock
-#define fdesc_unlock vop_nounlock
+#define fdesc_lock vop_generic_lock
+#define fdesc_unlock vop_generic_unlock
#define fdesc_bmap fdesc_badop
#define fdesc_strategy fdesc_badop
int fdesc_print __P((void *));
int fdesc_pathconf __P((void *));
-#define fdesc_islocked vop_noislocked
+#define fdesc_islocked vop_generic_islocked
#define fdesc_advlock eopnotsupp
#define fdesc_blkatoff eopnotsupp
#define fdesc_valloc eopnotsupp
@@ -163,7 +162,7 @@ struct vnodeopv_entry_desc fdesc_vnodeop_entries[] = {
{ &vop_symlink_desc, fdesc_symlink }, /* symlink */
{ &vop_readdir_desc, fdesc_readdir }, /* readdir */
{ &vop_readlink_desc, fdesc_readlink }, /* readlink */
- { &vop_abortop_desc, fdesc_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, fdesc_inactive }, /* inactive */
{ &vop_reclaim_desc, fdesc_reclaim }, /* reclaim */
{ &vop_lock_desc, fdesc_lock }, /* lock */
@@ -1041,20 +1040,6 @@ fdesc_symlink(v)
return (EROFS);
}
-int
-fdesc_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
/*
* /dev/fd "should never get here" operation
*/
diff --git a/sys/miscfs/fifofs/fifo.h b/sys/miscfs/fifofs/fifo.h
index 8a1f5ed33ba..088bb3232be 100644
--- a/sys/miscfs/fifofs/fifo.h
+++ b/sys/miscfs/fifofs/fifo.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: fifo.h,v 1.5 1997/11/06 05:58:33 csapuntz Exp $ */
+/* $OpenBSD: fifo.h,v 1.6 1998/08/06 19:34:34 csapuntz Exp $ */
/* $NetBSD: fifo.h,v 1.10 1996/02/09 22:40:15 christos Exp $ */
/*
@@ -60,7 +60,7 @@ int fifo_select __P((void *));
#define fifo_fsync nullop
#define fifo_seek fifo_badop
#define fifo_remove fifo_badop
-#define fifo_revoke vop_revoke
+#define fifo_revoke vop_generic_revoke
#define fifo_link fifo_badop
#define fifo_rename fifo_badop
#define fifo_mkdir fifo_badop
@@ -71,12 +71,12 @@ int fifo_select __P((void *));
#define fifo_abortop fifo_badop
int fifo_inactive __P((void *));
#define fifo_reclaim nullop
-#define fifo_lock vop_nolock
-#define fifo_unlock vop_nounlock
+#define fifo_lock vop_generic_lock
+#define fifo_unlock vop_generic_unlock
int fifo_bmap __P((void *));
#define fifo_strategy fifo_badop
int fifo_print __P((void *));
-#define fifo_islocked vop_noislocked
+#define fifo_islocked vop_generic_islocked
int fifo_pathconf __P((void *));
int fifo_advlock __P((void *));
#define fifo_blkatoff fifo_badop
diff --git a/sys/miscfs/kernfs/kernfs_vnops.c b/sys/miscfs/kernfs/kernfs_vnops.c
index fb2f56a284d..5f5f7acbe6e 100644
--- a/sys/miscfs/kernfs/kernfs_vnops.c
+++ b/sys/miscfs/kernfs/kernfs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kernfs_vnops.c,v 1.14 1998/06/11 16:34:23 deraadt Exp $ */
+/* $OpenBSD: kernfs_vnops.c,v 1.15 1998/08/06 19:34:36 csapuntz Exp $ */
/* $NetBSD: kernfs_vnops.c,v 1.43 1996/03/16 23:52:47 christos Exp $ */
/*
@@ -137,21 +137,20 @@ int kernfs_write __P((void *));
#define kernfs_remove eopnotsupp
int kernfs_link __P((void *));
#define kernfs_rename eopnotsupp
-#define kernfs_revoke vop_revoke
+#define kernfs_revoke vop_generic_revoke
#define kernfs_mkdir eopnotsupp
#define kernfs_rmdir eopnotsupp
int kernfs_symlink __P((void *));
int kernfs_readdir __P((void *));
#define kernfs_readlink eopnotsupp
-int kernfs_abortop __P((void *));
int kernfs_inactive __P((void *));
int kernfs_reclaim __P((void *));
-#define kernfs_lock vop_nolock
-#define kernfs_unlock vop_nounlock
+#define kernfs_lock vop_generic_lock
+#define kernfs_unlock vop_generic_unlock
#define kernfs_bmap kernfs_badop
#define kernfs_strategy kernfs_badop
int kernfs_print __P((void *));
-#define kernfs_islocked vop_noislocked
+#define kernfs_islocked vop_generic_islocked
int kernfs_pathconf __P((void *));
#define kernfs_advlock eopnotsupp
#define kernfs_blkatoff eopnotsupp
@@ -191,7 +190,7 @@ struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = {
{ &vop_symlink_desc, kernfs_symlink }, /* symlink */
{ &vop_readdir_desc, kernfs_readdir }, /* readdir */
{ &vop_readlink_desc, kernfs_readlink },/* readlink */
- { &vop_abortop_desc, kernfs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, kernfs_inactive },/* inactive */
{ &vop_reclaim_desc, kernfs_reclaim }, /* reclaim */
{ &vop_lock_desc, kernfs_lock }, /* lock */
@@ -815,20 +814,6 @@ kernfs_symlink(v)
return (EROFS);
}
-int
-kernfs_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
/*
* /dev/fd "should never get here" operation
*/
diff --git a/sys/miscfs/nullfs/null.h b/sys/miscfs/nullfs/null.h
index ae1ac9ed50a..673e48202f9 100644
--- a/sys/miscfs/nullfs/null.h
+++ b/sys/miscfs/nullfs/null.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: null.h,v 1.9 1998/03/01 17:18:01 niklas Exp $ */
+/* $OpenBSD: null.h,v 1.10 1998/08/06 19:34:38 csapuntz Exp $ */
/* $NetBSD: null.h,v 1.7 1996/05/17 20:53:11 gwr Exp $ */
/*
@@ -57,29 +57,8 @@ struct null_node {
LIST_ENTRY(null_node) null_hash; /* Hash list */
struct vnode *null_lowervp; /* VREFed once */
struct vnode *null_vnode; /* Back pointer */
- unsigned int null_flags; /* locking, etc. */
-#ifdef DIAGNOSTIC
- pid_t null_pid; /* who's locking it? */
- caddr_t null_lockpc; /* their return addr */
- caddr_t null_lockpc2; /* their return addr^2 */
-#endif
};
-#if !defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#define RETURN_PC(frameno) (void *)0
-#else
-/* Some architectures can just get the current frame's return address */
-#if defined(__alpha__) || defined(__mips__)
-#define RETURN_PC(frameno) (frameno ? 0 : __builtin_return_address(frameno))
-#else
-#define RETURN_PC(frameno) __builtin_return_address(frameno)
-#endif
-#endif
-
-#define NULL_WANTED 0x01
-#define NULL_LOCKED 0x02
-#define NULL_LLOCK 0x04
-
extern int null_node_create __P((struct mount *mp, struct vnode *target, struct vnode **vpp, int lockit));
#define MOUNTTONULLMOUNT(mp) ((struct null_mount *)((mp)->mnt_data))
diff --git a/sys/miscfs/nullfs/null_subr.c b/sys/miscfs/nullfs/null_subr.c
index a2b9e9ec6e0..5d4fadc09d8 100644
--- a/sys/miscfs/nullfs/null_subr.c
+++ b/sys/miscfs/nullfs/null_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: null_subr.c,v 1.7 1997/11/06 05:58:39 csapuntz Exp $ */
+/* $OpenBSD: null_subr.c,v 1.8 1998/08/06 19:34:41 csapuntz Exp $ */
/* $NetBSD: null_subr.c,v 1.6 1996/05/10 22:50:52 jtk Exp $ */
/*
@@ -125,7 +125,7 @@ loop:
}
}
- return NULL;
+ return NULLVP;
}
@@ -147,12 +147,18 @@ null_node_alloc(mp, lowervp, vpp)
extern int (**dead_vnodeop_p) __P((void *));
struct proc *p = curproc;
- if ((error = getnewvnode(VT_NULL, mp, null_vnodeop_p, &vp)) != 0)
- return (error);
- vp->v_type = lowervp->v_type;
MALLOC(xp, struct null_node *, sizeof(struct null_node), M_TEMP,
M_WAITOK);
+
+ if ((error = getnewvnode(VT_NULL, mp, null_vnodeop_p, vpp)) != 0) {
+ FREE (xp, M_TEMP);
+ return (error);
+ }
+
+ vp = *vpp;
+ vp->v_type = lowervp->v_type;
+
if (vp->v_type == VBLK || vp->v_type == VCHR) {
MALLOC(vp->v_specinfo, struct specinfo *,
sizeof(struct specinfo), M_VNODE, M_WAITOK);
@@ -162,11 +168,6 @@ null_node_alloc(mp, lowervp, vpp)
vp->v_data = xp;
xp->null_vnode = vp;
xp->null_lowervp = lowervp;
- xp->null_flags = 0;
-#ifdef DIAGNOSTIC
- xp->null_pid = -1;
- xp->null_lockpc = xp->null_lockpc2 = 0;
-#endif
/*
* Before we insert our new node onto the hash chains,
* check to see if someone else has beaten us to it.
@@ -230,7 +231,6 @@ loop:
}
/* XXX end of transmogrified checkalias() */
- *vpp = vp;
VREF(lowervp); /* Extra VREF will be vrele'd in null_node_create */
hd = NULL_NHASH(lowervp);
LIST_INSERT_HEAD(hd, xp, null_hash);
@@ -254,7 +254,6 @@ null_node_create(mp, lowervp, newvpp, takelock)
int takelock;
{
struct vnode *aliasvp;
- struct proc *p = curproc; /* XXX */
if ((aliasvp = null_node_find(mp, lowervp)) != NULL) {
/*
@@ -299,11 +298,6 @@ null_node_create(mp, lowervp, newvpp, takelock)
#ifdef NULLFS_DIAGNOSTIC
vprint("null_node_create: alias", aliasvp);
#endif
- /* lower node was locked: mark it as locked and take
- upper layer lock */
- VTONULL(aliasvp)->null_flags |= NULL_LLOCK;
- if (takelock)
- vn_lock(aliasvp, LK_EXCLUSIVE | LK_RETRY, p);
*newvpp = aliasvp;
return (0);
diff --git a/sys/miscfs/nullfs/null_vnops.c b/sys/miscfs/nullfs/null_vnops.c
index c0a396850c1..127d7c51ef4 100644
--- a/sys/miscfs/nullfs/null_vnops.c
+++ b/sys/miscfs/nullfs/null_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: null_vnops.c,v 1.9 1997/12/27 04:49:14 csapuntz Exp $ */
+/* $OpenBSD: null_vnops.c,v 1.10 1998/08/06 19:34:42 csapuntz Exp $ */
/* $NetBSD: null_vnops.c,v 1.7 1996/05/10 22:51:01 jtk Exp $ */
/*
@@ -231,9 +231,9 @@ null_bypass(v)
void *v;
{
struct vop_generic_args /* {
- struct vnodeop_desc *a_desc;
- <other random data follows, presumably>
- } */ *ap = v;
+ struct vnodeop_desc *a_desc;
+ <other random data follows, presumably>
+ } */ *ap = v;
register struct vnode **this_vp_p;
int error;
struct vnode *old_vps[VDESC_MAX_VPS];
@@ -271,7 +271,7 @@ null_bypass(v)
* that aren't. (We must always map first vp or vclean fails.)
*/
if (i && (*this_vp_p == NULLVP ||
- (*this_vp_p)->v_op != null_vnodeop_p)) {
+ (*this_vp_p)->v_op != null_vnodeop_p)) {
old_vps[i] = NULLVP;
} else {
old_vps[i] = *this_vp_p;
@@ -305,57 +305,46 @@ null_bypass(v)
if (old_vps[i] != NULLVP) {
*(vps_p[i]) = old_vps[i];
if (reles & 1) {
- /* they really vput them, so we must drop
- our locks (but mark underneath as
- unlocked first).
- Beware of vnode duplication--put it once,
- and rele the rest. Check this
- by looking at our upper flag. */
- if (VTONULL(*(vps_p[i]))->null_flags & NULL_LOCKED) {
- VTONULL(*(vps_p[i]))->null_flags &= ~NULL_LLOCK;
- vput(*(vps_p[i]));
- } else
- vrele(*(vps_p[i]));
+ vrele(*(vps_p[i]));
}
}
- }
- /*
- * Map the possible out-going vpp
- * (Assumes that the lower layer always returns
- * a VREF'ed vpp unless it gets an error.)
- */
- if (descp->vdesc_vpp_offset != VDESC_NO_OFFSET &&
- !(descp->vdesc_flags & VDESC_NOMAP_VPP) &&
- !error) {
/*
- * XXX - even though some ops have vpp returned vp's,
- * several ops actually vrele this before returning.
- * We must avoid these ops.
- * (This should go away when these ops are regularized.)
+ * Map the possible out-going vpp
+ * (Assumes that the lower layer always returns
+ * a VREF'ed vpp unless it gets an error.)
*/
- if (descp->vdesc_flags & VDESC_VPP_WILLRELE)
- goto out;
- vppp = VOPARG_OFFSETTO(struct vnode***,
- descp->vdesc_vpp_offset,ap);
- /*
- * This assumes that **vppp is a locked vnode (it is always
- * so as of this writing, NetBSD-current 1995/02/16)
- */
- /*
- * (don't want to lock it if being called on behalf
- * of lookup--it plays weird locking games depending
- * on whether or not it's looking up ".", "..", etc.
- */
- error = null_node_create(old_vps[0]->v_mount, **vppp, *vppp,
- descp == &vop_lookup_desc ? 0 : 1);
+ if (descp->vdesc_vpp_offset != VDESC_NO_OFFSET &&
+ !(descp->vdesc_flags & VDESC_NOMAP_VPP) &&
+ !error) {
+ /*
+ * XXX - even though some ops have vpp returned vp's,
+ * several ops actually vrele this before returning.
+ * We must avoid these ops.
+ * (This should go away when these ops are regularized.)
+ */
+ if (descp->vdesc_flags & VDESC_VPP_WILLRELE)
+ goto out;
+ vppp = VOPARG_OFFSETTO(struct vnode***,
+ descp->vdesc_vpp_offset,ap);
+ /*
+ * This assumes that **vppp is a locked vnode (it is always
+ * so as of this writing, NetBSD-current 1995/02/16)
+ *
+ * (don't want to lock it if being called on behalf
+ * of lookup--it plays weird locking games depending
+ * on whether or not it's looking up ".", "..", etc.
+ */
+ error = null_node_create(old_vps[0]->v_mount, **vppp, *vppp,
+ descp == &vop_lookup_desc ? 0 : 1);
+ }
}
out:
return (error);
+
}
-
/*
* We handle getattr only to change the fsid.
*/
@@ -434,19 +423,8 @@ null_print(v)
struct vnode *a_vp;
} */ *ap = v;
register struct vnode *vp = ap->a_vp;
- register struct null_node *nn = VTONULL(vp);
printf ("\ttag VT_NULLFS, vp=%p, lowervp=%p\n", vp, NULLVPTOLOWERVP(vp));
-#ifdef DIAGNOSTIC
- printf("%s%s owner pid %d retpc %p retret %p\n",
- (nn->null_flags & NULL_LOCKED) ? "(LOCKED) " : "",
- (nn->null_flags & NULL_LLOCK) ? "(LLOCK) " : "",
- nn->null_pid, nn->null_lockpc, nn->null_lockpc2);
-#else
- printf("%s%s\n",
- (nn->null_flags & NULL_LOCKED) ? "(LOCKED) " : "",
- (nn->null_flags & NULL_LLOCK) ? "(LLOCK) " : "");
-#endif
vprint("nullfs lowervp", NULLVPTOLOWERVP(vp));
return (0);
}
@@ -519,108 +497,34 @@ null_lock(v)
void *v;
{
struct vop_lock_args *ap = v;
- struct vnode *vp = ap->a_vp;
- struct null_node *nn;
- struct proc *p = ap->a_p;
-#ifdef NULLFS_DIAGNOSTIC
- vprint("null_lock_e", ap->a_vp);
- printf("retpc=%p, retretpc=%p\n",
- RETURN_PC(0),
- RETURN_PC(1));
+#if 0
+ vop_generic_lock(ap);
+ if ((ap->a_flags & LK_TYPE_MASK) == LK_DRAIN)
+ return (0);
+ ap->a_flags &= ~LK_INTERLOCK;
#endif
-start:
- while (vp->v_flag & VXLOCK) {
- vp->v_flag |= VXWANT;
- tsleep((caddr_t)vp, PINOD, "nulllock1", 0);
- }
-
- nn = VTONULL(vp);
-
- if ((nn->null_flags & NULL_LLOCK) == 0 &&
- (vp->v_usecount != 0)) {
- /*
- * only lock underlying node if we haven't locked it yet
- * for null ops, and our refcount is nonzero. If usecount
- * is zero, we are probably being reclaimed so we need to
- * keep our hands off the lower node.
- */
- vn_lock(nn->null_lowervp, LK_EXCLUSIVE | LK_RETRY, p);
- nn->null_flags |= NULL_LLOCK;
- }
-
- if (nn->null_flags & NULL_LOCKED) {
-#ifdef DIAGNOSTIC
- if (curproc && nn->null_pid == curproc->p_pid &&
- nn->null_pid > -1 && curproc->p_pid > -1) {
- vprint("self-lock", vp);
- panic("null: locking against myself");
- }
-#endif
- nn->null_flags |= NULL_WANTED;
- tsleep((caddr_t)nn, PINOD, "nulllock2", 0);
- goto start;
- }
-
-#ifdef DIAGNOSTIC
- if (curproc)
- nn->null_pid = curproc->p_pid;
- else
- nn->null_pid = -1;
- nn->null_lockpc = RETURN_PC(0);
- nn->null_lockpc2 = RETURN_PC(1);
-#endif
-
- nn->null_flags |= NULL_LOCKED;
- return (0);
+ return (null_bypass((struct vop_generic_args *)ap));
}
int
null_unlock(v)
void *v;
{
- struct vop_lock_args *ap = v;
- struct proc *p = ap->a_p;
- struct null_node *nn = VTONULL(ap->a_vp);
-
-#ifdef NULLFS_DIAGNOSTIC
- vprint("null_unlock_e", ap->a_vp);
-#endif
-#ifdef DIAGNOSTIC
- if ((nn->null_flags & NULL_LOCKED) == 0) {
- vprint("null_unlock", ap->a_vp);
- panic("null: unlocking unlocked node");
- }
- if (curproc && nn->null_pid != curproc->p_pid &&
- curproc->p_pid > -1 && nn->null_pid > -1) {
- vprint("null_unlock", ap->a_vp);
- panic("null: unlocking other process's null node");
- }
+ struct vop_unlock_args *ap = v;
+#if 0
+ vop_generic_unlock(ap);
+ ap->a_flags &= ~LK_INTERLOCK;
#endif
- nn->null_flags &= ~NULL_LOCKED;
-
- if ((nn->null_flags & NULL_LLOCK) != 0)
- VOP_UNLOCK(nn->null_lowervp, 0, p);
-
- nn->null_flags &= ~NULL_LLOCK;
-
- if (nn->null_flags & NULL_WANTED) {
- nn->null_flags &= ~NULL_WANTED;
- wakeup((caddr_t)nn);
- }
-#ifdef DIAGNOSTIC
- nn->null_pid = 0;
- nn->null_lockpc = nn->null_lockpc2 = 0;
-#endif
- return (0);
+ return (null_bypass((struct vop_generic_args *)ap));
}
int
null_islocked(v)
void *v;
{
- struct vop_islocked_args *ap = v;
- return ((VTONULL(ap->a_vp)->null_flags & NULL_LOCKED) ? 1 : 0);
+ /* XXX */
+ return (0);
}
int
@@ -634,130 +538,56 @@ null_lookup(v)
struct componentname *a_cnp;
} */ *ap = v;
register int error;
- register struct vnode *dvp;
int flags = ap->a_cnp->cn_flags;
struct componentname *cnp = ap->a_cnp;
+#if 0
+ register struct vnode *dvp, *vp;
struct proc *p = cnp->cn_proc;
+ struct vop_unlock_args unlockargs;
+ struct vop_lock_args lockargs;
+#endif
+
#ifdef NULLFS_DIAGNOSTIC
printf("null_lookup: dvp=%lx, name='%s'\n",
ap->a_dvp, cnp->cn_nameptr);
#endif
- /*
- * the starting dir (ap->a_dvp) comes in locked.
- */
-
- /* set LOCKPARENT to hold on to it until done below */
- cnp->cn_flags |= LOCKPARENT;
- error = null_bypass(ap);
- if (!(flags & LOCKPARENT))
- cnp->cn_flags &= ~LOCKPARENT;
- if (error)
- /*
- * starting dir is still locked/has been relocked
- * on error return.
- */
- return error;
-
- if (ap->a_dvp != *ap->a_vpp) {
- /*
- * Lookup returns node locked; we mark both lower and
- * upper nodes as locked by setting the lower lock
- * flag (it came back locked), and then call lock to
- * set upper lock flag & record pid, etc. see
- * null_node_create()
- */
- VTONULL(*ap->a_vpp)->null_flags |= NULL_LLOCK;
+ if ((flags & ISLASTCN) && (ap->a_dvp->v_mount->mnt_flag & MNT_RDONLY) &&
+ (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME))
+ return (EROFS);
+ error = null_bypass((struct vop_generic_args *)ap);
+ if (error == EJUSTRETURN && (flags & ISLASTCN) &&
+ (ap->a_dvp->v_mount->mnt_flag & MNT_RDONLY) &&
+ (cnp->cn_nameiop == CREATE || cnp->cn_nameiop == RENAME))
+ error = EROFS;
- dvp = ap->a_dvp;
- if (flags & ISDOTDOT) {
- /*
- * If we're looking up `..' and this isn't the
- * last component, then the starting directory
- * ("parent") is _unlocked_ as a side-effect
- * of lookups. This is to avoid deadlocks:
- * lock order is always parent, child, so
- * looking up `..' requires dropping the lock
- * on the starting directory.
- */
- /* see ufs_lookup() for hairy ugly locking protocol
- examples */
- /*
- * underlying starting dir comes back locked if flags &
- * LOCKPARENT (which we artificially set above) and
- * ISLASTCN.
- */
- if (flags & ISLASTCN) {
- VTONULL(dvp)->null_flags |= NULL_LLOCK; /* no-op, right? */
-#ifdef NULLFS_DIAGNOSTIC
- if (!VOP_ISLOCKED(VTONULL(dvp)->null_lowervp)) {
- vprint("lowerdvp not locked after lookup\n", dvp);
- panic("null_lookup not locked");
- }
-#endif
- } else {
- VTONULL(dvp)->null_flags &= ~NULL_LLOCK;
-#ifdef NULLFS_DIAGNOSTIC
- if (VOP_ISLOCKED(VTONULL(dvp)->null_lowervp)) {
- vprint("lowerdvp locked after lookup?\n", dvp);
- panic("null_lookup locked");
- }
-#endif
- }
- /*
- * locking order: drop lock on lower-in-tree
- * element, then get lock on higher-in-tree
- * element, then (if needed) re-fetch lower
- * lock. No need for vget() since we hold a
- * refcount to the starting directory
- */
- VOP_UNLOCK(dvp, 0, p);
- vn_lock(*ap->a_vpp, LK_EXCLUSIVE | LK_RETRY, p);
- /*
- * we should return our directory locked if
- * (flags & LOCKPARENT) and (flags & ISLASTCN)
- */
- if ((flags & LOCKPARENT) && (flags & ISLASTCN))
- vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY, p);
- } else {
- /*
- * Normal directory locking order: we hold the starting
- * directory locked; now lock our layer of the target.
- */
- vn_lock(*ap->a_vpp, LK_RETRY | LK_EXCLUSIVE, p);
- /*
- * underlying starting dir comes back locked
- * if lockparent (we set it) and no error
- * (this leg) and ISLASTCN
- */
- if (flags & ISLASTCN) {
- VTONULL(dvp)->null_flags |= NULL_LLOCK; /* no op, right? */
-#ifdef NULLFS_DIAGNOSTIC
- if (!VOP_ISLOCKED(VTONULL(dvp)->null_lowervp)) {
- vprint("lowerdvp not locked after lookup\n", dvp);
- panic("null_lookup not locked");
- }
-#endif
- } else {
- VTONULL(dvp)->null_flags &= ~NULL_LLOCK;
-#ifdef NULLFS_DIAGNOSTIC
- if (VOP_ISLOCKED(VTONULL(dvp)->null_lowervp)) {
- vprint("lowerdvp locked after lookup?\n", dvp);
- panic("null_lookup locked");
- }
-#endif
- }
- /*
- * we should return our directory unlocked if
- * our caller didn't want the parent locked,
- * !(flags & LOCKPARENT), or we're not at the
- * end yet, !(flags & ISLASTCN)
- */
- if (!(flags & LOCKPARENT) || !(flags & ISLASTCN))
- VOP_UNLOCK(dvp, 0, p);
- }
+#if 0
+ /*
+ * We must do the same locking and unlocking at this layer as
+ * is done in the layers below us. We could figure this out
+ * based on the error return and the LASTCN, LOCKPARENT, and
+ * LOCKLEAF flags. However, it is more expidient to just find
+ * out the state of the lower level vnodes and set ours to the
+ * same state.
+ */
+ dvp = ap->a_dvp;
+ vp = *ap->a_vpp;
+ if (dvp == vp)
+ return (error);
+ if (!VOP_ISLOCKED(dvp)) {
+ unlockargs.a_vp = dvp;
+ unlockargs.a_flags = 0;
+ unlockargs.a_p = p;
+ vop_generic_unlock(&unlockargs);
+ }
+ if (vp != NULLVP && VOP_ISLOCKED(vp)) {
+ lockargs.a_vp = vp;
+ lockargs.a_flags = LK_SHARED;
+ lockargs.a_p = p;
+ vop_generic_lock(&lockargs);
}
- return error;
+#endif
+ return (error);
}
/*
diff --git a/sys/miscfs/portal/portal_vnops.c b/sys/miscfs/portal/portal_vnops.c
index a6dd01e21c8..d9bb2855517 100644
--- a/sys/miscfs/portal/portal_vnops.c
+++ b/sys/miscfs/portal/portal_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: portal_vnops.c,v 1.6 1998/06/11 16:34:25 deraadt Exp $ */
+/* $OpenBSD: portal_vnops.c,v 1.7 1998/08/06 19:34:44 csapuntz Exp $ */
/* $NetBSD: portal_vnops.c,v 1.17 1996/02/13 13:12:57 mycroft Exp $ */
/*
@@ -95,17 +95,16 @@ int portal_link __P((void *));
#define portal_rmdir eopnotsupp
int portal_symlink __P((void *));
int portal_readdir __P((void *));
-#define portal_revoke vop_revoke
+#define portal_revoke vop_generic_revoke
#define portal_readlink eopnotsupp
-int portal_abortop __P((void *));
int portal_inactive __P((void *));
int portal_reclaim __P((void *));
-#define portal_lock vop_nolock
-#define portal_unlock vop_nounlock
+#define portal_lock vop_generic_lock
+#define portal_unlock vop_generic_unlock
#define portal_bmap portal_badop
#define portal_strategy portal_badop
int portal_print __P((void *));
-#define portal_islocked vop_noislocked
+#define portal_islocked vop_generic_islocked
int portal_pathconf __P((void *));
#define portal_advlock eopnotsupp
#define portal_blkatoff eopnotsupp
@@ -142,7 +141,7 @@ struct vnodeopv_entry_desc portal_vnodeop_entries[] = {
{ &vop_symlink_desc, portal_symlink }, /* symlink */
{ &vop_readdir_desc, portal_readdir }, /* readdir */
{ &vop_readlink_desc, portal_readlink }, /* readlink */
- { &vop_abortop_desc, portal_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, portal_inactive }, /* inactive */
{ &vop_reclaim_desc, portal_reclaim }, /* reclaim */
{ &vop_lock_desc, portal_lock }, /* lock */
@@ -729,20 +728,6 @@ portal_symlink(v)
}
int
-portal_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
-int
portal_badop(v)
void *v;
{
diff --git a/sys/miscfs/procfs/procfs_vnops.c b/sys/miscfs/procfs/procfs_vnops.c
index a20716360a4..fcab3d33df1 100644
--- a/sys/miscfs/procfs/procfs_vnops.c
+++ b/sys/miscfs/procfs/procfs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: procfs_vnops.c,v 1.11 1998/06/27 07:32:11 deraadt Exp $ */
+/* $OpenBSD: procfs_vnops.c,v 1.12 1998/08/06 19:34:46 csapuntz Exp $ */
/* $NetBSD: procfs_vnops.c,v 1.40 1996/03/16 23:52:55 christos Exp $ */
/*
@@ -127,7 +127,6 @@ int procfs_link __P((void *));
int procfs_symlink __P((void *));
int procfs_readdir __P((void *));
int procfs_readlink __P((void *));
-int procfs_abortop __P((void *));
int procfs_inactive __P((void *));
int procfs_reclaim __P((void *));
#define procfs_lock nullop
@@ -175,7 +174,7 @@ struct vnodeopv_entry_desc procfs_vnodeop_entries[] = {
{ &vop_symlink_desc, procfs_symlink }, /* symlink */
{ &vop_readdir_desc, procfs_readdir }, /* readdir */
{ &vop_readlink_desc, procfs_readlink }, /* readlink */
- { &vop_abortop_desc, procfs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, procfs_inactive }, /* inactive */
{ &vop_reclaim_desc, procfs_reclaim }, /* reclaim */
{ &vop_lock_desc, procfs_lock }, /* lock */
@@ -464,25 +463,6 @@ procfs_symlink(v)
return (EROFS);
}
-/*
- * _abortop is called when operations such as
- * rename and create fail. this entry is responsible
- * for undoing any side-effects caused by the lookup.
- * this will always include freeing the pathname buffer.
- */
-int
-procfs_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
/*
* generic entry point for unsupported operations
diff --git a/sys/miscfs/specfs/specdev.h b/sys/miscfs/specfs/specdev.h
index cf8193edee2..2f6db5186f2 100644
--- a/sys/miscfs/specfs/specdev.h
+++ b/sys/miscfs/specfs/specdev.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: specdev.h,v 1.6 1997/11/06 05:58:45 csapuntz Exp $ */
+/* $OpenBSD: specdev.h,v 1.7 1998/08/06 19:34:48 csapuntz Exp $ */
/* $NetBSD: specdev.h,v 1.12 1996/02/13 13:13:01 mycroft Exp $ */
/*
@@ -110,9 +110,9 @@ int spec_fsync __P((void *));
#define spec_abortop spec_badop
int spec_inactive __P((void *));
#define spec_reclaim nullop
-#define spec_lock vop_nolock
-#define spec_unlock vop_nounlock
-#define spec_islocked vop_noislocked
+#define spec_lock vop_generic_lock
+#define spec_unlock vop_generic_unlock
+#define spec_islocked vop_generic_islocked
int spec_bmap __P((void *));
int spec_strategy __P((void *));
int spec_print __P((void *));
@@ -124,5 +124,5 @@ int spec_advlock __P((void *));
#define spec_vfree spec_badop
#define spec_truncate nullop
#define spec_update nullop
-#define spec_bwrite vn_bwrite
-#define spec_revoke vop_revoke
+#define spec_bwrite vop_generic_bwrite
+#define spec_revoke vop_generic_revoke
diff --git a/sys/miscfs/umapfs/umap_vnops.c b/sys/miscfs/umapfs/umap_vnops.c
index 14a23102aed..a428b043354 100644
--- a/sys/miscfs/umapfs/umap_vnops.c
+++ b/sys/miscfs/umapfs/umap_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: umap_vnops.c,v 1.9 1997/11/06 05:58:49 csapuntz Exp $ */
+/* $OpenBSD: umap_vnops.c,v 1.10 1998/08/06 19:34:50 csapuntz Exp $ */
/* $NetBSD: umap_vnops.c,v 1.5.4.1 1996/05/25 22:13:35 jtc Exp $ */
/*
@@ -401,7 +401,7 @@ umap_lock(v)
struct proc *a_p;
} */ *ap = v;
- vop_nolock(ap);
+ vop_generic_lock(ap);
if ((ap->a_flags & LK_TYPE_MASK) == LK_DRAIN)
return (0);
ap->a_flags &= ~LK_INTERLOCK;
@@ -423,7 +423,7 @@ umap_unlock(v)
struct proc *a_p;
} */ *ap = v;
- vop_nounlock(ap);
+ vop_generic_unlock(ap);
ap->a_flags &= ~LK_INTERLOCK;
return (null_bypass(ap));
}
diff --git a/sys/miscfs/union/union_vnops.c b/sys/miscfs/union/union_vnops.c
index e0c76bf9d74..4c371d45b50 100644
--- a/sys/miscfs/union/union_vnops.c
+++ b/sys/miscfs/union/union_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: union_vnops.c,v 1.10 1998/07/13 02:52:01 csapuntz Exp $ */
+/* $OpenBSD: union_vnops.c,v 1.11 1998/08/06 19:34:51 csapuntz Exp $ */
/* $NetBSD: union_vnops.c,v 1.30.4.1 1996/05/25 22:10:14 jtc Exp $ */
/*
@@ -1623,7 +1623,7 @@ union_lock(v)
int flags = ap->a_flags;
int error = 0;
- vop_nolock(ap);
+ vop_generic_lock(ap);
/*
* Need to do real lockmgr-style locking here.
* in the mean time, draining won't work quite right,
@@ -1720,7 +1720,7 @@ union_unlock(v)
un->un_pid = 0;
#endif
- vop_nounlock(v);
+ vop_generic_unlock(v);
return (0);
}
diff --git a/sys/msdosfs/msdosfs_vnops.c b/sys/msdosfs/msdosfs_vnops.c
index 1c97ca4bdd1..052b5ac29e9 100644
--- a/sys/msdosfs/msdosfs_vnops.c
+++ b/sys/msdosfs/msdosfs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: msdosfs_vnops.c,v 1.17 1998/06/09 17:56:03 deraadt Exp $ */
+/* $OpenBSD: msdosfs_vnops.c,v 1.18 1998/08/06 19:34:54 csapuntz Exp $ */
/* $NetBSD: msdosfs_vnops.c,v 1.63 1997/10/17 11:24:19 ws Exp $ */
/*-
@@ -1753,20 +1753,6 @@ msdosfs_readlink(v)
}
int
-msdosfs_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
-int
msdosfs_lock(v)
void *v;
{
@@ -1998,7 +1984,7 @@ struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = {
{ &vop_symlink_desc, msdosfs_symlink }, /* symlink */
{ &vop_readdir_desc, msdosfs_readdir }, /* readdir */
{ &vop_readlink_desc, msdosfs_readlink }, /* readlink */
- { &vop_abortop_desc, msdosfs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, msdosfs_inactive }, /* inactive */
{ &vop_reclaim_desc, msdosfs_reclaim }, /* reclaim */
{ &vop_lock_desc, msdosfs_lock }, /* lock */
@@ -2011,7 +1997,7 @@ struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = {
{ &vop_advlock_desc, msdosfs_advlock }, /* advlock */
{ &vop_reallocblks_desc, msdosfs_reallocblks }, /* reallocblks */
{ &vop_update_desc, msdosfs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite }, /* bwrite */
+ { &vop_bwrite_desc, vop_generic_bwrite }, /* bwrite */
{ (struct vnodeop_desc *)NULL, (int (*) __P((void *)))NULL }
};
struct vnodeopv_desc msdosfs_vnodeop_opv_desc =
diff --git a/sys/nfs/nfs_node.c b/sys/nfs/nfs_node.c
index bce4a38e96b..a2c96342b27 100644
--- a/sys/nfs/nfs_node.c
+++ b/sys/nfs/nfs_node.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nfs_node.c,v 1.10 1997/11/06 05:59:00 csapuntz Exp $ */
+/* $OpenBSD: nfs_node.c,v 1.11 1998/08/06 19:34:58 csapuntz Exp $ */
/* $NetBSD: nfs_node.c,v 1.16 1996/02/18 11:53:42 fvdl Exp $ */
/*
@@ -239,21 +239,3 @@ nfs_reclaim(v)
return (0);
}
-/*
- * Nfs abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. Currently nothing to do.
- */
-/* ARGSUSED */
-int
-nfs_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
-
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
diff --git a/sys/nfs/nfs_var.h b/sys/nfs/nfs_var.h
index 2b1980c14a5..6696f7f6bf7 100644
--- a/sys/nfs/nfs_var.h
+++ b/sys/nfs/nfs_var.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: nfs_var.h,v 1.8 1998/02/22 01:21:32 niklas Exp $ */
+/* $OpenBSD: nfs_var.h,v 1.9 1998/08/06 19:34:59 csapuntz Exp $ */
/* $NetBSD: nfs_var.h,v 1.3 1996/02/18 11:53:54 fvdl Exp $ */
/*
@@ -81,7 +81,6 @@ u_long nfs_hash __P((nfsfh_t *, int));
int nfs_nget __P((struct mount *, nfsfh_t *, int, struct nfsnode **));
int nfs_inactive __P((void *));
int nfs_reclaim __P((void *));
-int nfs_abortop __P((void *));
/* nfs_vnops.c */
int nfs_null __P((struct vnode *, struct ucred *, struct proc *));
diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c
index aaa1285a392..98d0dc709f5 100644
--- a/sys/nfs/nfs_vnops.c
+++ b/sys/nfs/nfs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nfs_vnops.c,v 1.20 1998/05/11 05:42:01 deraadt Exp $ */
+/* $OpenBSD: nfs_vnops.c,v 1.21 1998/08/06 19:35:00 csapuntz Exp $ */
/* $NetBSD: nfs_vnops.c,v 1.62.4.1 1996/07/08 20:26:52 jtc Exp $ */
/*
@@ -115,7 +115,7 @@ struct vnodeopv_entry_desc nfsv2_vnodeop_entries[] = {
{ &vop_symlink_desc, nfs_symlink }, /* symlink */
{ &vop_readdir_desc, nfs_readdir }, /* readdir */
{ &vop_readlink_desc, nfs_readlink }, /* readlink */
- { &vop_abortop_desc, nfs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, nfs_inactive }, /* inactive */
{ &vop_reclaim_desc, nfs_reclaim }, /* reclaim */
{ &vop_lock_desc, nfs_lock }, /* lock */
@@ -186,7 +186,7 @@ struct vnodeopv_entry_desc spec_nfsv2nodeop_entries[] = {
{ &vop_vfree_desc, spec_vfree }, /* vfree */
{ &vop_truncate_desc, spec_truncate }, /* truncate */
{ &vop_update_desc, nfs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc spec_nfsv2nodeop_opv_desc =
@@ -238,7 +238,7 @@ struct vnodeopv_entry_desc fifo_nfsv2nodeop_entries[] = {
{ &vop_vfree_desc, fifo_vfree }, /* vfree */
{ &vop_truncate_desc, fifo_truncate }, /* truncate */
{ &vop_update_desc, nfs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc =
@@ -3077,7 +3077,7 @@ nfs_bwrite(v)
}
/*
- * This is a clone of vn_bwrite(), except that B_WRITEINPROG isn't set unless
+ * This is a clone of vop_generic_bwrite(), except that B_WRITEINPROG isn't set unless
* the force flag is one and it also handles the B_NEEDCOMMIT flag.
*/
int
diff --git a/sys/nfs/nfsnode.h b/sys/nfs/nfsnode.h
index 11d3c517838..d74feea493a 100644
--- a/sys/nfs/nfsnode.h
+++ b/sys/nfs/nfsnode.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: nfsnode.h,v 1.6 1997/11/06 05:59:06 csapuntz Exp $ */
+/* $OpenBSD: nfsnode.h,v 1.7 1998/08/06 19:35:02 csapuntz Exp $ */
/* $NetBSD: nfsnode.h,v 1.16 1996/02/18 11:54:04 fvdl Exp $ */
/*
@@ -176,7 +176,7 @@ int nfsfifo_read __P((void *));
int nfsfifo_write __P((void *));
#define nfs_ioctl ((int (*) __P((void *)))enoioctl)
#define nfs_select ((int (*) __P((void *)))seltrue)
-#define nfs_revoke vop_revoke
+#define nfs_revoke vop_generic_revoke
int nfs_mmap __P((void *));
int nfs_fsync __P((void *));
#define nfs_seek ((int (*) __P((void *)))nullop)
@@ -188,12 +188,11 @@ int nfs_rmdir __P((void *));
int nfs_symlink __P((void *));
int nfs_readdir __P((void *));
int nfs_readlink __P((void *));
-int nfs_abortop __P((void *));
int nfs_inactive __P((void *));
int nfs_reclaim __P((void *));
-#define nfs_lock ((int (*) __P((void *)))vop_nolock)
-#define nfs_unlock ((int (*) __P((void *)))vop_nounlock)
-#define nfs_islocked ((int (*) __P((void *)))vop_noislocked)
+#define nfs_lock ((int (*) __P((void *)))vop_generic_lock)
+#define nfs_unlock ((int (*) __P((void *)))vop_generic_unlock)
+#define nfs_islocked ((int (*) __P((void *)))vop_generic_islocked)
int nfs_bmap __P((void *));
int nfs_strategy __P((void *));
int nfs_print __P((void *));
diff --git a/sys/sys/specdev.h b/sys/sys/specdev.h
index cf8193edee2..2f6db5186f2 100644
--- a/sys/sys/specdev.h
+++ b/sys/sys/specdev.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: specdev.h,v 1.6 1997/11/06 05:58:45 csapuntz Exp $ */
+/* $OpenBSD: specdev.h,v 1.7 1998/08/06 19:34:48 csapuntz Exp $ */
/* $NetBSD: specdev.h,v 1.12 1996/02/13 13:13:01 mycroft Exp $ */
/*
@@ -110,9 +110,9 @@ int spec_fsync __P((void *));
#define spec_abortop spec_badop
int spec_inactive __P((void *));
#define spec_reclaim nullop
-#define spec_lock vop_nolock
-#define spec_unlock vop_nounlock
-#define spec_islocked vop_noislocked
+#define spec_lock vop_generic_lock
+#define spec_unlock vop_generic_unlock
+#define spec_islocked vop_generic_islocked
int spec_bmap __P((void *));
int spec_strategy __P((void *));
int spec_print __P((void *));
@@ -124,5 +124,5 @@ int spec_advlock __P((void *));
#define spec_vfree spec_badop
#define spec_truncate nullop
#define spec_update nullop
-#define spec_bwrite vn_bwrite
-#define spec_revoke vop_revoke
+#define spec_bwrite vop_generic_bwrite
+#define spec_revoke vop_generic_revoke
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 6ab48aa7579..0f5538337c0 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vnode.h,v 1.15 1998/07/28 00:13:10 millert Exp $ */
+/* $OpenBSD: vnode.h,v 1.16 1998/08/06 19:35:17 csapuntz Exp $ */
/* $NetBSD: vnode.h,v 1.38 1996/02/29 20:59:05 cgd Exp $ */
/*
@@ -132,7 +132,7 @@ struct vnode {
#define VBWAIT 0x0400 /* waiting for output to complete */
#define VALIASED 0x0800 /* vnode has an alias */
#define VDIROP 0x1000 /* LFS: vnode is involved in a directory op */
-#define VGONEHACK 0x2000 /* vgone: don't put me on the head of the free list */
+#define VONFREELIST 0x2000 /* Vnode is on a free list */
/*
* Vnode attributes. A field value of VNOVAL represents a field whose value
@@ -241,7 +241,7 @@ holdrele(vp)
{
simple_lock(&vp->v_interlock);
vp->v_holdcnt--;
- if (!(vp->v_flag & VGONEHACK) &&
+ if ((vp->v_flag & VONFREELIST) &&
vp->v_holdcnt == 0 && vp->v_usecount == 0) {
simple_lock(&vnode_free_list_slock);
TAILQ_REMOVE(&vnode_hold_list, vp, v_freelist);
@@ -257,7 +257,7 @@ vhold(vp)
struct vnode *vp;
{
simple_lock(&vp->v_interlock);
- if (!(vp->v_flag & VGONEHACK) &&
+ if ((vp->v_flag & VONFREELIST) &&
vp->v_holdcnt == 0 && vp->v_usecount == 0) {
simple_lock(&vnode_free_list_slock);
TAILQ_REMOVE(&vnode_free_list, vp, v_freelist);
@@ -457,7 +457,7 @@ void vgoneall __P((struct vnode *vp));
int vinvalbuf __P((struct vnode *vp, int save, struct ucred *cred,
struct proc *p, int slpflag, int slptimeo));
void vprint __P((char *label, struct vnode *vp));
-int vn_bwrite __P((void *ap));
+int vop_generic_bwrite __P((void *ap));
void vn_update __P((void));
int vn_close __P((struct vnode *vp,
int flags, struct ucred *cred, struct proc *p));
@@ -471,10 +471,12 @@ int vn_rdwr __P((enum uio_rw rw, struct vnode *vp, caddr_t base,
int len, off_t offset, enum uio_seg segflg, int ioflg,
struct ucred *cred, size_t *aresid, struct proc *p));
int vn_lock __P((struct vnode *vp, int flags, struct proc *p));
-int vop_noislocked __P((void *));
-int vop_nolock __P((void *));
-int vop_nounlock __P((void *));
-int vop_revoke __P((void *));
+
+int vop_generic_abortop __P((void *));
+int vop_generic_islocked __P((void *));
+int vop_generic_lock __P((void *));
+int vop_generic_unlock __P((void *));
+int vop_generic_revoke __P((void *));
int vn_read __P((struct file *fp, struct uio *uio, struct ucred *cred));
int vn_select __P((struct file *fp, int which, struct proc *p));
diff --git a/sys/ufs/ext2fs/ext2fs_vnops.c b/sys/ufs/ext2fs/ext2fs_vnops.c
index 7a8755fb7a9..52ec17a9887 100644
--- a/sys/ufs/ext2fs/ext2fs_vnops.c
+++ b/sys/ufs/ext2fs/ext2fs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ext2fs_vnops.c,v 1.7 1998/07/28 00:13:15 millert Exp $ */
+/* $OpenBSD: ext2fs_vnops.c,v 1.8 1998/08/06 19:35:04 csapuntz Exp $ */
/* $NetBSD: ext2fs_vnops.c,v 1.1 1997/06/11 09:34:09 bouyer Exp $ */
/*
@@ -1440,7 +1440,7 @@ struct vnodeopv_entry_desc ext2fs_vnodeop_entries[] = {
{ &vop_symlink_desc, ext2fs_symlink }, /* symlink */
{ &vop_readdir_desc, ext2fs_readdir }, /* readdir */
{ &vop_readlink_desc, ext2fs_readlink },/* readlink */
- { &vop_abortop_desc, ufs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, ext2fs_inactive },/* inactive */
{ &vop_reclaim_desc, ext2fs_reclaim }, /* reclaim */
{ &vop_lock_desc, ufs_lock }, /* lock */
@@ -1456,7 +1456,7 @@ struct vnodeopv_entry_desc ext2fs_vnodeop_entries[] = {
{ &vop_vfree_desc, ext2fs_vfree }, /* vfree */
{ &vop_truncate_desc, ext2fs_truncate },/* truncate */
{ &vop_update_desc, ext2fs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite }, /* bwrite */
+ { &vop_bwrite_desc, vop_generic_bwrite }, /* bwrite */
{ (struct vnodeop_desc*)NULL, (int(*) __P((void*)))NULL }
};
struct vnodeopv_desc ext2fs_vnodeop_opv_desc =
@@ -1505,7 +1505,7 @@ struct vnodeopv_entry_desc ext2fs_specop_entries[] = {
{ &vop_vfree_desc, ext2fs_vfree }, /* vfree */
{ &vop_truncate_desc, spec_truncate }, /* truncate */
{ &vop_update_desc, ext2fs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite }, /* bwrite */
+ { &vop_bwrite_desc, vop_generic_bwrite }, /* bwrite */
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc ext2fs_specop_opv_desc =
@@ -1555,7 +1555,7 @@ struct vnodeopv_entry_desc ext2fs_fifoop_entries[] = {
{ &vop_vfree_desc, ext2fs_vfree }, /* vfree */
{ &vop_truncate_desc, fifo_truncate }, /* truncate */
{ &vop_update_desc, ext2fs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite }, /* bwrite */
+ { &vop_bwrite_desc, vop_generic_bwrite }, /* bwrite */
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc ext2fs_fifoop_opv_desc =
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
index aed41770ab6..6224aad25a0 100644
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ffs_vnops.c,v 1.6 1997/11/06 05:59:20 csapuntz Exp $ */
+/* $OpenBSD: ffs_vnops.c,v 1.7 1998/08/06 19:35:07 csapuntz Exp $ */
/* $NetBSD: ffs_vnops.c,v 1.7 1996/05/11 18:27:24 mycroft Exp $ */
/*
@@ -94,7 +94,7 @@ struct vnodeopv_entry_desc ffs_vnodeop_entries[] = {
{ &vop_symlink_desc, ufs_symlink }, /* symlink */
{ &vop_readdir_desc, ufs_readdir }, /* readdir */
{ &vop_readlink_desc, ufs_readlink }, /* readlink */
- { &vop_abortop_desc, ufs_abortop }, /* abortop */
+ { &vop_abortop_desc, vop_generic_abortop }, /* abortop */
{ &vop_inactive_desc, ufs_inactive }, /* inactive */
{ &vop_reclaim_desc, ffs_reclaim }, /* reclaim */
{ &vop_lock_desc, ufs_lock }, /* lock */
@@ -112,7 +112,7 @@ struct vnodeopv_entry_desc ffs_vnodeop_entries[] = {
{ &vop_vfree_desc, ffs_vfree }, /* vfree */
{ &vop_truncate_desc, ffs_truncate }, /* truncate */
{ &vop_update_desc, ffs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void*)))NULL }
};
struct vnodeopv_desc ffs_vnodeop_opv_desc =
@@ -134,7 +134,7 @@ struct vnodeopv_entry_desc ffs_specop_entries[] = {
{ &vop_lease_desc, spec_lease_check }, /* lease */
{ &vop_ioctl_desc, spec_ioctl }, /* ioctl */
{ &vop_select_desc, spec_select }, /* select */
- { &vop_revoke_desc, spec_revoke }, /* revoke */
+ { &vop_revoke_desc, spec_revoke }, /* revoke */
{ &vop_mmap_desc, spec_mmap }, /* mmap */
{ &vop_fsync_desc, ffs_fsync }, /* fsync */
{ &vop_seek_desc, spec_seek }, /* seek */
@@ -163,7 +163,7 @@ struct vnodeopv_entry_desc ffs_specop_entries[] = {
{ &vop_vfree_desc, ffs_vfree }, /* vfree */
{ &vop_truncate_desc, spec_truncate }, /* truncate */
{ &vop_update_desc, ffs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc ffs_specop_opv_desc =
@@ -215,7 +215,7 @@ struct vnodeopv_entry_desc ffs_fifoop_entries[] = {
{ &vop_vfree_desc, ffs_vfree }, /* vfree */
{ &vop_truncate_desc, fifo_truncate }, /* truncate */
{ &vop_update_desc, ffs_update }, /* update */
- { &vop_bwrite_desc, vn_bwrite },
+ { &vop_bwrite_desc, vop_generic_bwrite },
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
};
struct vnodeopv_desc ffs_fifoop_opv_desc =
diff --git a/sys/ufs/mfs/mfs_extern.h b/sys/ufs/mfs/mfs_extern.h
index a2c7840b1aa..6adbf5a77f8 100644
--- a/sys/ufs/mfs/mfs_extern.h
+++ b/sys/ufs/mfs/mfs_extern.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mfs_extern.h,v 1.6 1998/02/08 22:41:52 tholo Exp $ */
+/* $OpenBSD: mfs_extern.h,v 1.7 1998/08/06 19:35:09 csapuntz Exp $ */
/* $NetBSD: mfs_extern.h,v 1.4 1996/02/09 22:31:27 christos Exp $ */
/*-
@@ -66,7 +66,7 @@ int mfs_close __P((void *));
int mfs_inactive __P((void *));
int mfs_reclaim __P((void *));
int mfs_print __P((void *));
-#define mfs_revoke vop_revoke
+#define mfs_revoke vop_generic_revoke
int mfs_badop __P((void *));
__END_DECLS
diff --git a/sys/ufs/mfs/mfsnode.h b/sys/ufs/mfs/mfsnode.h
index a0c77d26fae..cdae3c783a2 100644
--- a/sys/ufs/mfs/mfsnode.h
+++ b/sys/ufs/mfs/mfsnode.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mfsnode.h,v 1.6 1997/11/06 05:59:24 csapuntz Exp $ */
+/* $OpenBSD: mfsnode.h,v 1.7 1998/08/06 19:35:11 csapuntz Exp $ */
/* $NetBSD: mfsnode.h,v 1.3 1996/02/09 22:31:31 christos Exp $ */
/*
@@ -76,9 +76,9 @@ struct mfsnode {
#define mfs_readdir mfs_badop
#define mfs_readlink mfs_badop
#define mfs_abortop mfs_badop
-#define mfs_lock vop_nolock
-#define mfs_unlock vop_nounlock
-#define mfs_islocked vop_noislocked
+#define mfs_lock vop_generic_lock
+#define mfs_unlock vop_generic_unlock
+#define mfs_islocked vop_generic_islocked
#define mfs_pathconf mfs_badop
#define mfs_advlock mfs_badop
#define mfs_blkatoff mfs_badop
@@ -86,4 +86,4 @@ struct mfsnode {
#define mfs_vfree mfs_badop
#define mfs_truncate mfs_badop
#define mfs_update nullop
-#define mfs_bwrite vn_bwrite
+#define mfs_bwrite vop_generic_bwrite
diff --git a/sys/ufs/ufs/ufs_extern.h b/sys/ufs/ufs/ufs_extern.h
index 0eeb1cfb608..ee97c01a7c8 100644
--- a/sys/ufs/ufs/ufs_extern.h
+++ b/sys/ufs/ufs/ufs_extern.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ufs_extern.h,v 1.7 1998/01/09 20:38:03 csapuntz Exp $ */
+/* $OpenBSD: ufs_extern.h,v 1.8 1998/08/06 19:35:13 csapuntz Exp $ */
/* $NetBSD: ufs_extern.h,v 1.5 1996/02/09 22:36:03 christos Exp $ */
/*-
@@ -58,7 +58,6 @@ struct vfsconf;
struct vnode;
__BEGIN_DECLS
-int ufs_abortop __P((void *));
int ufs_access __P((void *));
int ufs_advlock __P((void *));
int ufs_bmap __P((void *));
@@ -87,7 +86,7 @@ int ufs_readdir __P((void *));
int ufs_readlink __P((void *));
int ufs_remove __P((void *));
int ufs_rename __P((void *));
-#define ufs_revoke vop_revoke
+#define ufs_revoke vop_generic_revoke
int ufs_rmdir __P((void *));
int ufs_seek __P((void *));
int ufs_select __P((void *));
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index b2a9db37120..2c755bbc5b8 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ufs_vnops.c,v 1.19 1998/07/28 00:13:18 millert Exp $ */
+/* $OpenBSD: ufs_vnops.c,v 1.20 1998/08/06 19:35:15 csapuntz Exp $ */
/* $NetBSD: ufs_vnops.c,v 1.18 1996/05/11 18:28:04 mycroft Exp $ */
/*
@@ -1613,24 +1613,6 @@ ufs_readlink(v)
}
/*
- * Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. If a buffer has been saved in anticipation of a CREATE, delete it.
- */
-/* ARGSUSED */
-int
-ufs_abortop(v)
- void *v;
-{
- struct vop_abortop_args /* {
- struct vnode *a_dvp;
- struct componentname *a_cnp;
- } */ *ap = v;
- if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
- return (0);
-}
-
-/*
* Lock an inode. If its already locked, set the WANT bit and sleep.
*/
int