From owner-p4-projects@FreeBSD.ORG Mon Jun 25 16:34:38 2007 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 A36DC16A468; Mon, 25 Jun 2007 16:34:38 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 790DF16A41F for ; Mon, 25 Jun 2007 16:34:38 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 6B8C013C465 for ; Mon, 25 Jun 2007 16:34:38 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l5PGYcdb066495 for ; Mon, 25 Jun 2007 16:34:38 GMT (envelope-from lulf@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l5PGYcYP066492 for perforce@freebsd.org; Mon, 25 Jun 2007 16:34:38 GMT (envelope-from lulf@FreeBSD.org) Date: Mon, 25 Jun 2007 16:34:38 GMT Message-Id: <200706251634.l5PGYcYP066492@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to lulf@FreeBSD.org using -f From: Ulf Lilleengen To: Perforce Change Reviews Cc: Subject: PERFORCE change 122284 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, 25 Jun 2007 16:34:39 -0000 http://perforce.freebsd.org/chv.cgi?CH=122284 Change 122284 by lulf@lulf_carrot on 2007/06/25 16:33:38 - Add a different flag to be used for rebuild, so we won't confuse different parts of gvinum. Affected files ... .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_init.c#11 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_plex.c#14 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_raid5.c#7 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#15 edit Differences ... ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_init.c#11 (text+ko) ==== @@ -198,6 +198,7 @@ LIST_FOREACH(p, &v->plexes, in_volume) { if ((p == up) || (p->state == GV_PLEX_UP)) continue; + /* XXX: Should we check if rebuilding too? */ if (p->flags & GV_PLEX_SYNCING) { return (EINPROGRESS); } @@ -222,9 +223,10 @@ /* if (gv_provider_is_open(p->vol_sc->provider)) return (EBUSY);*/ - if (p->flags & GV_PLEX_SYNCING) + if (p->flags & GV_PLEX_SYNCING || + p->flags & GV_PLEX_REBUILDING) return (EINPROGRESS); - p->flags |= GV_PLEX_SYNCING; + p->flags |= GV_PLEX_REBUILDING; p->synced = 0; gv_parity_request(p, GV_BIO_REBUILD, 0); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_plex.c#14 (text+ko) ==== @@ -65,6 +65,9 @@ addr = bp->bio_data; boff = bp->bio_offset; + if (!(bp->bio_cflags & GV_BIO_REBUILD)) + printf("New BIO!, not rebuild\n"); + /* Walk over the whole length of the request, we might split it up. */ while (bcount > 0) { wp = NULL; @@ -722,7 +725,7 @@ /* We're finished. */ printf("VINUM: rebuild of %s finished\n", p->name); gv_save_config(p->vinumconf); - p->flags &= ~GV_PLEX_SYNCING; + p->flags &= ~GV_PLEX_REBUILDING; p->synced = 0; /* Try to up all subdisks. */ LIST_FOREACH(s, &p->subdisks, in_plex) ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_raid5.c#7 (text+ko) ==== @@ -376,7 +376,7 @@ KASSERT(wp->length >= 0, ("gv_build_raid5_request: wp->length < 0")); - if ((p->flags & GV_PLEX_SYNCING) && (boff + real_len < p->synced)) + if ((p->flags & GV_PLEX_REBUILDING) && (boff + real_len < p->synced)) type = REQ_TYPE_NORMAL; switch (bp->bio_cmd) { ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#15 (text+ko) ==== @@ -323,6 +323,7 @@ #define GV_PLEX_THREAD_DIE 0x08 /* Signal the RAID5 thread to die. */ #define GV_PLEX_THREAD_DEAD 0x10 /* The RAID5 thread has died. */ #define GV_PLEX_NEWBORN 0x20 /* The plex was just created. */ +#define GV_PLEX_REBUILDING 0x40 /* The plex is rebuilding. */ off_t synced; /* Count of synced bytes. */