summaryrefslogtreecommitdiffstats
path: root/sys/geom/raid3/g_raid3.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2010-01-05 10:52:21 +0000
committermav <mav@FreeBSD.org>2010-01-05 10:52:21 +0000
commita615da72de7a089c0527af83810f91a04420bd0d (patch)
tree5e040d6e57294b93944dac8c135a654b0d21c17c /sys/geom/raid3/g_raid3.c
parent1073c59bbd60e55d1d0ce707b510c1c80921a313 (diff)
downloadFreeBSD-src-a615da72de7a089c0527af83810f91a04420bd0d.zip
FreeBSD-src-a615da72de7a089c0527af83810f91a04420bd0d.tar.gz
Move wakeup() out of mutex to reduce contention.
Diffstat (limited to 'sys/geom/raid3/g_raid3.c')
-rw-r--r--sys/geom/raid3/g_raid3.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/geom/raid3/g_raid3.c b/sys/geom/raid3/g_raid3.c
index dc180f7..08792fe 100644
--- a/sys/geom/raid3/g_raid3.c
+++ b/sys/geom/raid3/g_raid3.c
@@ -1271,9 +1271,9 @@ g_raid3_done(struct bio *bp)
G_RAID3_LOGREQ(3, bp, "Regular request done (error=%d).", bp->bio_error);
mtx_lock(&sc->sc_queue_mtx);
bioq_insert_head(&sc->sc_queue, bp);
+ mtx_unlock(&sc->sc_queue_mtx);
wakeup(sc);
wakeup(&sc->sc_queue);
- mtx_unlock(&sc->sc_queue_mtx);
}
static void
@@ -1379,9 +1379,9 @@ g_raid3_sync_done(struct bio *bp)
bp->bio_cflags |= G_RAID3_BIO_CFLAG_SYNC;
mtx_lock(&sc->sc_queue_mtx);
bioq_insert_head(&sc->sc_queue, bp);
+ mtx_unlock(&sc->sc_queue_mtx);
wakeup(sc);
wakeup(&sc->sc_queue);
- mtx_unlock(&sc->sc_queue_mtx);
}
static void
@@ -1459,9 +1459,9 @@ g_raid3_start(struct bio *bp)
}
mtx_lock(&sc->sc_queue_mtx);
bioq_insert_tail(&sc->sc_queue, bp);
+ mtx_unlock(&sc->sc_queue_mtx);
G_RAID3_DEBUG(4, "%s: Waking up %p.", __func__, sc);
wakeup(sc);
- mtx_unlock(&sc->sc_queue_mtx);
}
/*
OpenPOWER on IntegriCloud