Date: Mon, 15 Aug 2005 07:38:45 GMT From: soc-cjones <soc-cjones@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 82014 for review Message-ID: <200508150738.j7F7cjZv024762@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=82014 Change 82014 by soc-cjones@soc-cjones_ishtar on 2005/08/15 07:37:47 Woohoo, 'move' now works! At least, for mirrored plexes. It still dies for RAID-5, and will lose data for stripes. Affected files ... .. //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_move.c#8 edit .. //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_plex.c#3 edit Differences ... ==== //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_move.c#8 (text+ko) ==== @@ -172,6 +172,7 @@ int err; struct gv_drive *d; struct gv_sd *s2; + struct gv_plex *p; char errstr[ERRBUFSIZ]; g_topology_assert(); @@ -232,12 +233,23 @@ strncpy(s2->plex, s->plex, GV_MAXPLEXNAME); printf("gv_move_sd: L\n"); s2->plex_offset = s->plex_offset; - printf("gv_move_sd: M\n"); /* DIES HERE */ + printf("gv_move_sd: M\n"); LIST_INSERT_BEFORE(s, s2, in_plex); + printf("gv_move_sd: M2\n"); + p = gv_find_plex(sc, s2->plex); /* We know it's not null, since the plex exists. */ + p->sdcount--; + p->state = GV_PLEX_DEGRADED; + LIST_REMOVE(s, in_plex); /* Get rid of the current sd. */ + s->plex_sc = NULL; printf("gv_move_sd: N\n"); - gv_rm_sd(sc, req, s, flags); - printf("gv_move_sd: O\n"); - + err = gv_rm_sd(sc, req, s, flags); + printf("gv_move_sd: O, err = %d\n", err); + if (err) + return (err); + + gv_sd_to_plex(p, s2, 0); + printf("gv_move_sd: P\n"); + gv_save_config_all(sc); printf("gv_move_sd: done gv_move_sd\n"); return (0); ==== //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_plex.c#3 (text+ko) ==== @@ -567,7 +567,7 @@ if (err) { printf("GEOM_VINUM: plex request failed for "); g_print_bio(bp); - printf("\n"); + printf(", err = %d\n", err); TAILQ_FOREACH_SAFE(bq, &wp->bits, queue, bq2) { TAILQ_REMOVE(&wp->bits, bq, queue); g_free(bq); @@ -629,7 +629,7 @@ if (err) { printf("GEOM_VINUM: plex request failed for "); g_print_bio(bp); - printf("\n"); + printf(", err = %d\n", err); cbp = bp->bio_driver1; while (cbp != NULL) { pbp = cbp->bio_caller1;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508150738.j7F7cjZv024762>