diff options
author | 1997-10-06 20:19:26 +0000 | |
---|---|---|
committer | 1997-10-06 20:19:26 +0000 | |
commit | f6d35f956ac60c4dbcc91b018b2bcefd71ad933f (patch) | |
tree | 918af077b7c363fb7d19243c4ecb7f0165b3bc65 /sys/miscfs | |
parent | Build generic and genericsbc kernels into snapshot and distribute them (diff) | |
download | wireguard-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.c | 24 | ||||
-rw-r--r-- | sys/miscfs/fifofs/fifo.h | 11 | ||||
-rw-r--r-- | sys/miscfs/fifofs/fifo_vnops.c | 59 | ||||
-rw-r--r-- | sys/miscfs/kernfs/kernfs.h | 14 | ||||
-rw-r--r-- | sys/miscfs/kernfs/kernfs_vfsops.c | 95 | ||||
-rw-r--r-- | sys/miscfs/kernfs/kernfs_vnops.c | 77 | ||||
-rw-r--r-- | sys/miscfs/nullfs/null.h | 6 | ||||
-rw-r--r-- | sys/miscfs/nullfs/null_subr.c | 22 | ||||
-rw-r--r-- | sys/miscfs/nullfs/null_vfsops.c | 21 | ||||
-rw-r--r-- | sys/miscfs/nullfs/null_vnops.c | 44 | ||||
-rw-r--r-- | sys/miscfs/procfs/procfs.h | 6 | ||||
-rw-r--r-- | sys/miscfs/procfs/procfs_subr.c | 13 | ||||
-rw-r--r-- | sys/miscfs/procfs/procfs_vfsops.c | 83 | ||||
-rw-r--r-- | sys/miscfs/procfs/procfs_vnops.c | 11 | ||||
-rw-r--r-- | sys/miscfs/specfs/spec_vnops.c | 159 | ||||
-rw-r--r-- | sys/miscfs/specfs/specdev.h | 20 | ||||
-rw-r--r-- | sys/miscfs/umapfs/umap.h | 4 | ||||
-rw-r--r-- | sys/miscfs/umapfs/umap_subr.c | 16 | ||||
-rw-r--r-- | sys/miscfs/umapfs/umap_vfsops.c | 22 | ||||
-rw-r--r-- | sys/miscfs/umapfs/umap_vnops.c | 54 |
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; |