summaryrefslogtreecommitdiffstats
path: root/sys/geom/mirror
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2010-01-05 10:30:56 +0000
committermav <mav@FreeBSD.org>2010-01-05 10:30:56 +0000
commit1073c59bbd60e55d1d0ce707b510c1c80921a313 (patch)
tree060acf8a0e2a702f8f91557518a4974fcd385101 /sys/geom/mirror
parent46ad5872cfe48165ee5161dc4d954ca0a9a50c3b (diff)
downloadFreeBSD-src-1073c59bbd60e55d1d0ce707b510c1c80921a313.zip
FreeBSD-src-1073c59bbd60e55d1d0ce707b510c1c80921a313.tar.gz
Move wakeup() out of mutex to reduce contention.
Diffstat (limited to 'sys/geom/mirror')
-rw-r--r--sys/geom/mirror/g_mirror.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c
index 25de44a..404ab98 100644
--- a/sys/geom/mirror/g_mirror.c
+++ b/sys/geom/mirror/g_mirror.c
@@ -868,8 +868,8 @@ g_mirror_done(struct bio *bp)
bp->bio_cflags = G_MIRROR_BIO_FLAG_REGULAR;
mtx_lock(&sc->sc_queue_mtx);
bioq_disksort(&sc->sc_queue, bp);
- wakeup(sc);
mtx_unlock(&sc->sc_queue_mtx);
+ wakeup(sc);
}
static void
@@ -954,9 +954,9 @@ g_mirror_regular_request(struct bio *bp)
pbp->bio_error = 0;
mtx_lock(&sc->sc_queue_mtx);
bioq_disksort(&sc->sc_queue, pbp);
+ mtx_unlock(&sc->sc_queue_mtx);
G_MIRROR_DEBUG(4, "%s: Waking up %p.", __func__, sc);
wakeup(sc);
- mtx_unlock(&sc->sc_queue_mtx);
}
break;
case BIO_DELETE:
@@ -994,8 +994,8 @@ g_mirror_sync_done(struct bio *bp)
bp->bio_cflags = G_MIRROR_BIO_FLAG_SYNC;
mtx_lock(&sc->sc_queue_mtx);
bioq_disksort(&sc->sc_queue, bp);
- wakeup(sc);
mtx_unlock(&sc->sc_queue_mtx);
+ wakeup(sc);
}
static void
@@ -1107,9 +1107,9 @@ g_mirror_start(struct bio *bp)
}
mtx_lock(&sc->sc_queue_mtx);
bioq_disksort(&sc->sc_queue, bp);
+ mtx_unlock(&sc->sc_queue_mtx);
G_MIRROR_DEBUG(4, "%s: Waking up %p.", __func__, sc);
wakeup(sc);
- mtx_unlock(&sc->sc_queue_mtx);
}
/*
OpenPOWER on IntegriCloud