diff options
author | brian <brian@FreeBSD.org> | 2001-04-17 09:59:34 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2001-04-17 09:59:34 +0000 |
commit | 9d60715bcd487cf4e33a8a9bab9b1d50d6f392f3 (patch) | |
tree | efd1c7c3fd02548ae0262ed3c18e012692f7e1af | |
parent | 7ab9ec933893002f802e7b92a4a2f8a220064cbb (diff) | |
download | FreeBSD-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.
-rw-r--r-- | sys/net/if_tun.c | 8 |
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; |