aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2010-03-07 09:52:35 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2010-03-07 09:52:35 +0000
commit272a1b69012160be3a004c27e6ec6c0ace005ed9 (patch)
tree9bb81093446658ae77836df9991af9fd9c2e252c /sys
parent1b0154570eee6c21b5189f038c61afe3afaccfa2 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/net/if_tap.c13
-rw-r--r--sys/net/if_tun.c11
2 files changed, 5 insertions, 19 deletions
diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c
index 950e96ca9d23..93801f10412b 100644
--- a/sys/net/if_tap.c
+++ b/sys/net/if_tap.c
@@ -192,10 +192,6 @@ tap_clone_create(struct if_clone *ifc, int unit, caddr_t params)
if (i) {
dev = make_dev(&tap_cdevsw, unit | extra,
UID_ROOT, GID_WHEEL, 0600, "%s%d", ifc->ifc_name, unit);
- if (dev != NULL) {
- dev_ref(dev);
- dev->si_flags |= SI_CHEAPCLONE;
- }
}
tapcreate(dev);
@@ -300,6 +296,7 @@ tapmodevent(module_t mod, int type, void *data)
EVENTHANDLER_DEREGISTER(dev_clone, eh_tag);
if_clone_detach(&tap_cloner);
if_clone_detach(&vmnet_cloner);
+ drain_dev_clone_events();
mtx_lock(&tapmtx);
while ((tp = SLIST_FIRST(&taphead)) != NULL) {
@@ -381,12 +378,8 @@ tapclone(void *arg, struct ucred *cred, char *name, int namelen, struct cdev **d
name = devname;
}
- *dev = make_dev(&tap_cdevsw, unit | extra,
- UID_ROOT, GID_WHEEL, 0600, "%s", name);
- if (*dev != NULL) {
- dev_ref(*dev);
- (*dev)->si_flags |= SI_CHEAPCLONE;
- }
+ *dev = make_dev_credf(MAKEDEV_REF, &tap_cdevsw, unit | extra,
+ cred, UID_ROOT, GID_WHEEL, 0600, "%s", name);
}
if_clone_create(name, namelen, NULL);
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c
index 37b5e70302c1..1fa02ac9f11e 100644
--- a/sys/net/if_tun.c
+++ b/sys/net/if_tun.c
@@ -188,10 +188,6 @@ tun_clone_create(struct if_clone *ifc, int unit, caddr_t params)
/* No preexisting struct cdev *, create one */
dev = make_dev(&tun_cdevsw, unit,
UID_UUCP, GID_DIALER, 0600, "%s%d", ifc->ifc_name, unit);
- if (dev != NULL) {
- dev_ref(dev);
- dev->si_flags |= SI_CHEAPCLONE;
- }
}
tuncreate(ifc->ifc_name, dev);
@@ -237,12 +233,8 @@ tunclone(void *arg, struct ucred *cred, char *name, int namelen,
name = devname;
}
/* No preexisting struct cdev *, create one */
- *dev = make_dev(&tun_cdevsw, u,
+ *dev = make_dev_credf(MAKEDEV_REF, &tun_cdevsw, u, cred,
UID_UUCP, GID_DIALER, 0600, "%s", name);
- if (*dev != NULL) {
- dev_ref(*dev);
- (*dev)->si_flags |= SI_CHEAPCLONE;
- }
}
if_clone_create(name, namelen, NULL);
@@ -303,6 +295,7 @@ tunmodevent(module_t mod, int type, void *data)
case MOD_UNLOAD:
if_clone_detach(&tun_cloner);
EVENTHANDLER_DEREGISTER(dev_clone, tag);
+ drain_dev_clone_events();
mtx_lock(&tunmtx);
while ((tp = TAILQ_FIRST(&tunhead)) != NULL) {