summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-02-02 13:36:06 +0000
committerphk <phk@FreeBSD.org>2004-02-02 13:36:06 +0000
commitdde6517de76bee43a4d22464fce3416f8d5dde08 (patch)
treeb80c7498e97fd606eb2a8b3bf389af092b721ab6 /sys/geom
parent293120636b249c72f6084b7c2ca8ce541bc4b55b (diff)
downloadFreeBSD-src-dde6517de76bee43a4d22464fce3416f8d5dde08.zip
FreeBSD-src-dde6517de76bee43a4d22464fce3416f8d5dde08.tar.gz
Check error return from g_clone_bio(). (netchild@)
Rearrange code to avoid duplication (phk@) Submitted by: netchild@
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/geom_mirror.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/geom/geom_mirror.c b/sys/geom/geom_mirror.c
index 98111c5..092947e 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:
OpenPOWER on IntegriCloud