svn commit: r212876 - stable/7/sys/geom
Alexander Motin
mav at FreeBSD.org
Sun Sep 19 19:52:27 UTC 2010
Author: mav
Date: Sun Sep 19 19:52:26 2010
New Revision: 212876
URL: http://svn.freebsd.org/changeset/base/212876
Log:
MFC r201264:
Call wakeup() only for the first request on the queue.
Modified:
stable/7/sys/geom/geom_io.c
Directory Properties:
stable/7/sys/ (props changed)
stable/7/sys/cddl/contrib/opensolaris/ (props changed)
stable/7/sys/contrib/dev/acpica/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
Modified: stable/7/sys/geom/geom_io.c
==============================================================================
--- stable/7/sys/geom/geom_io.c Sun Sep 19 19:51:14 2010 (r212875)
+++ stable/7/sys/geom/geom_io.c Sun Sep 19 19:52:26 2010 (r212876)
@@ -322,6 +322,7 @@ void
g_io_request(struct bio *bp, struct g_consumer *cp)
{
struct g_provider *pp;
+ int first;
KASSERT(cp != NULL, ("NULL cp in g_io_request"));
KASSERT(bp != NULL, ("NULL bp in g_io_request"));
@@ -388,12 +389,14 @@ g_io_request(struct bio *bp, struct g_co
pp->nstart++;
cp->nstart++;
+ first = TAILQ_EMPTY(&g_bio_run_down.bio_queue);
TAILQ_INSERT_TAIL(&g_bio_run_down.bio_queue, bp, bio_queue);
g_bio_run_down.bio_queue_length++;
g_bioq_unlock(&g_bio_run_down);
/* Pass it on down. */
- wakeup(&g_wait_down);
+ if (first)
+ wakeup(&g_wait_down);
}
void
@@ -401,6 +404,7 @@ g_io_deliver(struct bio *bp, int error)
{
struct g_consumer *cp;
struct g_provider *pp;
+ int first;
KASSERT(bp != NULL, ("NULL bp in g_io_deliver"));
pp = bp->bio_to;
@@ -454,11 +458,13 @@ g_io_deliver(struct bio *bp, int error)
pp->nend++;
if (error != ENOMEM) {
bp->bio_error = error;
+ first = TAILQ_EMPTY(&g_bio_run_up.bio_queue);
TAILQ_INSERT_TAIL(&g_bio_run_up.bio_queue, bp, bio_queue);
bp->bio_flags |= BIO_ONQUEUE;
g_bio_run_up.bio_queue_length++;
g_bioq_unlock(&g_bio_run_up);
- wakeup(&g_wait_up);
+ if (first)
+ wakeup(&g_wait_up);
return;
}
g_bioq_unlock(&g_bio_run_up);
More information about the svn-src-stable-7
mailing list