summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2001-04-17 09:59:34 +0000
committerbrian <brian@FreeBSD.org>2001-04-17 09:59:34 +0000
commit9d60715bcd487cf4e33a8a9bab9b1d50d6f392f3 (patch)
treeefd1c7c3fd02548ae0262ed3c18e012692f7e1af /sys/net
parent7ab9ec933893002f802e7b92a4a2f8a220064cbb (diff)
downloadFreeBSD-src-9d60715bcd487cf4e33a8a9bab9b1d50d6f392f3.zip
FreeBSD-src-9d60715bcd487cf4e33a8a9bab9b1d50d6f392f3.tar.gz
Dont (ab)use drv2 to know if (si_flags & SI_NAMED) (pointed out by dd)
Call cdevsw_remove when we unload.
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_tun.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c
index af94023..ddd21e6 100644
--- a/sys/net/if_tun.c
+++ b/sys/net/if_tun.c
@@ -107,7 +107,6 @@ tun_clone(arg, name, namelen, dev)
return;
*dev = make_dev(&tun_cdevsw, unit2minor(u),
UID_ROOT, GID_WHEEL, 0600, "tun%d", u);
- (*dev)->si_drv2 = (void *)1; /* Mark it as make_dev()'d */
}
static int
@@ -140,10 +139,11 @@ tun_modevent(module_t mod, int type, void *data)
tunhead = tp->next;
bpfdetach(&tp->tun_if);
if_detach(&tp->tun_if);
- KASSERT(dev->si_drv2 != NULL, ("Bad si_drv2 value"));
+ KASSERT(dev->si_flags & SI_NAMED, ("Missing make_dev"));
destroy_dev(dev);
FREE(tp, M_TUN);
}
+ cdevsw_remove(&tun_cdevsw);
EVENTHANDLER_DEREGISTER(dev_clone, tag);
break;
}
@@ -180,11 +180,9 @@ tuncreate(dev)
struct tun_softc *sc;
struct ifnet *ifp;
- if (dev->si_drv2 == NULL) {
+ if (!(dev->si_flags & SI_NAMED))
dev = make_dev(&tun_cdevsw, minor(dev),
UID_UUCP, GID_DIALER, 0600, "tun%d", dev2unit(dev));
- dev->si_drv2 = (void *)1;
- }
MALLOC(sc, struct tun_softc *, sizeof(*sc), M_TUN, M_WAITOK | M_ZERO);
sc->tun_flags = TUN_INITED;
OpenPOWER on IntegriCloud