From abc2e0fd56ce55c04d4fd1ec27acaaaef8cdec4a Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Mon, 2 Feb 2004 13:36:06 +0000 Subject: [PATCH] Check error return from g_clone_bio(). (netchild@) Rearrange code to avoid duplication (phk@) Submitted by: netchild@ --- sys/geom/geom_mirror.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sys/geom/geom_mirror.c b/sys/geom/geom_mirror.c index 98111c52afe..092947e2cc6 100644 --- a/sys/geom/geom_mirror.c +++ b/sys/geom/geom_mirror.c @@ -110,16 +110,18 @@ g_mirror_start(struct bio *bp) sc = gp->softc; switch(bp->bio_cmd) { case BIO_READ: - bp2 = g_clone_bio(bp); - bp2->bio_offset += sc->sectorsize; - bp2->bio_done = g_std_done; - g_io_request(bp2, LIST_FIRST(&gp->consumer)); - return; case BIO_WRITE: case BIO_DELETE: bp2 = g_clone_bio(bp); + if (bp2 == NULL) { + g_io_deliver(bp, ENOMEM); + return; + } bp2->bio_offset += sc->sectorsize; - bp2->bio_done = g_mirror_done; + if (bp->bio_cmd == BIO_READ) + bp2->bio_done = g_std_done; + else + bp2->bio_done = g_mirror_done; g_io_request(bp2, LIST_FIRST(&gp->consumer)); return; default: