aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2006-07-03 10:32:38 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2006-07-03 10:32:38 +0000
commit1f7fec3cb579a2be476ff88078b7e10380c9af13 (patch)
tree4f634d3e2a484a657730db409940effeec7970f4 /sys
parent8a97c03a7a480077305129a8e1c0fcf004c28f92 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/geom/mirror/g_mirror.c8
-rw-r--r--sys/geom/raid3/g_raid3.c8
2 files changed, 10 insertions, 6 deletions
diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c
index 27c6b88697706..aa80d2cb1ddfd 100644
--- a/sys/geom/mirror/g_mirror.c
+++ b/sys/geom/mirror/g_mirror.c
@@ -2736,13 +2736,15 @@ g_mirror_access(struct g_provider *pp, int acr, int acw, int ace)
G_MIRROR_DEBUG(2, "Access request for %s: r%dw%de%d.", pp->name, acr,
acw, ace);
+ sc = pp->geom->softc;
+ if (sc == NULL && acr <= 0 && acw <= 0 && ace <= 0)
+ return (0);
+ KASSERT(sc != NULL, ("NULL softc (provider=%s).", pp->name));
+
dcr = pp->acr + acr;
dcw = pp->acw + acw;
dce = pp->ace + ace;
- sc = pp->geom->softc;
- KASSERT(sc != NULL, ("NULL softc (provider=%s).", pp->name));
-
g_topology_unlock();
sx_xlock(&sc->sc_lock);
if ((sc->sc_flags & G_MIRROR_DEVICE_FLAG_DESTROY) != 0 ||
diff --git a/sys/geom/raid3/g_raid3.c b/sys/geom/raid3/g_raid3.c
index e18497294b24a..11d82c6f1a2e4 100644
--- a/sys/geom/raid3/g_raid3.c
+++ b/sys/geom/raid3/g_raid3.c
@@ -2949,13 +2949,15 @@ g_raid3_access(struct g_provider *pp, int acr, int acw, int ace)
G_RAID3_DEBUG(2, "Access request for %s: r%dw%de%d.", pp->name, acr,
acw, ace);
+ sc = pp->geom->softc;
+ if (sc == NULL && acr <= 0 && acw <= 0 && ace <= 0)
+ return (0);
+ KASSERT(sc != NULL, ("NULL softc (provider=%s).", pp->name));
+
dcr = pp->acr + acr;
dcw = pp->acw + acw;
dce = pp->ace + ace;
- sc = pp->geom->softc;
- KASSERT(sc != NULL, ("NULL softc (provider=%s).", pp->name));
-
g_topology_unlock();
sx_xlock(&sc->sc_lock);
if ((sc->sc_flags & G_RAID3_DEVICE_FLAG_DESTROY) != 0 ||