diff --git a/lkm/procfs/Makefile b/lkm/procfs/Makefile index 5eca69b9b6c..59089e526e3 100644 --- a/lkm/procfs/Makefile +++ b/lkm/procfs/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.10 1998/07/01 17:02:57 bde Exp $ +# $Id: Makefile,v 1.11 1998/07/25 15:52:43 alex Exp $ .PATH: ${.CURDIR}/../../sys/miscfs/procfs KMOD= procfs_mod @@ -6,7 +6,7 @@ SRCS= opt_vmpage.h procfs_ctl.c procfs_map.c procfs_note.c procfs_status.c \ procfs_subr.c procfs_type.c procfs_vfsops.c procfs_vnops.c NOMAN= VFS_LKM= -CFLAGS+= -DPROCFS -DVFS_LKM_NO_DEFAULT_DISPATCH +CFLAGS+= -DPROCFS CLEANFILES+= opt_vmpage.h opt_vmpage.h: diff --git a/sys/fs/procfs/procfs_vfsops.c b/sys/fs/procfs/procfs_vfsops.c index fdd7a89db96..b84ae7fbe1a 100644 --- a/sys/fs/procfs/procfs_vfsops.c +++ b/sys/fs/procfs/procfs_vfsops.c @@ -36,7 +36,7 @@ * * @(#)procfs_vfsops.c 8.7 (Berkeley) 5/10/95 * - * $Id: procfs_vfsops.c,v 1.22 1998/06/07 17:11:58 dfr Exp $ + * $Id: procfs_vfsops.c,v 1.23 1998/07/25 15:52:44 alex Exp $ */ /* @@ -76,6 +76,7 @@ procfs_mount(mp, path, data, ndp, p) struct proc *p; { size_t size; + int error; if (UIO_MX & (UIO_MX-1)) { log(LOG_ERR, "procfs: invalid directory entry size\n"); @@ -85,6 +86,11 @@ procfs_mount(mp, path, data, ndp, p) if (mp->mnt_flag & MNT_UPDATE) return (EOPNOTSUPP); + if (mp->mnt_vfc->vfc_refcount == 1 && (error = at_exit(procfs_exit))) { + printf("procfs: cannot register procfs_exit with at_exit -- error %d\n", error); + return(error); + } + mp->mnt_flag |= MNT_LOCAL; mp->mnt_data = 0; vfs_getnewfsid(mp); @@ -112,6 +118,9 @@ procfs_unmount(mp, mntflags, p) int error; int flags = 0; + if (mp->mnt_vfc->vfc_refcount == 1) + rm_at_exit(procfs_exit); + if (mntflags & MNT_FORCE) flags |= FORCECLOSE; @@ -173,11 +182,6 @@ static int procfs_init(vfsp) struct vfsconf *vfsp; { - int error; - - if (error = at_exit(procfs_exit)) - printf("procfs: cannot register procfs_exit with at_exit -- error %d\n", error); - return (0); } @@ -208,20 +212,3 @@ static struct vfsops procfs_vfsops = { }; VFS_SET(procfs_vfsops, procfs, MOUNT_PROCFS, VFCF_SYNTHETIC); - -#ifdef VFS_LKM -static int -procfs_unload () -{ - rm_at_exit(procfs_exit); - return(0); -} - -int -procfs_mod(struct lkm_table *lkmtp, int cmd, int ver) -{ - MOD_DISPATCH(procfs, lkmtp, cmd, ver, lkm_nullcmd, - procfs_unload, lkm_nullcmd); -} -#endif - diff --git a/sys/miscfs/procfs/procfs_vfsops.c b/sys/miscfs/procfs/procfs_vfsops.c index fdd7a89db96..b84ae7fbe1a 100644 --- a/sys/miscfs/procfs/procfs_vfsops.c +++ b/sys/miscfs/procfs/procfs_vfsops.c @@ -36,7 +36,7 @@ * * @(#)procfs_vfsops.c 8.7 (Berkeley) 5/10/95 * - * $Id: procfs_vfsops.c,v 1.22 1998/06/07 17:11:58 dfr Exp $ + * $Id: procfs_vfsops.c,v 1.23 1998/07/25 15:52:44 alex Exp $ */ /* @@ -76,6 +76,7 @@ procfs_mount(mp, path, data, ndp, p) struct proc *p; { size_t size; + int error; if (UIO_MX & (UIO_MX-1)) { log(LOG_ERR, "procfs: invalid directory entry size\n"); @@ -85,6 +86,11 @@ procfs_mount(mp, path, data, ndp, p) if (mp->mnt_flag & MNT_UPDATE) return (EOPNOTSUPP); + if (mp->mnt_vfc->vfc_refcount == 1 && (error = at_exit(procfs_exit))) { + printf("procfs: cannot register procfs_exit with at_exit -- error %d\n", error); + return(error); + } + mp->mnt_flag |= MNT_LOCAL; mp->mnt_data = 0; vfs_getnewfsid(mp); @@ -112,6 +118,9 @@ procfs_unmount(mp, mntflags, p) int error; int flags = 0; + if (mp->mnt_vfc->vfc_refcount == 1) + rm_at_exit(procfs_exit); + if (mntflags & MNT_FORCE) flags |= FORCECLOSE; @@ -173,11 +182,6 @@ static int procfs_init(vfsp) struct vfsconf *vfsp; { - int error; - - if (error = at_exit(procfs_exit)) - printf("procfs: cannot register procfs_exit with at_exit -- error %d\n", error); - return (0); } @@ -208,20 +212,3 @@ static struct vfsops procfs_vfsops = { }; VFS_SET(procfs_vfsops, procfs, MOUNT_PROCFS, VFCF_SYNTHETIC); - -#ifdef VFS_LKM -static int -procfs_unload () -{ - rm_at_exit(procfs_exit); - return(0); -} - -int -procfs_mod(struct lkm_table *lkmtp, int cmd, int ver) -{ - MOD_DISPATCH(procfs, lkmtp, cmd, ver, lkm_nullcmd, - procfs_unload, lkm_nullcmd); -} -#endif - diff --git a/sys/modules/procfs/Makefile b/sys/modules/procfs/Makefile index 5eca69b9b6c..59089e526e3 100644 --- a/sys/modules/procfs/Makefile +++ b/sys/modules/procfs/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.10 1998/07/01 17:02:57 bde Exp $ +# $Id: Makefile,v 1.11 1998/07/25 15:52:43 alex Exp $ .PATH: ${.CURDIR}/../../sys/miscfs/procfs KMOD= procfs_mod @@ -6,7 +6,7 @@ SRCS= opt_vmpage.h procfs_ctl.c procfs_map.c procfs_note.c procfs_status.c \ procfs_subr.c procfs_type.c procfs_vfsops.c procfs_vnops.c NOMAN= VFS_LKM= -CFLAGS+= -DPROCFS -DVFS_LKM_NO_DEFAULT_DISPATCH +CFLAGS+= -DPROCFS CLEANFILES+= opt_vmpage.h opt_vmpage.h: