Index: sys/geom/geom_dev.c =================================================================== --- sys/geom/geom_dev.c (revision 209843) +++ sys/geom/geom_dev.c (working copy) @@ -126,8 +126,15 @@ g_dev_taste(struct g_class *mp, struct g error = g_attach(cp, pp); KASSERT(error == 0, ("g_dev_taste(%s) failed to g_attach, err=%d", pp->name, error)); - dev = make_dev(&g_dev_cdevsw, 0, - UID_ROOT, GID_OPERATOR, 0640, "%s", gp->name); + error = make_dev_p(MAKEDEV_CHECKNAME | MAKEDEV_WAITOK, &dev, + &g_dev_cdevsw, NULL, UID_ROOT, GID_OPERATOR, 0640, "%s", gp->name); + if (error != 0) { + gp->softc = NULL; + printf( + "g_dev_taste(): make_dev_p() failed (gp->name=%s, error=%d)\n", + gp->name, error); + return (NULL); + } if (pp->flags & G_PF_CANDELETE) dev->si_flags |= SI_CANDELETE; dev->si_iosize_max = MAXPHYS; @@ -430,12 +437,14 @@ g_dev_orphan(struct g_consumer *cp) dev = gp->softc; g_trace(G_T_TOPOLOGY, "g_dev_orphan(%p(%s))", cp, gp->name); - /* Reset any dump-area set on this device */ - if (dev->si_flags & SI_DUMPDEV) - set_dumper(NULL); + if (dev != NULL) { + /* Reset any dump-area set on this device */ + if (dev->si_flags & SI_DUMPDEV) + set_dumper(NULL); - /* Destroy the struct cdev *so we get no more requests */ - destroy_dev(dev); + /* Destroy the struct cdev *so we get no more requests */ + destroy_dev(dev); + } /* Wait for the cows to come home */ while (cp->nstart != cp->nend)