diff options
author | phk <phk@FreeBSD.org> | 2004-02-02 13:36:06 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-02-02 13:36:06 +0000 |
commit | dde6517de76bee43a4d22464fce3416f8d5dde08 (patch) | |
tree | b80c7498e97fd606eb2a8b3bf389af092b721ab6 /sys/geom | |
parent | 293120636b249c72f6084b7c2ca8ce541bc4b55b (diff) | |
download | FreeBSD-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.c | 14 |
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: |