summaryrefslogtreecommitdiffstats
path: root/sys/miscfs
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>1997-10-06 20:19:26 +0000
committerderaadt <deraadt@openbsd.org>1997-10-06 20:19:26 +0000
commitf6d35f956ac60c4dbcc91b018b2bcefd71ad933f (patch)
tree918af077b7c363fb7d19243c4ecb7f0165b3bc65 /sys/miscfs
parentBuild generic and genericsbc kernels into snapshot and distribute them (diff)
downloadwireguard-openbsd-f6d35f956ac60c4dbcc91b018b2bcefd71ad933f.tar.xz
wireguard-openbsd-f6d35f956ac60c4dbcc91b018b2bcefd71ad933f.zip
back out vfs lite2 till after 2.2
Diffstat (limited to 'sys/miscfs')
-rw-r--r--sys/miscfs/deadfs/dead_vnops.c24
-rw-r--r--sys/miscfs/fifofs/fifo.h11
-rw-r--r--sys/miscfs/fifofs/fifo_vnops.c59
-rw-r--r--sys/miscfs/kernfs/kernfs.h14
-rw-r--r--sys/miscfs/kernfs/kernfs_vfsops.c95
-rw-r--r--sys/miscfs/kernfs/kernfs_vnops.c77
-rw-r--r--sys/miscfs/nullfs/null.h6
-rw-r--r--sys/miscfs/nullfs/null_subr.c22
-rw-r--r--sys/miscfs/nullfs/null_vfsops.c21
-rw-r--r--sys/miscfs/nullfs/null_vnops.c44
-rw-r--r--sys/miscfs/procfs/procfs.h6
-rw-r--r--sys/miscfs/procfs/procfs_subr.c13
-rw-r--r--sys/miscfs/procfs/procfs_vfsops.c83
-rw-r--r--sys/miscfs/procfs/procfs_vnops.c11
-rw-r--r--sys/miscfs/specfs/spec_vnops.c159
-rw-r--r--sys/miscfs/specfs/specdev.h20
-rw-r--r--sys/miscfs/umapfs/umap.h4
-rw-r--r--sys/miscfs/umapfs/umap_subr.c16
-rw-r--r--sys/miscfs/umapfs/umap_vfsops.c22
-rw-r--r--sys/miscfs/umapfs/umap_vnops.c54
20 files changed, 351 insertions, 410 deletions
diff --git a/sys/miscfs/deadfs/dead_vnops.c b/sys/miscfs/deadfs/dead_vnops.c
index e1a6ffc0493..8004672c5fb 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.3 1997/10/06 15:18:59 csapuntz Exp $ */
+/* $OpenBSD: dead_vnops.c,v 1.4 1997/10/06 20:20:20 deraadt 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 nullop
int dead_bmap __P((void *));
int dead_strategy __P((void *));
int dead_print __P((void *));
-#define dead_islocked vop_noislocked
+#define dead_islocked nullop
#define dead_pathconf dead_ebadf
#define dead_advlock dead_ebadf
#define dead_blkatoff dead_badop
@@ -279,23 +279,11 @@ dead_lock(v)
{
struct vop_lock_args /* {
struct vnode *a_vp;
- int a_flags;
- struct proc *a_p;
} */ *ap = v;
- struct vnode *vp = ap->a_vp;
-
- /*
- * Since we are not using the lock manager, we must clear
- * the interlock here.
- */
- if (ap->a_flags & LK_INTERLOCK) {
- simple_unlock(&vp->v_interlock);
- ap->a_flags &= ~LK_INTERLOCK;
- }
- if (!chkvnlock(vp))
- return (0);
- return (VCALL(vp, VOFFSET(vop_lock), ap));
+ if (!chkvnlock(ap->a_vp))
+ return (0);
+ return (VCALL(ap->a_vp, VOFFSET(vop_lock), ap));
}
/*
diff --git a/sys/miscfs/fifofs/fifo.h b/sys/miscfs/fifofs/fifo.h
index 84723ebfb61..a8c3b7f4091 100644
--- a/sys/miscfs/fifofs/fifo.h
+++ b/sys/miscfs/fifofs/fifo.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: fifo.h,v 1.3 1997/10/06 15:19:02 csapuntz Exp $ */
+/* $OpenBSD: fifo.h,v 1.4 1997/10/06 20:20:22 deraadt Exp $ */
/* $NetBSD: fifo.h,v 1.10 1996/02/09 22:40:15 christos Exp $ */
/*
@@ -60,7 +60,6 @@ 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_link fifo_badop
#define fifo_rename fifo_badop
#define fifo_mkdir fifo_badop
@@ -69,14 +68,14 @@ int fifo_select __P((void *));
#define fifo_readdir fifo_badop
#define fifo_readlink fifo_badop
#define fifo_abortop fifo_badop
-int fifo_inactive __P((void *));
+#define fifo_inactive nullop
#define fifo_reclaim nullop
-#define fifo_lock vop_nolock
-#define fifo_unlock vop_nounlock
+int fifo_lock __P((void *));
+int fifo_unlock __P((void *));
int fifo_bmap __P((void *));
#define fifo_strategy fifo_badop
int fifo_print __P((void *));
-#define fifo_islocked vop_noislocked
+#define fifo_islocked nullop
int fifo_pathconf __P((void *));
int fifo_advlock __P((void *));
#define fifo_blkatoff fifo_badop
diff --git a/sys/miscfs/fifofs/fifo_vnops.c b/sys/miscfs/fifofs/fifo_vnops.c
index e3fd6689055..9b74f82384c 100644
--- a/sys/miscfs/fifofs/fifo_vnops.c
+++ b/sys/miscfs/fifofs/fifo_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fifo_vnops.c,v 1.5 1997/10/06 15:19:03 csapuntz Exp $ */
+/* $OpenBSD: fifo_vnops.c,v 1.6 1997/10/06 20:20:23 deraadt Exp $ */
/* $NetBSD: fifo_vnops.c,v 1.18 1996/03/16 23:52:42 christos Exp $ */
/*
@@ -38,13 +38,13 @@
#include <sys/param.h>
#include <sys/proc.h>
-#include <sys/systm.h>
#include <sys/time.h>
#include <sys/namei.h>
#include <sys/vnode.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/stat.h>
+#include <sys/systm.h>
#include <sys/ioctl.h>
#include <sys/file.h>
#include <sys/errno.h>
@@ -79,7 +79,6 @@ struct vnodeopv_entry_desc fifo_vnodeop_entries[] = {
{ &vop_lease_desc, fifo_lease_check }, /* lease */
{ &vop_ioctl_desc, fifo_ioctl }, /* ioctl */
{ &vop_select_desc, fifo_select }, /* select */
- { &vop_revoke_desc, fifo_revoke }, /* revoke */
{ &vop_mmap_desc, fifo_mmap }, /* mmap */
{ &vop_fsync_desc, fifo_fsync }, /* fsync */
{ &vop_seek_desc, fifo_seek }, /* seek */
@@ -148,7 +147,6 @@ fifo_open(v)
} */ *ap = v;
register struct vnode *vp = ap->a_vp;
register struct fifoinfo *fip;
- struct proc *p = ap->a_p;
struct socket *rso, *wso;
int error;
static char openstr[] = "fifo";
@@ -198,10 +196,10 @@ fifo_open(v)
if (ap->a_mode & O_NONBLOCK) {
} else {
while (fip->fi_writers == 0) {
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
error = tsleep((caddr_t)&fip->fi_readers,
PCATCH | PSOCK, openstr, 0);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
if (error)
goto bad;
}
@@ -215,10 +213,10 @@ fifo_open(v)
}
} else {
while (fip->fi_readers == 0) {
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
error = tsleep((caddr_t)&fip->fi_writers,
PCATCH | PSOCK, openstr, 0);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
if (error)
goto bad;
}
@@ -246,7 +244,6 @@ fifo_read(v)
} */ *ap = v;
register struct uio *uio = ap->a_uio;
register struct socket *rso = ap->a_vp->v_fifoinfo->fi_readsock;
- struct proc *p = uio->uio_procp;
int error, startresid;
#ifdef DIAGNOSTIC
@@ -258,10 +255,10 @@ fifo_read(v)
if (ap->a_ioflag & IO_NDELAY)
rso->so_state |= SS_NBIO;
startresid = uio->uio_resid;
- VOP_UNLOCK(ap->a_vp, 0, p);
+ VOP_UNLOCK(ap->a_vp);
error = soreceive(rso, (struct mbuf **)0, uio, (struct mbuf **)0,
(struct mbuf **)0, (int *)0);
- vn_lock(ap->a_vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(ap->a_vp);
/*
* Clear EOF indication after first such return.
*/
@@ -290,7 +287,6 @@ fifo_write(v)
struct ucred *a_cred;
} */ *ap = v;
struct socket *wso = ap->a_vp->v_fifoinfo->fi_writesock;
- struct proc *p = ap->a_uio->uio_procp;
int error;
#ifdef DIAGNOSTIC
@@ -299,9 +295,9 @@ fifo_write(v)
#endif
if (ap->a_ioflag & IO_NDELAY)
wso->so_state |= SS_NBIO;
- VOP_UNLOCK(ap->a_vp, 0, p);
+ VOP_UNLOCK(ap->a_vp);
error = sosend(wso, (struct mbuf *)0, ap->a_uio, 0, (struct mbuf *)0, 0);
- vn_lock(ap->a_vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(ap->a_vp);
if (ap->a_ioflag & IO_NDELAY)
wso->so_state &= ~SS_NBIO;
return (error);
@@ -373,19 +369,6 @@ fifo_select(v)
return (0);
}
-int
-fifo_inactive(v)
- void *v;
-{
- struct vop_inactive_args /* {
- struct vnode *a_vp;
- struct proc *a_p;
- } */ *ap = v;
-
- VOP_UNLOCK(ap->a_vp, 0, ap->a_p);
- return (0);
-}
-
/*
* This is a noop, simply returning what one has been given.
*/
@@ -398,7 +381,6 @@ fifo_bmap(v)
daddr_t a_bn;
struct vnode **a_vpp;
daddr_t *a_bnp;
- int *a_runp;
} */ *ap = v;
if (ap->a_vpp != NULL)
@@ -409,6 +391,26 @@ fifo_bmap(v)
}
/*
+ * At the moment we do not do any locking.
+ */
+/* ARGSUSED */
+int
+fifo_lock(v)
+ void *v;
+{
+ return (0);
+}
+
+/* ARGSUSED */
+int
+fifo_unlock(v)
+ void *v;
+{
+
+ return (0);
+}
+
+/*
* Device close routine
*/
/* ARGSUSED */
@@ -538,5 +540,4 @@ fifo_badop(v)
panic("fifo_badop called");
/* NOTREACHED */
- return(0);
}
diff --git a/sys/miscfs/kernfs/kernfs.h b/sys/miscfs/kernfs/kernfs.h
index 65b0d85b969..2db3b949b50 100644
--- a/sys/miscfs/kernfs/kernfs.h
+++ b/sys/miscfs/kernfs/kernfs.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: kernfs.h,v 1.4 1997/10/06 15:19:04 csapuntz Exp $ */
+/* $OpenBSD: kernfs.h,v 1.5 1997/10/06 20:20:24 deraadt Exp $ */
/* $NetBSD: kernfs.h,v 1.10 1996/02/09 22:40:21 christos Exp $ */
/*
@@ -77,18 +77,6 @@ struct kernfs_node {
#define VFSTOKERNFS(mp) ((struct kernfs_mount *)((mp)->mnt_data))
#define VTOKERN(vp) ((struct kernfs_node *)(vp)->v_data)
-#define kernfs_fhtovp ((int (*) __P((struct mount *, struct fid *, \
- struct mbuf *, struct vnode **, int *, struct ucred **)))eopnotsupp)
-#define kernfs_quotactl ((int (*) __P((struct mount *, int, uid_t, caddr_t, \
- struct proc *)))eopnotsupp)
-#define kernfs_sysctl ((int (*) __P((int *, u_int, void *, size_t *, void *, \
- size_t, struct proc *)))eopnotsupp)
-#define kernfs_vget ((int (*) __P((struct mount *, ino_t, struct vnode **))) \
- eopnotsupp)
-#define kernfs_vptofh ((int (*) __P((struct vnode *, struct fid *)))eopnotsupp)
-#define kernfs_sync ((int (*) __P((struct mount *, int, struct ucred *, \
- struct proc *)))eopnotsupp)
-
extern int (**kernfs_vnodeop_p) __P((void *));
extern struct vfsops kernfs_vfsops;
extern dev_t rrootdev;
diff --git a/sys/miscfs/kernfs/kernfs_vfsops.c b/sys/miscfs/kernfs/kernfs_vfsops.c
index dbd34c80f58..bdb169f5fff 100644
--- a/sys/miscfs/kernfs/kernfs_vfsops.c
+++ b/sys/miscfs/kernfs/kernfs_vfsops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kernfs_vfsops.c,v 1.6 1997/10/06 15:19:04 csapuntz Exp $ */
+/* $OpenBSD: kernfs_vfsops.c,v 1.7 1997/10/06 20:20:25 deraadt Exp $ */
/* $NetBSD: kernfs_vfsops.c,v 1.26 1996/04/22 01:42:27 christos Exp $ */
/*
@@ -59,7 +59,7 @@
dev_t rrootdev = NODEV;
-int kernfs_init __P((struct vfsconf *));
+void kernfs_init __P((void));
void kernfs_get_rrootdev __P((void));
int kernfs_mount __P((struct mount *, char *, caddr_t, struct nameidata *,
struct proc *));
@@ -67,13 +67,18 @@ int kernfs_start __P((struct mount *, int, struct proc *));
int kernfs_unmount __P((struct mount *, int, struct proc *));
int kernfs_root __P((struct mount *, struct vnode **));
int kernfs_statfs __P((struct mount *, struct statfs *, struct proc *));
+int kernfs_quotactl __P((struct mount *, int, uid_t, caddr_t,
+ struct proc *));
+int kernfs_sync __P((struct mount *, int, struct ucred *, struct proc *));
+int kernfs_vget __P((struct mount *, ino_t, struct vnode **));
+int kernfs_fhtovp __P((struct mount *, struct fid *, struct mbuf *,
+ struct vnode **, int *, struct ucred **));
+int kernfs_vptofh __P((struct vnode *, struct fid *));
/*ARGSUSED*/
-int
-kernfs_init(vfsp)
- struct vfsconf *vfsp;
+void
+kernfs_init()
{
- return (0);
}
void
@@ -139,7 +144,7 @@ kernfs_mount(mp, path, data, ndp, p)
fmp->kf_root = rvp;
mp->mnt_flag |= MNT_LOCAL;
mp->mnt_data = (qaddr_t)fmp;
- vfs_getnewfsid(mp);
+ getnewfsid(mp, makefstype(MOUNT_KERNFS));
(void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
@@ -171,6 +176,7 @@ kernfs_unmount(mp, mntflags, p)
{
int error;
int flags = 0;
+ extern int doforce;
struct vnode *rootvp = VFSTOKERNFS(mp)->kf_root;
#ifdef KERNFS_DIAGNOSTIC
@@ -178,6 +184,9 @@ kernfs_unmount(mp, mntflags, p)
#endif
if (mntflags & MNT_FORCE) {
+ /* kernfs can never be rootfs so don't check for it */
+ if (!doforce)
+ return (EINVAL);
flags |= FORCECLOSE;
}
@@ -216,7 +225,6 @@ kernfs_root(mp, vpp)
struct vnode **vpp;
{
struct vnode *vp;
- struct proc *p = curproc;
#ifdef KERNFS_DIAGNOSTIC
printf("kernfs_root(mp = %p)\n", mp);
@@ -227,12 +235,24 @@ kernfs_root(mp, vpp)
*/
vp = VFSTOKERNFS(mp)->kf_root;
VREF(vp);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
*vpp = vp;
return (0);
}
int
+kernfs_quotactl(mp, cmd, uid, arg, p)
+ struct mount *mp;
+ int cmd;
+ uid_t uid;
+ caddr_t arg;
+ struct proc *p;
+{
+
+ return (EOPNOTSUPP);
+}
+
+int
kernfs_statfs(mp, sbp, p)
struct mount *mp;
struct statfs *sbp;
@@ -246,6 +266,8 @@ kernfs_statfs(mp, sbp, p)
#ifdef COMPAT_09
sbp->f_type = 7;
+#else
+ sbp->f_type = 0;
#endif
sbp->f_bsize = cnt.v_page_size;
sbp->f_iosize = cnt.v_page_size;
@@ -255,16 +277,66 @@ kernfs_statfs(mp, sbp, p)
sbp->f_files = desiredvnodes;
sbp->f_ffree = desiredvnodes - numvnodes;
if (sbp != &mp->mnt_stat) {
- sbp->f_type = mp->mnt_vfc->vfc_typenum;
bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
}
- strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
+ strncpy(sbp->f_fstypename, mp->mnt_op->vfs_name, MFSNAMELEN);
+ return (0);
+}
+
+/*ARGSUSED*/
+int
+kernfs_sync(mp, waitfor, uc, p)
+ struct mount *mp;
+ int waitfor;
+ struct ucred *uc;
+ struct proc *p;
+{
+
return (0);
}
+/*
+ * Kernfs flat namespace lookup.
+ * Currently unsupported.
+ */
+int
+kernfs_vget(mp, ino, vpp)
+ struct mount *mp;
+ ino_t ino;
+ struct vnode **vpp;
+{
+
+ return (EOPNOTSUPP);
+}
+
+/*ARGSUSED*/
+int
+kernfs_fhtovp(mp, fhp, mb, vpp, what, anon)
+ struct mount *mp;
+ struct fid *fhp;
+ struct mbuf *mb;
+ struct vnode **vpp;
+ int *what;
+ struct ucred **anon;
+{
+
+ return (EOPNOTSUPP);
+}
+
+/*ARGSUSED*/
+int
+kernfs_vptofh(vp, fhp)
+ struct vnode *vp;
+ struct fid *fhp;
+{
+
+ return (EOPNOTSUPP);
+}
+
struct vfsops kernfs_vfsops = {
+ MOUNT_KERNFS,
kernfs_mount,
kernfs_start,
kernfs_unmount,
@@ -276,5 +348,4 @@ struct vfsops kernfs_vfsops = {
kernfs_fhtovp,
kernfs_vptofh,
kernfs_init,
- kernfs_sysctl
};
diff --git a/sys/miscfs/kernfs/kernfs_vnops.c b/sys/miscfs/kernfs/kernfs_vnops.c
index 7007690e04f..5606fa5ebdd 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.11 1997/10/06 15:19:05 csapuntz Exp $ */
+/* $OpenBSD: kernfs_vnops.c,v 1.12 1997/10/06 20:20:26 deraadt Exp $ */
/* $NetBSD: kernfs_vnops.c,v 1.43 1996/03/16 23:52:47 christos Exp $ */
/*
@@ -118,10 +118,11 @@ struct kern_target kern_targets[] = {
static int nkern_targets = sizeof(kern_targets) / sizeof(kern_targets[0]);
int kernfs_badop __P((void *));
+int kernfs_enotsupp __P((void *));
int kernfs_lookup __P((void *));
-#define kernfs_create eopnotsupp
-#define kernfs_mknod eopnotsupp
+#define kernfs_create kernfs_enotsupp
+#define kernfs_mknod kernfs_enotsupp
int kernfs_open __P((void *));
#define kernfs_close nullop
int kernfs_access __P((void *));
@@ -129,37 +130,36 @@ int kernfs_getattr __P((void *));
int kernfs_setattr __P((void *));
int kernfs_read __P((void *));
int kernfs_write __P((void *));
-#define kernfs_ioctl eopnotsupp
-#define kernfs_select eopnotsupp
-#define kernfs_mmap eopnotsupp
+#define kernfs_ioctl kernfs_enotsupp
+#define kernfs_select kernfs_enotsupp
+#define kernfs_mmap kernfs_enotsupp
#define kernfs_fsync nullop
#define kernfs_seek nullop
-#define kernfs_remove eopnotsupp
+#define kernfs_remove kernfs_enotsupp
int kernfs_link __P((void *));
-#define kernfs_rename eopnotsupp
-#define kernfs_revoke vop_revoke
-#define kernfs_mkdir eopnotsupp
-#define kernfs_rmdir eopnotsupp
+#define kernfs_rename kernfs_enotsupp
+#define kernfs_mkdir kernfs_enotsupp
+#define kernfs_rmdir kernfs_enotsupp
int kernfs_symlink __P((void *));
int kernfs_readdir __P((void *));
-#define kernfs_readlink eopnotsupp
+#define kernfs_readlink kernfs_enotsupp
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 nullop
+#define kernfs_unlock nullop
#define kernfs_bmap kernfs_badop
#define kernfs_strategy kernfs_badop
int kernfs_print __P((void *));
-#define kernfs_islocked vop_noislocked
+#define kernfs_islocked nullop
int kernfs_pathconf __P((void *));
-#define kernfs_advlock eopnotsupp
-#define kernfs_blkatoff eopnotsupp
-#define kernfs_valloc eopnotsupp
+#define kernfs_advlock kernfs_enotsupp
+#define kernfs_blkatoff kernfs_enotsupp
+#define kernfs_valloc kernfs_enotsupp
int kernfs_vfree __P((void *));
-#define kernfs_truncate eopnotsupp
-#define kernfs_update eopnotsupp
-#define kernfs_bwrite eopnotsupp
+#define kernfs_truncate kernfs_enotsupp
+#define kernfs_update kernfs_enotsupp
+#define kernfs_bwrite kernfs_enotsupp
int kernfs_xread __P((struct kern_target *, int, char **, int));
int kernfs_xwrite __P((struct kern_target *, char *, int));
@@ -179,7 +179,6 @@ struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = {
{ &vop_write_desc, kernfs_write }, /* write */
{ &vop_ioctl_desc, kernfs_ioctl }, /* ioctl */
{ &vop_select_desc, kernfs_select }, /* select */
- { &vop_revoke_desc, kernfs_revoke }, /* revoke */
{ &vop_mmap_desc, kernfs_mmap }, /* mmap */
{ &vop_fsync_desc, kernfs_fsync }, /* fsync */
{ &vop_seek_desc, kernfs_seek }, /* seek */
@@ -356,7 +355,6 @@ kernfs_lookup(v)
struct vnode **vpp = ap->a_vpp;
struct vnode *dvp = ap->a_dvp;
char *pname = cnp->cn_nameptr;
- struct proc *p = cnp->cn_proc;
struct kern_target *kt;
struct vnode *fvp;
int error, i;
@@ -375,7 +373,7 @@ kernfs_lookup(v)
if (cnp->cn_namelen == 1 && *pname == '.') {
*vpp = dvp;
VREF(dvp);
- vn_lock(dvp, LK_SHARED | LK_RETRY, p);
+ /*VOP_LOCK(dvp);*/
return (0);
}
@@ -383,7 +381,7 @@ kernfs_lookup(v)
if (cnp->cn_namelen == 4 && bcmp(pname, "root", 4) == 0) {
*vpp = rootdir;
VREF(rootdir);
- vn_lock(rootdir, LK_SHARED | LK_RETRY, p);
+ VOP_LOCK(rootdir);
return (0);
}
#endif
@@ -398,7 +396,6 @@ kernfs_lookup(v)
printf("kernfs_lookup: i = %d, failed", i);
#endif
- vn_lock(dvp, LK_SHARED | LK_RETRY, p);
return (cnp->cn_nameiop == LOOKUP ? ENOENT : EROFS);
found:
@@ -408,7 +405,7 @@ found:
if (*dp == NODEV || !vfinddev(*dp, kt->kt_vtype, &fvp))
return (ENOENT);
*vpp = fvp;
- if (vget(fvp, LK_EXCLUSIVE, p))
+ if (vget(fvp, 1))
goto loop;
return (0);
}
@@ -417,16 +414,13 @@ found:
printf("kernfs_lookup: allocate new vnode\n");
#endif
error = getnewvnode(VT_KERNFS, dvp->v_mount, kernfs_vnodeop_p, &fvp);
- if (error) {
- vn_lock(dvp, LK_SHARED | LK_RETRY, p);
+ if (error)
return (error);
- }
MALLOC(fvp->v_data, void *, sizeof(struct kernfs_node), M_TEMP,
M_WAITOK);
VTOKERN(fvp)->kf_kt = kt;
fvp->v_type = kt->kt_vtype;
- vn_lock(fvp, LK_SHARED | LK_RETRY, p);
*vpp = fvp;
#ifdef KERNFS_DIAGNOSTIC
@@ -627,10 +621,13 @@ kernfs_readdir(v)
u_long *a_cookies;
int a_ncookies;
} */ *ap = v;
- int error, i;
struct uio *uio = ap->a_uio;
struct dirent d;
struct kern_target *kt;
+ int i;
+ int error;
+ u_long *cookies = ap->a_cookies;
+ int ncookies = ap->a_ncookies;
if (ap->a_vp->v_type != VDIR)
return (ENOTDIR);
@@ -666,6 +663,8 @@ kernfs_readdir(v)
if ((error = uiomove((caddr_t)&d, UIO_MX, uio)) != 0)
break;
+ if (ncookies-- > 0)
+ *cookies++ = i + 1;
}
uio->uio_offset = i;
@@ -678,7 +677,6 @@ kernfs_inactive(v)
{
struct vop_inactive_args /* {
struct vnode *a_vp;
- struct proc *a_p;
} */ *ap = v;
struct vnode *vp = ap->a_vp;
@@ -689,7 +687,6 @@ kernfs_inactive(v)
* Clear out the v_type field to avoid
* nasty things happening in vgone().
*/
- VOP_UNLOCK(vp, 0, ap->a_p);
vp->v_type = VNON;
return (0);
}
@@ -820,6 +817,18 @@ kernfs_abortop(v)
}
/*
+ * /dev/fd vnode unsupported operation
+ */
+/*ARGSUSED*/
+int
+kernfs_enotsupp(v)
+ void *v;
+{
+
+ return (EOPNOTSUPP);
+}
+
+/*
* /dev/fd "should never get here" operation
*/
/*ARGSUSED*/
diff --git a/sys/miscfs/nullfs/null.h b/sys/miscfs/nullfs/null.h
index bdba4065075..a986184915b 100644
--- a/sys/miscfs/nullfs/null.h
+++ b/sys/miscfs/nullfs/null.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: null.h,v 1.5 1997/10/06 15:19:06 csapuntz Exp $ */
+/* $OpenBSD: null.h,v 1.6 1997/10/06 20:20:28 deraadt Exp $ */
/* $NetBSD: null.h,v 1.7 1996/05/17 20:53:11 gwr Exp $ */
/*
@@ -92,8 +92,6 @@ extern struct vnode *null_checkvp __P((struct vnode *vp, char *fil, int lno));
extern int (**null_vnodeop_p) __P((void *));
extern struct vfsops null_vfsops;
-int nullfs_init __P((struct vfsconf *));
-int null_bypass __P((void *));
-
+void nullfs_init __P((void));
#endif /* _KERNEL */
diff --git a/sys/miscfs/nullfs/null_subr.c b/sys/miscfs/nullfs/null_subr.c
index 930b1c632a9..f115d70e449 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.5 1997/10/06 15:19:06 csapuntz Exp $ */
+/* $OpenBSD: null_subr.c,v 1.6 1997/10/06 20:20:29 deraadt Exp $ */
/* $NetBSD: null_subr.c,v 1.6 1996/05/10 22:50:52 jtk Exp $ */
/*
@@ -42,7 +42,6 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/proc.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/vnode.h>
@@ -68,6 +67,7 @@
LIST_HEAD(null_node_hashhead, null_node) *null_node_hashtbl;
u_long null_node_hash;
+void nullfs_init __P((void));
static struct vnode *
null_node_find __P((struct mount *, struct vnode *));
static int
@@ -75,17 +75,14 @@ static int
/*
* Initialise cache headers
*/
-/*ARGSUSED*/
-int
-nullfs_init(vfsp)
- struct vfsconf *vfsp;
+void
+nullfs_init()
{
#ifdef NULLFS_DIAGNOSTIC
printf("nullfs_init\n"); /* printed during system boot */
#endif
null_node_hashtbl = hashinit(NNULLNODECACHE, M_CACHE, &null_node_hash);
- return (0);
}
/*
@@ -99,7 +96,6 @@ null_node_find(mp, lowervp)
struct null_node_hashhead *hd;
struct null_node *a;
struct vnode *vp;
- struct proc *p = curproc;
/*
* Find hash base, and then search the (two-way) linked
@@ -117,7 +113,7 @@ loop:
* stuff, but we don't want to lock
* the lower node.
*/
- if (vget(vp, 0, p)) {
+ if (vget(vp, 0)) {
printf ("null_node_find: vget failed.\n");
goto loop;
};
@@ -145,7 +141,6 @@ null_node_alloc(mp, lowervp, vpp)
struct vnode *vp, *nvp;
int error;
extern int (**dead_vnodeop_p) __P((void *));
- struct proc *p = curproc;
if ((error = getnewvnode(VT_NULL, mp, null_vnodeop_p, &vp)) != 0)
return (error);
@@ -211,14 +206,14 @@ loop:
vgone(cvp);
goto loop;
}
- if (vget(cvp, 0, p)) /* can't lock; will die! */
+ if (vget(cvp, 0)) /* can't lock; will die! */
goto loop;
break;
}
vp->v_hashchain = cvpp;
vp->v_specnext = *cvpp;
- vp->v_specmountpoint = NULL;
+ vp->v_specflags = 0;
*cvpp = vp;
#ifdef DIAGNOSTIC
if (cvp == NULLVP)
@@ -254,7 +249,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) {
/*
@@ -303,7 +297,7 @@ null_node_create(mp, lowervp, newvpp, takelock)
upper layer lock */
VTONULL(aliasvp)->null_flags |= NULL_LLOCK;
if (takelock)
- vn_lock(aliasvp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(aliasvp);
*newvpp = aliasvp;
return (0);
diff --git a/sys/miscfs/nullfs/null_vfsops.c b/sys/miscfs/nullfs/null_vfsops.c
index 26dcb22db51..5e59d14d7c7 100644
--- a/sys/miscfs/nullfs/null_vfsops.c
+++ b/sys/miscfs/nullfs/null_vfsops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: null_vfsops.c,v 1.5 1997/10/06 15:19:07 csapuntz Exp $ */
+/* $OpenBSD: null_vfsops.c,v 1.6 1997/10/06 20:20:30 deraadt Exp $ */
/* $NetBSD: null_vfsops.c,v 1.11 1996/05/10 22:50:56 jtk Exp $ */
/*
@@ -48,7 +48,6 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/proc.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/vnode.h>
@@ -139,7 +138,7 @@ nullfs_mount(mp, path, data, ndp, p)
/*
* Unlock the node (either the lower or the alias)
*/
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
/*
* Make sure the node alias worked
*/
@@ -159,7 +158,7 @@ nullfs_mount(mp, path, data, ndp, p)
if (NULLVPTOLOWERVP(nullm_rootvp)->v_mount->mnt_flag & MNT_LOCAL)
mp->mnt_flag |= MNT_LOCAL;
mp->mnt_data = (qaddr_t) xmp;
- vfs_getnewfsid(mp);
+ getnewfsid(mp, makefstype(MOUNT_LOFS));
(void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
@@ -201,12 +200,16 @@ nullfs_unmount(mp, mntflags, p)
struct vnode *nullm_rootvp = MOUNTTONULLMOUNT(mp)->nullm_rootvp;
int error;
int flags = 0;
+ extern int doforce;
#ifdef NULLFS_DIAGNOSTIC
printf("nullfs_unmount(mp = %p)\n", mp);
#endif
if (mntflags & MNT_FORCE) {
+ /* lofs can never be rootfs so don't check for it */
+ if (!doforce)
+ return (EINVAL);
flags |= FORCECLOSE;
}
@@ -250,7 +253,6 @@ nullfs_root(mp, vpp)
struct vnode **vpp;
{
struct vnode *vp;
- struct proc *p = curproc;
#ifdef NULLFS_DIAGNOSTIC
printf("nullfs_root(mp = %p, vp = %p->%p)\n", mp,
@@ -264,7 +266,7 @@ nullfs_root(mp, vpp)
*/
vp = MOUNTTONULLMOUNT(mp)->nullm_rootvp;
VREF(vp);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
*vpp = vp;
return 0;
}
@@ -318,7 +320,7 @@ nullfs_statfs(mp, sbp, p)
bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
}
- strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
+ strncpy(sbp->f_fstypename, mp->mnt_op->vfs_name, MFSNAMELEN);
return (0);
}
@@ -368,10 +370,8 @@ nullfs_vptofh(vp, fhp)
return (EOPNOTSUPP);
}
-#define nullfs_sysctl ((int (*) __P((int *, u_int, void *, size_t *, void *, \
- size_t, struct proc *)))eopnotsupp)
-
struct vfsops null_vfsops = {
+ MOUNT_NULL,
nullfs_mount,
nullfs_start,
nullfs_unmount,
@@ -383,5 +383,4 @@ struct vfsops null_vfsops = {
nullfs_fhtovp,
nullfs_vptofh,
nullfs_init,
- nullfs_sysctl
};
diff --git a/sys/miscfs/nullfs/null_vnops.c b/sys/miscfs/nullfs/null_vnops.c
index b4068bee664..b5d2775bba1 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.6 1997/10/06 15:19:07 csapuntz Exp $ */
+/* $OpenBSD: null_vnops.c,v 1.7 1997/10/06 20:20:31 deraadt Exp $ */
/* $NetBSD: null_vnops.c,v 1.7 1996/05/10 22:51:01 jtk Exp $ */
/*
@@ -98,18 +98,10 @@
* Although bypass handles most operations,
* vop_getattr, _inactive, _reclaim, and _print are not bypassed.
* Vop_getattr must change the fsid being returned.
- * Vop_lock and vop_unlock must handle any locking for the
- * current vnode as well as pass the lock request down.
* Vop_inactive and vop_reclaim are not bypassed so that
- * the can handle freeing null-layer specific data. Vop_print
- * is not bypassed to avoid excessive debugging information.
- * Also, certain vnod eoperations change the locking state within
- * the operation (create, mknod, remove, link, rename, mkdir, rmdir,
- * and symlink). Ideally, these operations should not change the
- * lock state, but should be changed to let the caller of the
- * function unlock them.Otherwise all intermediate vnode layers
- * (such as union, umapfs, etc) must catch these functions
- * to the necessary locking at their layer
+ * they can handle freeing null-layer specific data.
+ * Vop_print is not bypassed to avoid excessive debugging
+ * information.
*
*
* INSTANTIATING VNODE STACKS
@@ -190,6 +182,7 @@
int null_bug_bypass = 0; /* for debugging: enables bypass printf'ing */
+int null_bypass __P((void *));
int null_getattr __P((void *));
int null_inactive __P((void *));
int null_reclaim __P((void *));
@@ -517,7 +510,6 @@ null_lock(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);
@@ -541,7 +533,7 @@ start:
* 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);
+ VOP_LOCK(nn->null_lowervp);
nn->null_flags |= NULL_LLOCK;
}
@@ -576,7 +568,6 @@ 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
@@ -596,7 +587,7 @@ null_unlock(v)
nn->null_flags &= ~NULL_LOCKED;
if ((nn->null_flags & NULL_LLOCK) != 0)
- VOP_UNLOCK(nn->null_lowervp, 0, p);
+ VOP_UNLOCK(nn->null_lowervp);
nn->null_flags &= ~NULL_LLOCK;
@@ -632,21 +623,20 @@ null_lookup(v)
register int error;
register struct vnode *dvp;
int flags = ap->a_cnp->cn_flags;
- struct componentname *cnp = ap->a_cnp;
- struct proc *p = cnp->cn_proc;
+
#ifdef NULLFS_DIAGNOSTIC
- printf("null_lookup: dvp=%lx, name='%s'\n",
- ap->a_dvp, cnp->cn_nameptr);
+ printf("null_lookup: dvp=%p, name='%s'\n",
+ ap->a_dvp, ap->a_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;
+ ap->a_cnp->cn_flags |= LOCKPARENT;
error = null_bypass(ap);
if (!(flags & LOCKPARENT))
- cnp->cn_flags &= ~LOCKPARENT;
+ ap->a_cnp->cn_flags &= ~LOCKPARENT;
if (error)
/*
@@ -707,20 +697,20 @@ null_lookup(v)
* 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);
+ VOP_UNLOCK(dvp);
+ VOP_LOCK(*ap->a_vpp);
/*
* 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);
+ VOP_LOCK(dvp);
} 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);
+ VOP_LOCK(*ap->a_vpp);
/*
* underlying starting dir comes back locked
* if lockparent (we set it) and no error
@@ -750,7 +740,7 @@ null_lookup(v)
* end yet, !(flags & ISLASTCN)
*/
if (!(flags & LOCKPARENT) || !(flags & ISLASTCN))
- VOP_UNLOCK(dvp, 0, p);
+ VOP_UNLOCK(dvp);
}
}
return error;
diff --git a/sys/miscfs/procfs/procfs.h b/sys/miscfs/procfs/procfs.h
index 3dd780253c2..413c6509b4f 100644
--- a/sys/miscfs/procfs/procfs.h
+++ b/sys/miscfs/procfs/procfs.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: procfs.h,v 1.6 1997/10/06 15:19:10 csapuntz Exp $ */
+/* $OpenBSD: procfs.h,v 1.7 1997/10/06 20:20:33 deraadt Exp $ */
/* $NetBSD: procfs.h,v 1.17 1996/02/12 15:01:41 christos Exp $ */
/*
@@ -128,9 +128,7 @@ int procfs_rw __P((void *));
extern int (**procfs_vnodeop_p) __P((void *));
extern struct vfsops procfs_vfsops;
-struct vfsconf;
-
-int procfs_init __P((struct vfsconf *));
+void procfs_init __P((void));
int procfs_root __P((struct mount *, struct vnode **));
#endif /* _KERNEL */
diff --git a/sys/miscfs/procfs/procfs_subr.c b/sys/miscfs/procfs/procfs_subr.c
index 89ace835528..24cae7cb845 100644
--- a/sys/miscfs/procfs/procfs_subr.c
+++ b/sys/miscfs/procfs/procfs_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: procfs_subr.c,v 1.9 1997/10/06 15:19:10 csapuntz Exp $ */
+/* $OpenBSD: procfs_subr.c,v 1.10 1997/10/06 20:20:33 deraadt Exp $ */
/* $NetBSD: procfs_subr.c,v 1.15 1996/02/12 15:01:42 christos Exp $ */
/*
@@ -54,14 +54,10 @@
static TAILQ_HEAD(, pfsnode) pfshead;
static int pfsvplock;
-/*ARGSUSED*/
-int
-procfs_init(vfsp)
- struct vfsconf *vfsp;
-
+void
+procfs_init(void)
{
TAILQ_INIT(&pfshead);
- return (0);
}
/*
@@ -97,7 +93,6 @@ procfs_allocvp(mp, vpp, pid, pfs_type)
long pid;
pfstype pfs_type;
{
- struct proc *p = curproc;
struct pfsnode *pfs;
struct vnode *vp;
int error;
@@ -108,7 +103,7 @@ loop:
if (pfs->pfs_pid == pid &&
pfs->pfs_type == pfs_type &&
vp->v_mount == mp) {
- if (vget(vp, 0, p))
+ if (vget(vp, 0))
goto loop;
*vpp = vp;
return (0);
diff --git a/sys/miscfs/procfs/procfs_vfsops.c b/sys/miscfs/procfs/procfs_vfsops.c
index a9e6c99aae7..c2c31b37595 100644
--- a/sys/miscfs/procfs/procfs_vfsops.c
+++ b/sys/miscfs/procfs/procfs_vfsops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: procfs_vfsops.c,v 1.5 1997/10/06 15:19:11 csapuntz Exp $ */
+/* $OpenBSD: procfs_vfsops.c,v 1.6 1997/10/06 20:20:34 deraadt Exp $ */
/* $NetBSD: procfs_vfsops.c,v 1.25 1996/02/09 22:40:53 christos Exp $ */
/*
@@ -61,7 +61,14 @@ int procfs_mount __P((struct mount *, char *, caddr_t,
struct nameidata *, struct proc *));
int procfs_start __P((struct mount *, int, struct proc *));
int procfs_unmount __P((struct mount *, int, struct proc *));
+int procfs_quotactl __P((struct mount *, int, uid_t, caddr_t,
+ struct proc *));
int procfs_statfs __P((struct mount *, struct statfs *, struct proc *));
+int procfs_sync __P((struct mount *, int, struct ucred *, struct proc *));
+int procfs_vget __P((struct mount *, ino_t, struct vnode **));
+int procfs_fhtovp __P((struct mount *, struct fid *, struct mbuf *,
+ struct vnode **, int *, struct ucred **));
+int procfs_vptofh __P((struct vnode *, struct fid *));
/*
* VFS Operations.
*
@@ -88,7 +95,7 @@ procfs_mount(mp, path, data, ndp, p)
mp->mnt_flag |= MNT_LOCAL;
mp->mnt_data = 0;
- vfs_getnewfsid(mp);
+ getnewfsid(mp, makefstype(MOUNT_PROCFS));
(void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN, &size);
bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
@@ -172,25 +179,72 @@ procfs_statfs(mp, sbp, p)
bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
}
- strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
+ strncpy(sbp->f_fstypename, mp->mnt_op->vfs_name, MFSNAMELEN);
return (0);
}
+/*ARGSUSED*/
+int
+procfs_quotactl(mp, cmds, uid, arg, p)
+ struct mount *mp;
+ int cmds;
+ uid_t uid;
+ caddr_t arg;
+ struct proc *p;
+{
+
+ return (EOPNOTSUPP);
+}
+
+/*ARGSUSED*/
+int
+procfs_sync(mp, waitfor, uc, p)
+ struct mount *mp;
+ int waitfor;
+ struct ucred *uc;
+ struct proc *p;
+{
-#define procfs_sync ((int (*) __P((struct mount *, int, struct ucred *, \
- struct proc *)))nullop)
+ return (0);
+}
-#define procfs_fhtovp ((int (*) __P((struct mount *, struct fid *, \
- struct mbuf *, struct vnode **, int *, struct ucred **)))eopnotsupp)
-#define procfs_quotactl ((int (*) __P((struct mount *, int, uid_t, caddr_t, \
- struct proc *)))eopnotsupp)
-#define procfs_sysctl ((int (*) __P((int *, u_int, void *, size_t *, void *, \
- size_t, struct proc *)))eopnotsupp)
-#define procfs_vget ((int (*) __P((struct mount *, ino_t, struct vnode **))) \
- eopnotsupp)
-#define procfs_vptofh ((int (*) __P((struct vnode *, struct fid *)))eopnotsupp)
+/*ARGSUSED*/
+int
+procfs_vget(mp, ino, vpp)
+ struct mount *mp;
+ ino_t ino;
+ struct vnode **vpp;
+{
+
+ return (EOPNOTSUPP);
+}
+
+/*ARGSUSED*/
+int
+procfs_fhtovp(mp, fhp, mb, vpp, what, anon)
+ struct mount *mp;
+ struct fid *fhp;
+ struct mbuf *mb;
+ struct vnode **vpp;
+ int *what;
+ struct ucred **anon;
+{
+
+ return (EINVAL);
+}
+
+/*ARGSUSED*/
+int
+procfs_vptofh(vp, fhp)
+ struct vnode *vp;
+ struct fid *fhp;
+{
+
+ return (EINVAL);
+}
struct vfsops procfs_vfsops = {
+ MOUNT_PROCFS,
procfs_mount,
procfs_start,
procfs_unmount,
@@ -202,5 +256,4 @@ struct vfsops procfs_vfsops = {
procfs_fhtovp,
procfs_vptofh,
procfs_init,
- procfs_sysctl
};
diff --git a/sys/miscfs/procfs/procfs_vnops.c b/sys/miscfs/procfs/procfs_vnops.c
index 4700c4e2f73..3a7556f819a 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.7 1997/10/06 15:19:11 csapuntz Exp $ */
+/* $OpenBSD: procfs_vnops.c,v 1.8 1997/10/06 20:20:35 deraadt Exp $ */
/* $NetBSD: procfs_vnops.c,v 1.40 1996/03/16 23:52:55 christos Exp $ */
/*
@@ -728,7 +728,6 @@ procfs_lookup(v)
struct vnode **vpp = ap->a_vpp;
struct vnode *dvp = ap->a_dvp;
char *pname = cnp->cn_nameptr;
- struct proc *curp = curproc;
struct proc_target *pt;
struct vnode *fvp;
pid_t pid;
@@ -788,7 +787,7 @@ procfs_lookup(v)
fvp = procfs_findtextvp(p);
/* We already checked that it exists. */
VREF(fvp);
- vn_lock(fvp, LK_EXCLUSIVE | LK_RETRY, curp);
+ VOP_LOCK(fvp);
*vpp = fvp;
return (0);
}
@@ -840,6 +839,8 @@ procfs_readdir(v)
struct pfsnode *pfs;
int i;
int error;
+ u_long *cookies = ap->a_cookies;
+ int ncookies = ap->a_ncookies;
pfs = VTOPFS(ap->a_vp);
@@ -879,6 +880,8 @@ procfs_readdir(v)
if ((error = uiomove((caddr_t)&d, UIO_MX, uio)) != 0)
break;
+ if (ncookies-- > 0)
+ *cookies++ = i + 1;
}
break;
@@ -940,6 +943,8 @@ procfs_readdir(v)
if ((error = uiomove((caddr_t)&d, UIO_MX, uio)) != 0)
break;
+ if (ncookies-- > 0)
+ *cookies++ = i + 1;
}
done:
diff --git a/sys/miscfs/specfs/spec_vnops.c b/sys/miscfs/specfs/spec_vnops.c
index c9d59179f98..995870d11d0 100644
--- a/sys/miscfs/specfs/spec_vnops.c
+++ b/sys/miscfs/specfs/spec_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: spec_vnops.c,v 1.10 1997/10/06 15:19:12 csapuntz Exp $ */
+/* $OpenBSD: spec_vnops.c,v 1.11 1997/10/06 20:20:37 deraadt Exp $ */
/* $NetBSD: spec_vnops.c,v 1.29 1996/04/22 01:42:38 christos Exp $ */
/*
@@ -79,7 +79,6 @@ struct vnodeopv_entry_desc spec_vnodeop_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_mmap_desc, spec_mmap }, /* mmap */
{ &vop_fsync_desc, spec_fsync }, /* fsync */
{ &vop_seek_desc, spec_seek }, /* seek */
@@ -144,13 +143,8 @@ spec_open(v)
struct ucred *a_cred;
struct proc *a_p;
} */ *ap = v;
- struct proc *p = ap->a_p;
- struct vnode *vp = ap->a_vp;
-#if 0
- struct vnode *bvp;
- dev_t bdev;
-#endif
- dev_t dev = (dev_t)vp->v_rdev;
+ struct vnode *bvp, *vp = ap->a_vp;
+ dev_t bdev, dev = (dev_t)vp->v_rdev;
register int maj = major(dev);
int error;
@@ -178,7 +172,6 @@ spec_open(v)
* devices whose corresponding block devices are
* currently mounted.
*/
-#if 0
if (securelevel >= 1) {
if ((bdev = chrtoblk(dev)) != NODEV &&
vfinddev(bdev, VBLK, &bvp) &&
@@ -188,13 +181,12 @@ spec_open(v)
if (iskmemdev(dev))
return (EPERM);
}
-#endif
}
if (cdevsw[maj].d_type == D_TTY)
vp->v_flag |= VISTTY;
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
error = (*cdevsw[maj].d_open)(dev, ap->a_mode, S_IFCHR, ap->a_p);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
return (error);
case VBLK:
@@ -263,10 +255,10 @@ spec_read(v)
switch (vp->v_type) {
case VCHR:
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
error = (*cdevsw[major(vp->v_rdev)].d_read)
(vp->v_rdev, uio, ap->a_ioflag);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
return (error);
case VBLK:
@@ -314,19 +306,6 @@ spec_read(v)
/* NOTREACHED */
}
-int
-spec_inactive(v)
- void *v;
-{
- struct vop_inactive_args /* {
- struct vnode *a_vp;
- struct proc *a_p;
- } */ *ap = v;
-
- VOP_UNLOCK(ap->a_vp, 0, ap->a_p);
- return (0);
-}
-
/*
* Vnode op for write
*/
@@ -362,10 +341,10 @@ spec_write(v)
switch (vp->v_type) {
case VCHR:
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
error = (*cdevsw[major(vp->v_rdev)].d_write)
(vp->v_rdev, uio, ap->a_ioflag);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
return (error);
case VBLK:
@@ -535,74 +514,6 @@ loop:
/*
* Just call the device strategy routine
*/
-int fs_read[16], fs_write[16];
-
-int cur_found[10];
-
-int fs_bwrite[64][10];
-int fs_bwrite_cnt[64];
-int num_found;
-
-int num_levels = 4;
-#include <machine/cpu.h>
-#include <machine/pcb.h>
-
-int find_stack(int);
-
-int find_stack(int levels)
-
-{
- struct pcb stack;
- int *eip, *ebp;
-
- savectx(&stack);
- ebp = (int *)stack.pcb_ebp;
- eip = (int *) *(ebp + 1);
-
- while ((int)ebp > 0xf0000000 && levels--) {
- eip = (int *) *(ebp + 1);
-
- ebp = (int *) *ebp;
- }
-
- return ((int)eip);
-}
-
-void track_write __P((void));
-
-void track_write(void)
-
-{
- int idx, cnt;
-
- for (idx = 0; idx < 10; idx++) {
- cur_found[idx] = find_stack(idx + num_levels);
- }
-
- for (cnt = 0; cnt < num_found; cnt++) {
- for (idx = 0; idx < 10; idx++) {
- if (fs_bwrite[cnt][idx] != cur_found[idx])
- goto next_iter;
- }
-
- fs_bwrite_cnt[cnt]++;
- break;
- next_iter:
- }
-
- if ((cnt == num_found) &&
- (num_found != 64)) {
- for (idx = 0; idx < 10; idx++) {
- fs_bwrite[num_found][idx] = cur_found[idx];
- }
-
- fs_bwrite_cnt[num_found] = 1;
- num_found++;
- }
-
- return;
-}
-
int
spec_strategy(v)
void *v;
@@ -610,31 +521,8 @@ spec_strategy(v)
struct vop_strategy_args /* {
struct buf *a_bp;
} */ *ap = v;
- struct buf *bp;
-
- int maj = major(ap->a_bp->b_dev);
-
- if ((maj >= 0) && (maj < 16)) {
- if (ap->a_bp->b_flags & B_READ)
- fs_read[maj]++;
- else {
- fs_write[maj]++;
- if (maj == 4)
- track_write();
-
- }
- }
-
-#if 0
- assert (!(flags & (B_DELWRI | B_DONE)));
-#endif
- bp = ap->a_bp;
-
- if (LIST_FIRST(&bp->b_dep) != NULL && bioops.io_start)
- (*bioops.io_start)(bp);
-
- (*bdevsw[maj].d_strategy)(ap->a_bp);
+ (*bdevsw[major(ap->a_bp->b_dev)].d_strategy)(ap->a_bp);
return (0);
}
@@ -650,16 +538,33 @@ spec_bmap(v)
daddr_t a_bn;
struct vnode **a_vpp;
daddr_t *a_bnp;
- int *a_runp;
} */ *ap = v;
if (ap->a_vpp != NULL)
*ap->a_vpp = ap->a_vp;
if (ap->a_bnp != NULL)
*ap->a_bnp = ap->a_bn;
- if (ap->a_runp != NULL)
- *ap->a_runp = 0;
-
+ return (0);
+}
+
+/*
+ * At the moment we do not do any locking.
+ */
+/* ARGSUSED */
+int
+spec_lock(v)
+ void *v;
+{
+
+ return (0);
+}
+
+/* ARGSUSED */
+int
+spec_unlock(v)
+ void *v;
+{
+
return (0);
}
@@ -716,9 +621,7 @@ spec_close(v)
* we must invalidate any in core blocks, so that
* we can, for instance, change floppy disks.
*/
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, ap->a_p);
error = vinvalbuf(vp, V_SAVE, ap->a_cred, ap->a_p, 0, 0);
- VOP_UNLOCK(vp, 0, ap->a_p);
if (error)
return (error);
/*
diff --git a/sys/miscfs/specfs/specdev.h b/sys/miscfs/specfs/specdev.h
index 94f98ac3c70..23d90b7c891 100644
--- a/sys/miscfs/specfs/specdev.h
+++ b/sys/miscfs/specfs/specdev.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: specdev.h,v 1.4 1997/10/06 15:19:13 csapuntz Exp $ */
+/* $OpenBSD: specdev.h,v 1.5 1997/10/06 20:20:39 deraadt Exp $ */
/* $NetBSD: specdev.h,v 1.12 1996/02/13 13:13:01 mycroft Exp $ */
/*
@@ -44,7 +44,7 @@
struct specinfo {
struct vnode **si_hashchain;
struct vnode *si_specnext;
- struct mount *si_mountpoint;
+ long si_flags;
dev_t si_rdev;
struct lockf *si_lockf;
};
@@ -54,10 +54,15 @@ struct specinfo {
#define v_rdev v_specinfo->si_rdev
#define v_hashchain v_specinfo->si_hashchain
#define v_specnext v_specinfo->si_specnext
-#define v_specmountpoint v_specinfo->si_mountpoint
+#define v_specflags v_specinfo->si_flags
#define v_speclockf v_specinfo->si_lockf
/*
+ * Flags for specinfo
+ */
+#define SI_MOUNTEDON 0x0001 /* block special device is mounted on */
+
+/*
* Special device management
*/
#define SPECHSZ 64
@@ -108,14 +113,14 @@ int spec_fsync __P((void *));
#define spec_readdir spec_badop
#define spec_readlink spec_badop
#define spec_abortop spec_badop
-int spec_inactive __P((void *));
+#define spec_inactive nullop
#define spec_reclaim nullop
-#define spec_lock vop_nolock
-#define spec_unlock vop_nounlock
-#define spec_islocked vop_noislocked
+int spec_lock __P((void *));
+int spec_unlock __P((void *));
int spec_bmap __P((void *));
int spec_strategy __P((void *));
int spec_print __P((void *));
+#define spec_islocked nullop
int spec_pathconf __P((void *));
int spec_advlock __P((void *));
#define spec_blkatoff spec_badop
@@ -125,4 +130,3 @@ int spec_advlock __P((void *));
#define spec_truncate nullop
#define spec_update nullop
#define spec_bwrite vn_bwrite
-#define spec_revoke vop_revoke
diff --git a/sys/miscfs/umapfs/umap.h b/sys/miscfs/umapfs/umap.h
index 772bce10c4b..2b8d97ae56d 100644
--- a/sys/miscfs/umapfs/umap.h
+++ b/sys/miscfs/umapfs/umap.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: umap.h,v 1.6 1997/10/06 15:19:14 csapuntz Exp $ */
+/* $OpenBSD: umap.h,v 1.7 1997/10/06 20:20:40 deraadt Exp $ */
/* $NetBSD: umap.h,v 1.6 1996/02/09 22:41:00 christos Exp $ */
/*
@@ -94,6 +94,6 @@ extern struct vnode *umap_checkvp __P((struct vnode *vp, char *fil, int lno));
extern int (**umap_vnodeop_p) __P((void *));
extern struct vfsops umap_vfsops;
-int umapfs_init __P((struct vfsconf *));
+void umapfs_init __P((void));
#endif /* _KERNEL */
diff --git a/sys/miscfs/umapfs/umap_subr.c b/sys/miscfs/umapfs/umap_subr.c
index 93bbdd51917..fd234f356c9 100644
--- a/sys/miscfs/umapfs/umap_subr.c
+++ b/sys/miscfs/umapfs/umap_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: umap_subr.c,v 1.9 1997/10/06 15:19:14 csapuntz Exp $ */
+/* $OpenBSD: umap_subr.c,v 1.10 1997/10/06 20:20:41 deraadt Exp $ */
/* $NetBSD: umap_subr.c,v 1.8 1996/03/05 02:35:39 thorpej Exp $ */
/*
@@ -42,7 +42,6 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/proc.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/vnode.h>
@@ -76,15 +75,14 @@ static int umap_node_alloc __P((struct mount *, struct vnode *,
/*
* Initialise cache headers
*/
-int
-umapfs_init(struct vfsconf *vfsp)
+void
+umapfs_init()
{
#ifdef UMAPFS_DIAGNOSTIC
printf("umapfs_init\n"); /* printed during system boot */
#endif
umap_node_hashtbl = hashinit(NUMAPNODECACHE, M_CACHE, &umap_node_hash);
- return (0);
}
/*
@@ -143,7 +141,6 @@ umap_node_find(mp, targetvp)
struct mount *mp;
struct vnode *targetvp;
{
- struct proc *p = curproc;
struct umap_node_hashhead *hd;
struct umap_node *a;
struct vnode *vp;
@@ -169,7 +166,7 @@ loop:
* stuff, but we don't want to lock
* the lower node.
*/
- if (vget(vp, 0, p)) {
+ if (vget(vp, 0)) {
#ifdef UMAPFS_DIAGNOSTIC
printf ("umap_node_find: vget failed.\n");
#endif
@@ -201,7 +198,6 @@ umap_node_alloc(mp, lowervp, vpp)
struct umap_node *xp;
struct vnode *vp, *nvp;
int error;
- struct proc *p = curproc;
extern int (**dead_vnodeop_p) __P((void *));
if ((error = getnewvnode(VT_UMAP, mp, umap_vnodeop_p, &vp)) != 0)
@@ -263,14 +259,14 @@ loop:
vgone(cvp);
goto loop;
}
- if (vget(cvp, 0, p)) /* can't lock; will die! */
+ if (vget(cvp, 0)) /* can't lock; will die! */
goto loop;
break;
}
vp->v_hashchain = cvpp;
vp->v_specnext = *cvpp;
- vp->v_specmountpoint = NULL;
+ vp->v_specflags = 0;
*cvpp = vp;
#ifdef DIAGNOSTIC
if (cvp == NULLVP)
diff --git a/sys/miscfs/umapfs/umap_vfsops.c b/sys/miscfs/umapfs/umap_vfsops.c
index 6008d21603c..e8dd5a9044d 100644
--- a/sys/miscfs/umapfs/umap_vfsops.c
+++ b/sys/miscfs/umapfs/umap_vfsops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: umap_vfsops.c,v 1.9 1997/10/06 15:19:15 csapuntz Exp $ */
+/* $OpenBSD: umap_vfsops.c,v 1.10 1997/10/06 20:20:41 deraadt Exp $ */
/* $NetBSD: umap_vfsops.c,v 1.9 1996/02/09 22:41:05 christos Exp $ */
/*
@@ -48,7 +48,6 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/time.h>
-#include <sys/proc.h>
#include <sys/types.h>
#include <sys/vnode.h>
#include <sys/mount.h>
@@ -182,7 +181,7 @@ umapfs_mount(mp, path, data, ndp, p)
/*
* Unlock the node (either the lower or the alias)
*/
- VOP_UNLOCK(vp, 0, p);
+ VOP_UNLOCK(vp);
/*
* Make sure the node alias worked
*/
@@ -202,7 +201,7 @@ umapfs_mount(mp, path, data, ndp, p)
if (UMAPVPTOLOWERVP(umapm_rootvp)->v_mount->mnt_flag & MNT_LOCAL)
mp->mnt_flag |= MNT_LOCAL;
mp->mnt_data = (qaddr_t) amp;
- vfs_getnewfsid(mp);
+ getnewfsid(mp, makefstype(MOUNT_UMAP));
(void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
@@ -243,12 +242,16 @@ umapfs_unmount(mp, mntflags, p)
struct vnode *umapm_rootvp = MOUNTTOUMAPMOUNT(mp)->umapm_rootvp;
int error;
int flags = 0;
+ extern int doforce;
#ifdef UMAPFS_DIAGNOSTIC
printf("umapfs_unmount(mp = %p)\n", mp);
#endif
if (mntflags & MNT_FORCE) {
+ /* lofs can never be rootfs so don't check for it */
+ if (!doforce)
+ return (EINVAL);
flags |= FORCECLOSE;
}
@@ -291,7 +294,6 @@ umapfs_root(mp, vpp)
struct mount *mp;
struct vnode **vpp;
{
- struct proc *p = curproc;
struct vnode *vp;
#ifdef UMAPFS_DIAGNOSTIC
@@ -306,7 +308,7 @@ umapfs_root(mp, vpp)
*/
vp = MOUNTTOUMAPMOUNT(mp)->umapm_rootvp;
VREF(vp);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ VOP_LOCK(vp);
*vpp = vp;
return (0);
}
@@ -359,7 +361,7 @@ umapfs_statfs(mp, sbp, p)
bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
}
- strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
+ strncpy(sbp->f_fstypename, mp->mnt_op->vfs_name, MFSNAMELEN);
return (0);
}
@@ -405,11 +407,8 @@ umapfs_vptofh(vp, fhp)
return VFS_VPTOFH(UMAPVPTOLOWERVP(vp), fhp);
}
-#define umapfs_sysctl ((int (*) __P((int *, u_int, void *, size_t *, void *, \
- size_t, struct proc *)))eopnotsupp)
-
-
struct vfsops umap_vfsops = {
+ MOUNT_UMAP,
umapfs_mount,
umapfs_start,
umapfs_unmount,
@@ -421,5 +420,4 @@ struct vfsops umap_vfsops = {
umapfs_fhtovp,
umapfs_vptofh,
umapfs_init,
- umapfs_sysctl
};
diff --git a/sys/miscfs/umapfs/umap_vnops.c b/sys/miscfs/umapfs/umap_vnops.c
index a3fc89bccd5..18995119006 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.7 1997/10/06 15:19:15 csapuntz Exp $ */
+/* $OpenBSD: umap_vnops.c,v 1.8 1997/10/06 20:20:42 deraadt Exp $ */
/* $NetBSD: umap_vnops.c,v 1.5.4.1 1996/05/25 22:13:35 jtc Exp $ */
/*
@@ -52,7 +52,6 @@
#include <sys/namei.h>
#include <sys/malloc.h>
#include <sys/buf.h>
-#include <miscfs/nullfs/null.h>
#include <miscfs/umapfs/umap.h>
@@ -66,8 +65,6 @@ int umap_print __P((void *));
int umap_rename __P((void *));
int umap_strategy __P((void *));
int umap_bwrite __P((void *));
-int umap_unlock __P((void *));
-int umap_lock __P((void *));
/*
* Global vfs data structures
@@ -86,8 +83,7 @@ struct vnodeopv_entry_desc umap_vnodeop_entries[] = {
{ &vop_reclaim_desc, umap_reclaim },
{ &vop_print_desc, umap_print },
{ &vop_rename_desc, umap_rename },
- { &vop_lock_desc, umap_lock },
- { &vop_unlock_desc, umap_unlock },
+
{ &vop_strategy_desc, umap_strategy },
{ &vop_bwrite_desc, umap_bwrite },
@@ -382,54 +378,10 @@ umap_inactive(v)
* cache and reusable.
*
*/
- VOP_UNLOCK(ap->a_vp, 0, ap->a_p);
+ VOP_UNLOCK(ap->a_vp);
return (0);
}
-/*
- * We need to process our own vnode lock and then clear the
- * interlock flag as it applies only to our vnode, not the
- * vnodes below us on the stack.
- */
-int
-umap_lock(v)
- void *v;
-{
- struct vop_lock_args /* {
- struct vnode *a_vp;
- int a_flags;
- struct proc *a_p;
- } */ *ap = v;
-
- vop_nolock(ap);
- if ((ap->a_flags & LK_TYPE_MASK) == LK_DRAIN)
- return (0);
- ap->a_flags &= ~LK_INTERLOCK;
- return (null_bypass(ap));
-}
-
-/*
- * We need to process our own vnode unlock and then clear the
- * interlock flag as it applies only to our vnode, not the
- * vnodes below us on the stack.
- */
-int
-umap_unlock(v)
- void *v;
-{
- struct vop_unlock_args /* {
- struct vnode *a_vp;
- int a_flags;
- struct proc *a_p;
- } */ *ap = v;
-
- vop_nounlock(ap);
- ap->a_flags &= ~LK_INTERLOCK;
- return (null_bypass(ap));
-}
-
-
-
int
umap_reclaim(v)
void *v;