svn commit: r218516 - projects/graid/head/sys/geom/raid
Alexander Motin
mav at FreeBSD.org
Thu Feb 10 10:04:39 UTC 2011
Author: mav
Date: Thu Feb 10 10:04:38 2011
New Revision: 218516
URL: http://svn.freebsd.org/changeset/base/218516
Log:
Report volume stripesize and stripeoffset.
Modified:
projects/graid/head/sys/geom/raid/g_raid.c
Modified: projects/graid/head/sys/geom/raid/g_raid.c
==============================================================================
--- projects/graid/head/sys/geom/raid/g_raid.c Thu Feb 10 08:40:12 2011 (r218515)
+++ projects/graid/head/sys/geom/raid/g_raid.c Thu Feb 10 10:04:38 2011 (r218516)
@@ -1321,10 +1321,11 @@ out:
static void
g_raid_launch_provider(struct g_raid_volume *vol)
{
-// struct g_raid_disk *disk;
+ struct g_raid_disk *disk;
struct g_raid_softc *sc;
struct g_provider *pp;
char name[G_RAID_MAX_VOLUMENAME];
+ off_t off;
sc = vol->v_softc;
sx_assert(&sc->sc_lock, SX_LOCKED);
@@ -1343,14 +1344,25 @@ g_raid_launch_provider(struct g_raid_vol
pp->sectorsize = vol->v_sectorsize;
pp->stripesize = 0;
pp->stripeoffset = 0;
-#if 0
- TAILQ_FOREACH(disk, &sc->sc_disks, d_next) {
- if (disk->d_consumer && disk->d_consumer->provider &&
- disk->d_consumer->provider->stripesize > pp->stripesize) {
+ if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 ||
+ vol->v_raid_level == G_RAID_VOLUME_RL_RAID3 ||
+ vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE ||
+ vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) {
+ if ((disk = vol->v_subdisks[0].sd_disk) != NULL &&
+ disk->d_consumer != NULL &&
+ disk->d_consumer->provider != NULL) {
pp->stripesize = disk->d_consumer->provider->stripesize;
+ off = disk->d_consumer->provider->stripeoffset;
+ pp->stripeoffset = off + vol->v_subdisks[0].sd_offset;
+ if (off > 0)
+ pp->stripeoffset %= off;
}
- }
-#endif
+ if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID3) {
+ pp->stripesize *= (vol->v_disks_count - 1);
+ pp->stripeoffset *= (vol->v_disks_count - 1);
+ }
+ } else
+ pp->stripesize = vol->v_strip_size;
vol->v_provider = pp;
g_error_provider(pp, 0);
g_topology_unlock();
More information about the svn-src-projects
mailing list