summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-03-27 11:14:12 +0000
committermav <mav@FreeBSD.org>2015-03-27 11:14:12 +0000
commit89133d309eaa5b4083369d1b457633d3b361fc2d (patch)
treeafeff70f26d90c00aa29a774db19f1acab07ba66 /sys/geom
parent96329446586b235e6df5def10db501060389afc5 (diff)
downloadFreeBSD-src-89133d309eaa5b4083369d1b457633d3b361fc2d.zip
FreeBSD-src-89133d309eaa5b4083369d1b457633d3b361fc2d.tar.gz
Fix bug on memory allocation error in split method.
While there, use bioq_takefirst() in place where it is convenient. MFC after: 1 week
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/mirror/g_mirror.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c
index 89fb9c0..44e6fa1 100644
--- a/sys/geom/mirror/g_mirror.c
+++ b/sys/geom/mirror/g_mirror.c
@@ -1582,7 +1582,7 @@ g_mirror_request_split(struct g_mirror_softc *sc, struct bio *bp)
cbp = g_clone_bio(bp);
if (cbp == NULL) {
while ((cbp = bioq_takefirst(&queue)) != NULL)
- bioq_remove(&queue, cbp);
+ g_destroy_bio(cbp);;
if (bp->bio_error == 0)
bp->bio_error = ENOMEM;
g_io_deliver(bp, bp->bio_error);
@@ -1865,7 +1865,7 @@ g_mirror_worker(void *arg)
*/
/* Get first request from the queue. */
mtx_lock(&sc->sc_queue_mtx);
- bp = bioq_first(&sc->sc_queue);
+ bp = bioq_takefirst(&sc->sc_queue);
if (bp == NULL) {
if ((sc->sc_flags &
G_MIRROR_DEVICE_FLAG_DESTROY) != 0) {
@@ -1893,7 +1893,6 @@ g_mirror_worker(void *arg)
G_MIRROR_DEBUG(5, "%s: I'm here 4.", __func__);
continue;
}
- bioq_remove(&sc->sc_queue, bp);
mtx_unlock(&sc->sc_queue_mtx);
if (bp->bio_from->geom == sc->sc_sync.ds_geom &&
OpenPOWER on IntegriCloud