summaryrefslogtreecommitdiffstats
path: root/sys/geom/mirror
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-08-09 09:41:53 +0000
committerpjd <pjd@FreeBSD.org>2006-08-09 09:41:53 +0000
commitb539048d28637b71f82e1b7ed24d755124c5b517 (patch)
tree5e1964f5bce70d934ccc5f5bf54c48594329943e /sys/geom/mirror
parent2c46c25111df187d4bde90dc5e08843df8d53980 (diff)
downloadFreeBSD-src-b539048d28637b71f82e1b7ed24d755124c5b517.zip
FreeBSD-src-b539048d28637b71f82e1b7ed24d755124c5b517.tar.gz
Not only a request from us can be passed to g_{mirror,raid3}_worker()
function, but also a request to us, in which case checking bio_cflags is wrong, because the class above us is controling it, not we. MFC after: 1 week
Diffstat (limited to 'sys/geom/mirror')
-rw-r--r--sys/geom/mirror/g_mirror.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c
index 8ddb529..56e52bb 100644
--- a/sys/geom/mirror/g_mirror.c
+++ b/sys/geom/mirror/g_mirror.c
@@ -1813,12 +1813,19 @@ g_mirror_worker(void *arg)
bioq_remove(&sc->sc_queue, bp);
mtx_unlock(&sc->sc_queue_mtx);
- if ((bp->bio_cflags & G_MIRROR_BIO_FLAG_REGULAR) != 0)
- g_mirror_regular_request(bp);
- else if ((bp->bio_cflags & G_MIRROR_BIO_FLAG_SYNC) != 0)
- g_mirror_sync_request(bp);
- else
+ if (bp->bio_to != sc->sc_provider) {
+ if ((bp->bio_cflags & G_MIRROR_BIO_FLAG_REGULAR) != 0)
+ g_mirror_regular_request(bp);
+ else if ((bp->bio_cflags & G_MIRROR_BIO_FLAG_SYNC) != 0)
+ g_mirror_sync_request(bp);
+ else {
+ KASSERT(0,
+ ("Invalid request cflags=0x%hhx to=%s.",
+ bp->bio_cflags, bp->bio_to->name));
+ }
+ } else {
g_mirror_register_request(bp);
+ }
G_MIRROR_DEBUG(5, "%s: I'm here 9.", __func__);
}
}
OpenPOWER on IntegriCloud