diff options
author | mav <mav@FreeBSD.org> | 2009-12-24 14:32:21 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-12-24 14:32:21 +0000 |
commit | ab355c0d662d8fd56d0d6d17844eb0e1620d0f30 (patch) | |
tree | 6696ce303c0994037eb65956e9afb3ea1d346f3c /sys/geom | |
parent | 1d27c062b62cfdb682f7b3dd5f5ac7bc777c8a06 (diff) | |
download | FreeBSD-src-ab355c0d662d8fd56d0d6d17844eb0e1620d0f30.zip FreeBSD-src-ab355c0d662d8fd56d0d6d17844eb0e1620d0f30.tar.gz |
Make geom_concat to passthrough stripe parameters of the first component,
hoping that rest will fit.
Diffstat (limited to 'sys/geom')
-rw-r--r-- | sys/geom/concat/g_concat.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/geom/concat/g_concat.c b/sys/geom/concat/g_concat.c index a12f7b8..1f52375 100644 --- a/sys/geom/concat/g_concat.c +++ b/sys/geom/concat/g_concat.c @@ -347,14 +347,14 @@ static void g_concat_check_and_run(struct g_concat_softc *sc) { struct g_concat_disk *disk; + struct g_provider *pp; u_int no, sectorsize = 0; off_t start; if (g_concat_nvalid(sc) != sc->sc_ndisks) return; - sc->sc_provider = g_new_providerf(sc->sc_geom, "concat/%s", - sc->sc_name); + pp = g_new_providerf(sc->sc_geom, "concat/%s", sc->sc_name); start = 0; for (no = 0; no < sc->sc_ndisks; no++) { disk = &sc->sc_disks[no]; @@ -371,10 +371,13 @@ g_concat_check_and_run(struct g_concat_softc *sc) disk->d_consumer->provider->sectorsize); } } - sc->sc_provider->sectorsize = sectorsize; + pp->sectorsize = sectorsize; /* We have sc->sc_disks[sc->sc_ndisks - 1].d_end in 'start'. */ - sc->sc_provider->mediasize = start; - g_error_provider(sc->sc_provider, 0); + pp->mediasize = start; + pp->stripesize = sc->sc_disks[0].d_consumer->provider->stripesize; + pp->stripeoffset = sc->sc_disks[0].d_consumer->provider->stripeoffset; + sc->sc_provider = pp; + g_error_provider(pp, 0); G_CONCAT_DEBUG(0, "Device %s activated.", sc->sc_name); } |