PERFORCE change 81632 for review
soc-cjones
soc-cjones at FreeBSD.org
Mon Aug 8 06:48:56 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=81632
Change 81632 by soc-cjones at soc-cjones_ishtar on 2005/08/08 06:48:06
Renaming volumes now works, both recursively and non-. Next up, drives, subdisks, and plexes.
Affected files ...
.. //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_rename.c#3 edit
Differences ...
==== //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_rename.c#3 (text+ko) ====
@@ -180,11 +180,58 @@
int err;
struct gv_plex *p;
struct gv_sd *s;
+ char oldvolname[GV_MAXVOLNAME];
+ char oldplexname[GV_MAXPLEXNAME];
g_topology_assert();
KASSERT(d != NULL, ("gv_rename_vol: NULL v"));
- printf("gv_rename_vol:\n");
+ printf("gv_rename_vol: flags = %x\n", flags);
+
+ /* Rename the volume. We need to hold on to the old volume name. */
+ strncpy(oldvolname, v->name, GV_MAXVOLNAME);
+ printf("Renaming volume %s to %s\n", v->name, newname);
+ strncpy(v->name, newname, GV_MAXVOLNAME);
+
+ /* Rename the associated plexes. For each plex, iterate across
+ list of all subdisks and check to see if its plex is the one
+ we're renaming. Yes, this is icky and O(N_{plexes} x N_{sds}),
+ but it works. */
+
+ LIST_FOREACH(p, &sc->plexes, plex) {
+ if (!strncmp(p->volume, oldvolname, GV_MAXVOLNAME)) {
+ strncpy(p->volume, v->name, GV_MAXVOLNAME);
+ if (flags && GV_FLAG_R) {
+ char plexnumber[GV_MAXPLEXNAME];
+ char *pplexnumber = plexnumber;
+ printf("Modifying plex %s, p->volume = %s\n", p->name, p->volume);
+ strncpy(oldplexname, p->name, GV_MAXPLEXNAME);
+ strncpy(plexnumber, p->name, GV_MAXPLEXNAME);
+ strsep(&pplexnumber, ".");
+ printf("Renaming plex %s to %s.%s\n", p->name, v->name, pplexnumber);
+ snprintf(p->name, GV_MAXPLEXNAME, "%s.%s", v->name, pplexnumber);
+ LIST_FOREACH(s, &sc->subdisks, sd) {
+ if (!strncmp(s->plex, oldplexname, GV_MAXPLEXNAME)) {
+ char sdnumber[GV_MAXSDNAME];
+ char *psdnumber = sdnumber;
+ printf("Modifying subdisk %s, s->plex = %s\n", s->name, s->plex);
+ strncpy(sdnumber, s->name, GV_MAXSDNAME);
+ strsep(&psdnumber, ".");
+ strsep(&psdnumber, ".");
+ printf("Renaming subdisk %s to %s.%s\n", s->name, p->name, psdnumber);
+ snprintf(s->name, GV_MAXSDNAME, "%s.%s", p->name, psdnumber);
+ strncpy(s->plex, p->name, GV_MAXPLEXNAME);
+ } else {
+ printf("Ignoring subdisk %s, s->plex = %s\n", s->name, s->plex);
+ }
+ }
+ }
+ } else {
+ printf("Ignoring plex %s, p->volume = %s\n", p->name, p->volume);
+ }
+ }
+
+ printf("Debugging output:\n");
printf("\tsc = %p\n", sc);
printf("\treq = %p\n", req);
printf("\tv = %p\n", v);
@@ -193,23 +240,25 @@
printf("\t\tv->plexcount = %d\n", v->plexcount);
printf("\tnewname = \"%s\"\n", newname);
printf("\tflags = %x\n", flags);
-
- printf("iterating across plexes list...\n");
- LIST_FOREACH(p, &v->plexes, plex) {
- if (strcmp(p->volume, v->name)) {
- continue; /* Not a plex we're looking for. */
+
+ LIST_FOREACH(p, &sc->plexes, plex) {
+ if (!strncmp(p->volume, v->name, GV_MAXVOLNAME)) {
+ printf("\tp->name = %s\n", p->name);
+ printf("\tp->size = %d\n", (int) p->size);
+ printf("\tp->volume = %s\n", p->volume);
+ printf("\tp->sdcount = %d\n", p->sdcount);
+ printf("\tp->sddown = %d\n", p->sddown);
+ LIST_FOREACH(s, &sc->subdisks, sd) {
+ if (!strncmp(s->plex, p->name, GV_MAXPLEXNAME)) {
+ printf("\t\ts->name = %s\n", s->name);
+ printf("\t\ts->size = %d\n", (int) s->size);
+ printf("\t\ts->drive = %s\n", s->drive);
+ printf("\t\ts->plex = %s\n", s->plex);
+ }
+ }
}
- printf("\tp->name = %s\n", p->name);
- printf("\tp->size = %d\n", (int) p->size);
- printf("\tp->volume = %s\n", p->volume);
-/* LIST_FOREACH(s, &p->subdisks, sd) {
- printf("\t\ts->name = %s\n", s->name);
- printf("\t\ts->size = %d\n", (int) s->size);
- printf("\t\ts->drive = %s\n", s->drive);
- printf("\t\ts->plex = %s\n", s->plex);
- } */
}
+ printf("\n\n");
return (0);
-
}
More information about the p4-projects
mailing list