aboutsummaryrefslogtreecommitdiff
path: root/sys/geom/concat
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2009-12-24 14:32:21 +0000
committerAlexander Motin <mav@FreeBSD.org>2009-12-24 14:32:21 +0000
commit5f9b1143acc22a53794524c00f29aa7973509bc9 (patch)
tree6696ce303c0994037eb65956e9afb3ea1d346f3c /sys/geom/concat
parent9516bdf18c0183cd2cc6fd41e355cbdc2349b13e (diff)
downloadsrc-5f9b1143acc22a53794524c00f29aa7973509bc9.tar.gz
src-5f9b1143acc22a53794524c00f29aa7973509bc9.zip
Make geom_concat to passthrough stripe parameters of the first component,
hoping that rest will fit.
Notes
Notes: svn path=/head/; revision=200942
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 a12f7b830e07..1f523755c7d6 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);
}