summaryrefslogtreecommitdiffstats
path: root/sys/geom/concat
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2009-12-24 14:32:21 +0000
committermav <mav@FreeBSD.org>2009-12-24 14:32:21 +0000
commitab355c0d662d8fd56d0d6d17844eb0e1620d0f30 (patch)
tree6696ce303c0994037eb65956e9afb3ea1d346f3c /sys/geom/concat
parent1d27c062b62cfdb682f7b3dd5f5ac7bc777c8a06 (diff)
downloadFreeBSD-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/concat')
-rw-r--r--sys/geom/concat/g_concat.c13
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);
}
OpenPOWER on IntegriCloud