summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikeb <mikeb@openbsd.org>2016-04-01 11:51:55 +0000
committermikeb <mikeb@openbsd.org>2016-04-01 11:51:55 +0000
commitc42366fecd1a7720cd13782180f75778eaf5675a (patch)
tree7bf0023f850a70c131d1ae128afcf2f0627af582
parentTweak rcctl wording. (diff)
downloadwireguard-openbsd-c42366fecd1a7720cd13782180f75778eaf5675a.tar.xz
wireguard-openbsd-c42366fecd1a7720cd13782180f75778eaf5675a.zip
Revert the clone bitmap enlargement change
-rw-r--r--sys/kern/spec_vnops.c7
-rw-r--r--sys/kern/vfs_subr.c15
-rw-r--r--sys/sys/specdev.h5
3 files changed, 7 insertions, 20 deletions
diff --git a/sys/kern/spec_vnops.c b/sys/kern/spec_vnops.c
index 9a5e9e0f2b0..c8754e7a80b 100644
--- a/sys/kern/spec_vnops.c
+++ b/sys/kern/spec_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: spec_vnops.c,v 1.87 2016/03/31 20:00:17 natano Exp $ */
+/* $OpenBSD: spec_vnops.c,v 1.88 2016/04/01 11:51:55 mikeb Exp $ */
/* $NetBSD: spec_vnops.c,v 1.29 1996/04/22 01:42:38 christos Exp $ */
/*
@@ -707,14 +707,13 @@ spec_open_clone(struct vop_open_args *ap)
if (minor(vp->v_rdev) >= (1 << CLONE_SHIFT))
return (ENXIO);
- for (i = 1; i < CLONE_MAP_SZ * NBBY; i++) {
+ for (i = 1; i < sizeof(vp->v_specbitmap) * NBBY; i++)
if (isclr(vp->v_specbitmap, i)) {
setbit(vp->v_specbitmap, i);
break;
}
- }
- if (i == CLONE_MAP_SZ * NBBY)
+ if (i == sizeof(vp->v_specbitmap) * NBBY)
return (EBUSY); /* too many open instances */
error = cdevvp(makedev(major(vp->v_rdev),
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index fb4e22da8d9..629429b7e72 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_subr.c,v 1.241 2016/03/31 20:00:17 natano Exp $ */
+/* $OpenBSD: vfs_subr.c,v 1.242 2016/04/01 11:51:55 mikeb Exp $ */
/* $NetBSD: vfs_subr.c,v 1.53 1996/04/22 01:39:13 christos Exp $ */
/*
@@ -555,13 +555,7 @@ loop:
nvp->v_specnext = *vpp;
nvp->v_specmountpoint = NULL;
nvp->v_speclockf = NULL;
- nvp->v_specbitmap = NULL;
- if (nvp_rdev == VCHR &&
- (cdevsw[major(nvp_rdev)].d_flags & D_CLONE) &&
- minor(nvp_rdev) >> CLONE_SHIFT == 0) {
- nvp->v_specbitmap = malloc(CLONE_MAP_SZ, M_VNODE,
- M_WAITOK | M_ZERO);
- }
+ memset(nvp->v_specbitmap, 0, sizeof(nvp->v_specbitmap));
*vpp = nvp;
if (vp != NULLVP) {
nvp->v_flag |= VALIASED;
@@ -1099,11 +1093,6 @@ vgonel(struct vnode *vp, struct proc *p)
vx->v_flag &= ~VALIASED;
vp->v_flag &= ~VALIASED;
}
- if (vp->v_rdev == VCHR &&
- (cdevsw[major(vp->v_rdev)].d_flags & D_CLONE) &&
- minor(vp->v_rdev) >> CLONE_SHIFT == 0) {
- free(vp->v_specbitmap, M_VNODE, CLONE_MAP_SZ);
- }
free(vp->v_specinfo, M_VNODE, sizeof(struct specinfo));
vp->v_specinfo = NULL;
}
diff --git a/sys/sys/specdev.h b/sys/sys/specdev.h
index b550c720497..6bbfc28a680 100644
--- a/sys/sys/specdev.h
+++ b/sys/sys/specdev.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: specdev.h,v 1.35 2016/03/31 20:00:17 natano Exp $ */
+/* $OpenBSD: specdev.h,v 1.36 2016/04/01 11:51:55 mikeb Exp $ */
/* $NetBSD: specdev.h,v 1.12 1996/02/13 13:13:01 mycroft Exp $ */
/*
@@ -46,7 +46,7 @@ struct specinfo {
daddr_t si_lastr;
union {
struct vnode *ci_parent; /* pointer back to parent device */
- u_int8_t *ci_bitmap; /* bitmap of devices cloned off us */
+ u_int8_t ci_bitmap[8]; /* bitmap of devices cloned off us */
} si_ci;
};
@@ -71,7 +71,6 @@ struct cloneinfo {
* This gives us 8 bits for encoding the real minor number.
*/
#define CLONE_SHIFT 8
-#define CLONE_MAP_SZ 128
/*
* Special device management