From owner-p4-projects@FreeBSD.ORG Mon Aug 15 07:38:46 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0A8C116A421; Mon, 15 Aug 2005 07:38:46 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CD81416A41F for ; Mon, 15 Aug 2005 07:38:45 +0000 (GMT) (envelope-from soc-cjones@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8047543D45 for ; Mon, 15 Aug 2005 07:38:45 +0000 (GMT) (envelope-from soc-cjones@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j7F7cjnk024765 for ; Mon, 15 Aug 2005 07:38:45 GMT (envelope-from soc-cjones@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j7F7cjZv024762 for perforce@freebsd.org; Mon, 15 Aug 2005 07:38:45 GMT (envelope-from soc-cjones@freebsd.org) Date: Mon, 15 Aug 2005 07:38:45 GMT Message-Id: <200508150738.j7F7cjZv024762@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to soc-cjones@freebsd.org using -f From: soc-cjones To: Perforce Change Reviews Cc: Subject: PERFORCE change 82014 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Aug 2005 07:38:46 -0000 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;