From owner-svn-src-projects@FreeBSD.ORG Tue Jan 13 11:24:15 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4621C1065672; Tue, 13 Jan 2009 11:24:15 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3555D8FC0A; Tue, 13 Jan 2009 11:24:15 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n0DBOFFq002166; Tue, 13 Jan 2009 11:24:15 GMT (envelope-from lulf@svn.freebsd.org) Received: (from lulf@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n0DBOFwU002165; Tue, 13 Jan 2009 11:24:15 GMT (envelope-from lulf@svn.freebsd.org) Message-Id: <200901131124.n0DBOFwU002165@svn.freebsd.org> From: Ulf Lilleengen Date: Tue, 13 Jan 2009 11:24:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r187140 - projects/gvinum/sys/geom/vinum X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Jan 2009 11:24:15 -0000 Author: lulf Date: Tue Jan 13 11:24:14 2009 New Revision: 187140 URL: http://svn.freebsd.org/changeset/base/187140 Log: - In the case of a volume in the up state but all plexes down (the state must have been forced by the user), avoid looping infinately while trying out all plexes, which are down. Modified: projects/gvinum/sys/geom/vinum/geom_vinum_volume.c Modified: projects/gvinum/sys/geom/vinum/geom_vinum_volume.c ============================================================================== --- projects/gvinum/sys/geom/vinum/geom_vinum_volume.c Tue Jan 13 10:59:54 2009 (r187139) +++ projects/gvinum/sys/geom/vinum/geom_vinum_volume.c Tue Jan 13 11:24:14 2009 (r187140) @@ -43,6 +43,7 @@ gv_volume_start(struct gv_softc *sc, str struct g_geom *gp; struct gv_volume *v; struct gv_plex *p, *lp; + int numwrites; gp = sc->geom; v = bp->bio_to->private; @@ -69,8 +70,10 @@ gv_volume_start(struct gv_softc *sc, str lp = LIST_FIRST(&v->plexes); p = LIST_NEXT(lp, in_volume); do { - if (p == NULL) - p = LIST_FIRST(&v->plexes); + if (p == NULL) { + p = lp; + break; + } if ((p->state > GV_PLEX_DEGRADED) || (p->state >= GV_PLEX_DEGRADED && p->org == GV_PLEX_RAID5)) @@ -100,12 +103,16 @@ gv_volume_start(struct gv_softc *sc, str } } + numwrites = 0; /* Give the BIO to each plex of this volume. */ LIST_FOREACH(p, &v->plexes, in_volume) { if (p->state < GV_PLEX_DEGRADED) continue; gv_plex_start(p, bp); + numwrites++; } + if (numwrites == 0) + g_io_deliver(bp, ENXIO); break; } }