diff options
author | lulf <lulf@FreeBSD.org> | 2009-07-18 11:12:48 +0000 |
---|---|---|
committer | lulf <lulf@FreeBSD.org> | 2009-07-18 11:12:48 +0000 |
commit | 08a0ba34aa81e4c50062de5c113eef1512e21ad4 (patch) | |
tree | a20fccbb1949294ea53fb82b73956a651ebe9b86 | |
parent | 92c450dfd9b6b2bc1b92bc9ef9bfd9b857af0553 (diff) | |
download | FreeBSD-src-08a0ba34aa81e4c50062de5c113eef1512e21ad4.zip FreeBSD-src-08a0ba34aa81e4c50062de5c113eef1512e21ad4.tar.gz |
- 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)
-rw-r--r-- | sys/geom/vinum/geom_vinum.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/geom/vinum/geom_vinum.c b/sys/geom/vinum/geom_vinum.c index f97c8cf..7b730bd 100644 --- a/sys/geom/vinum/geom_vinum.c +++ b/sys/geom/vinum/geom_vinum.c @@ -133,10 +133,12 @@ gv_access(struct g_provider *pp, int dr, int dw, int de) 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; |