int xbdclose(dev_t dev, int flags, int fmt, struct proc *p) { struct xbd_softc *xs; DPRINTF_FOLLOW(("xbdclose(%d, %d)\n", dev, flags)); switch (fmt) { case S_IFCHR: GETXBD_SOFTC_CDEV(xs, dev); break; case S_IFBLK: GETXBD_SOFTC(xs, dev); break; default: return ENXIO; } return dk_close(xs->sc_di, &xs->sc_dksc, dev, flags, fmt, p); }
static int cgdclose(dev_t dev, int flags, int fmt, struct lwp *l) { int error; struct cgd_softc *cs; struct dk_softc *dksc; DPRINTF_FOLLOW(("cgdclose(0x%"PRIx64", %d)\n", dev, flags)); GETCGD_SOFTC(cs, dev); dksc = &cs->sc_dksc; if ((error = dk_close(dksc, dev, flags, fmt, l)) != 0) return error; if (!DK_ATTACHED(dksc)) { if ((error = cgd_destroy(cs->sc_dksc.sc_dev)) != 0) { aprint_error_dev(dksc->sc_dev, "unable to detach instance\n"); return error; } } return 0; }