Changeset View
Changeset View
Standalone View
Standalone View
sys/geom/geom_vfs.c
Show First 20 Lines • Show All 254 Lines • ▼ Show 20 Lines | g_vfs_open(struct vnode *vp, struct g_consumer **cpp, const char *fsname, int wr) | ||||
if (pp == NULL) | if (pp == NULL) | ||||
return (ENOENT); | return (ENOENT); | ||||
gp = g_new_geomf(&g_vfs_class, "%s.%s", fsname, pp->name); | gp = g_new_geomf(&g_vfs_class, "%s.%s", fsname, pp->name); | ||||
sc = g_malloc(sizeof(*sc), M_WAITOK | M_ZERO); | sc = g_malloc(sizeof(*sc), M_WAITOK | M_ZERO); | ||||
mtx_init(&sc->sc_mtx, "g_vfs", NULL, MTX_DEF); | mtx_init(&sc->sc_mtx, "g_vfs", NULL, MTX_DEF); | ||||
sc->sc_bo = bo; | sc->sc_bo = bo; | ||||
gp->softc = sc; | gp->softc = sc; | ||||
cp = g_new_consumer(gp); | cp = g_new_consumer(gp); | ||||
g_attach(cp, pp); | error = g_attach(cp, pp); | ||||
if (error) { | |||||
g_wither_geom(gp, ENXIO); | |||||
return (error); | |||||
} | |||||
error = g_access(cp, 1, wr, wr); | error = g_access(cp, 1, wr, wr); | ||||
if (error) { | if (error) { | ||||
g_wither_geom(gp, ENXIO); | g_wither_geom(gp, ENXIO); | ||||
return (error); | return (error); | ||||
} | } | ||||
vnode_create_vobject(vp, pp->mediasize, curthread); | vnode_create_vobject(vp, pp->mediasize, curthread); | ||||
*cpp = cp; | *cpp = cp; | ||||
cp->private = vp; | cp->private = vp; | ||||
Show All 26 Lines |