summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/geom/vinum/geom_vinum_plex.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/geom/vinum/geom_vinum_plex.c b/sys/geom/vinum/geom_vinum_plex.c
index 424e95a..8281cb2 100644
--- a/sys/geom/vinum/geom_vinum_plex.c
+++ b/sys/geom/vinum/geom_vinum_plex.c
@@ -663,11 +663,21 @@ gv_plex_normal_request(struct gv_plex *p, struct bio *bp)
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);
OpenPOWER on IntegriCloud