Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Jul 2009 11:12:48 +0000 (UTC)
From:      Ulf Lilleengen <lulf@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r195752 - head/sys/geom/vinum
Message-ID:  <200907181112.n6IBCmH6000105@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: lulf
Date: Sat Jul 18 11:12:48 2009
New Revision: 195752
URL: http://svn.freebsd.org/changeset/base/195752

Log:
  - Fix the issue with read access count modification on RAID-5 plexes properly.
    If the access counts were not increased and decreased in equal numbers by
    gvinum consumers, the read access count would be inconsistent with the write
    access count. Instead, modify the read access count with the write access
    count directly to prevent any inconsistencies.
  
  Approved by:	re (kib)

Modified:
  head/sys/geom/vinum/geom_vinum.c

Modified: head/sys/geom/vinum/geom_vinum.c
==============================================================================
--- head/sys/geom/vinum/geom_vinum.c	Sat Jul 18 10:36:18 2009	(r195751)
+++ head/sys/geom/vinum/geom_vinum.c	Sat Jul 18 11:12:48 2009	(r195752)
@@ -133,10 +133,12 @@ gv_access(struct g_provider *pp, int dr,
 	error = ENXIO;
 	gp = pp->geom;
 	sc = gp->softc;
-	if (dw > 0 && dr == 0)
-		dr = 1;
-	else if (dw < 0 && dr == 0)
-		dr = -1;
+	/*
+	 * We want to modify the read count with the write count in case we have
+	 * plexes in a RAID-5 organization.
+	 */
+	dr += dw;
+
 	LIST_FOREACH(d, &sc->drives, drive) {
 		if (d->consumer == NULL)
 			continue;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907181112.n6IBCmH6000105>