FreeBSD/sys/geom/mirror/g_mirror.c
/*
 * Releases delayed regular requests which don't collide anymore with sync
 * requests.
 */
Releases delayed regular requests which don't collide anymore with sync
requests.
Releases delayed regular requests which don ' t collide anymore with sync requests .
static void
g_mirror_regular_release(struct g_mirror_softc *sc)
{
	struct bio *bp, *bp2;
	TAILQ_FOREACH_SAFE(bp, &sc->sc_regular_delayed.queue, bio_queue, bp2) {
		if (g_mirror_sync_collision(sc, bp))
			continue;
		bioq_remove(&sc->sc_regular_delayed, bp);
		G_MIRROR_LOGREQ(2, bp, "Releasing delayed request (%p).", bp);
		mtx_lock(&sc->sc_queue_mtx);
		bioq_insert_head(&sc->sc_queue, bp);
#if 0
		wakeup(&sc->sc_queue);
#endif
		mtx_unlock(&sc->sc_queue_mtx);
	}
}
static void g_mirror_regular_release ( struct g_mirror_softc * sc ) { struct bio * bp , * bp2 ; TAILQ_FOREACH_SAFE ( bp , & sc -> sc_regular_delayed . queue , bio_queue , bp2 ) { if ( g_mirror_sync_collision ( sc , bp ) ) continue ; bioq_remove ( & sc -> sc_regular_delayed , bp ) ; G_MIRROR_LOGREQ ( 2 , bp , " " , bp ) ; mtx_lock ( & sc -> sc_queue_mtx ) ; bioq_insert_head ( & sc -> sc_queue , bp ) ; #if 0 wakeup ( & sc -> sc_queue ) ; #endif mtx_unlock ( & sc -> sc_queue_mtx ) ; } }
Releases delayed regular requests which don't collide anymore with sync
 requests.
Releases delayed regular requests which don ' t collide anymore with sync requests .
/*
		 * wakeup() is not needed, because this function is called from
		 * the worker thread.
		 */