From owner-svn-src-all@FreeBSD.ORG Sat Dec 27 14:32:39 2008 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CA7D01065675; Sat, 27 Dec 2008 14:32:39 +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 B76728FC19; Sat, 27 Dec 2008 14:32:39 +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 mBREWd45073904; Sat, 27 Dec 2008 14:32:39 GMT (envelope-from lulf@svn.freebsd.org) Received: (from lulf@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mBREWd6D073903; Sat, 27 Dec 2008 14:32:39 GMT (envelope-from lulf@svn.freebsd.org) Message-Id: <200812271432.mBREWd6D073903@svn.freebsd.org> From: Ulf Lilleengen Date: Sat, 27 Dec 2008 14:32:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r186517 - head/sys/geom/vinum X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Dec 2008 14:32:39 -0000 Author: lulf Date: Sat Dec 27 14:32:39 2008 New Revision: 186517 URL: http://svn.freebsd.org/changeset/base/186517 Log: - Fix an issue with access permissions to underlying disks used by a gvinum plex. If the plex is a raid5 plex, and is being written to, parity data might have to be read from the underlying disks, requiring them to be opened for reading as well as writing. MFC after: 1 week Modified: head/sys/geom/vinum/geom_vinum_plex.c Modified: head/sys/geom/vinum/geom_vinum_plex.c ============================================================================== --- head/sys/geom/vinum/geom_vinum_plex.c Sat Dec 27 14:24:24 2008 (r186516) +++ head/sys/geom/vinum/geom_vinum_plex.c Sat Dec 27 14:32:39 2008 (r186517) @@ -663,11 +663,21 @@ gv_plex_normal_request(struct gv_plex *p static int gv_plex_access(struct g_provider *pp, int dr, int dw, int de) { + struct gv_plex *p; struct g_geom *gp; struct g_consumer *cp, *cp2; int error; gp = pp->geom; + p = gp->softc; + KASSERT(p != NULL, ("NULL p")); + + if (p->org == GV_PLEX_RAID5) { + if (dw > 0 && dr == 0) + dr = 1; + else if (dw < 0 && dr == 0) + dr = -1; + } LIST_FOREACH(cp, &gp->consumer, consumer) { error = g_access(cp, dr, dw, de);