svn commit: r217194 - projects/graid/head/sys/geom/raid
Alexander Motin
mav at FreeBSD.org
Sun Jan 9 14:18:17 UTC 2011
Author: mav
Date: Sun Jan 9 14:18:16 2011
New Revision: 217194
URL: http://svn.freebsd.org/changeset/base/217194
Log:
Make provider names format configurable via kern.geom.raid.name_format
sysctl/tunable:
0 - raid/rX,
1 - raid/{volume name}.
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 Sun Jan 9 13:23:45 2011 (r217193)
+++ projects/graid/head/sys/geom/raid/g_raid.c Sun Jan 9 14:18:16 2011 (r217194)
@@ -68,6 +68,10 @@ TUNABLE_INT("kern.geom.raid.disconnect_o
&g_raid_disconnect_on_failure);
SYSCTL_UINT(_kern_geom_raid, OID_AUTO, disconnect_on_failure, CTLFLAG_RW,
&g_raid_disconnect_on_failure, 0, "Disconnect component on I/O failure.");
+static u_int g_raid_name_format = 0;
+TUNABLE_INT("kern.geom.raid.name_format", &g_raid_name_format);
+SYSCTL_UINT(_kern_geom_raid, OID_AUTO, name_format, CTLFLAG_RW,
+ &g_raid_name_format, 0, "Providers name format.");
#define MSLEEP(ident, mtx, priority, wmesg, timeout) do { \
G_RAID_DEBUG(4, "%s: Sleeping %p.", __func__, (ident)); \
@@ -943,12 +947,25 @@ g_raid_launch_provider(struct g_raid_vol
// struct g_raid_disk *disk;
struct g_raid_softc *sc;
struct g_provider *pp;
+ char name[G_RAID_MAX_VOLUMENAME];
+ int i;
sc = vol->v_softc;
sx_assert(&sc->sc_lock, SX_LOCKED);
g_topology_lock();
- pp = g_new_providerf(sc->sc_geom, "raid/%s", vol->v_name);
+ /* Try to name provider with volume name. */
+ snprintf(name, sizeof(name), "raid/%s", vol->v_name);
+ if (g_raid_name_format == 0 || vol->v_name[0] == 0 ||
+ g_provider_by_name(name) != NULL) {
+ /* Otherwise find first free name. */
+ for (i = 0; ; i++) {
+ snprintf(name, sizeof(name), "raid/r%d", i);
+ if (g_provider_by_name(name) == NULL)
+ break;
+ }
+ }
+ pp = g_new_providerf(sc->sc_geom, "%s", name);
pp->private = vol;
pp->mediasize = vol->v_mediasize;
pp->sectorsize = vol->v_sectorsize;
@@ -1521,6 +1538,8 @@ g_raid_dumpconf(struct sbuf *sb, const c
vol = pp->private;
g_topology_unlock();
sx_xlock(&sc->sc_lock);
+ sbuf_printf(sb, "%s<VolumeName>%s</VolumeName>\n", indent,
+ vol->v_name);
sbuf_printf(sb, "%s<RAIDLevel>%s</RAIDLevel>\n", indent,
g_raid_volume_level2str(vol->v_raid_level,
vol->v_raid_level_qualifier));
More information about the svn-src-projects
mailing list