summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-02-02 13:08:03 +0000
committerphk <phk@FreeBSD.org>2004-02-02 13:08:03 +0000
commit62a971f78f44ce84f95ca8fab82c9282c0177157 (patch)
tree8c01c35204727231ce1cf91f648cf163fc518efb /sys/vm
parentead0df39035833154c53b242f9f0490c24556cb7 (diff)
downloadFreeBSD-src-62a971f78f44ce84f95ca8fab82c9282c0177157.zip
FreeBSD-src-62a971f78f44ce84f95ca8fab82c9282c0177157.tar.gz
Check error return from g_clone_bio(). (netchild@)
Add XXX comment about why this is still not optimal. (phk@) Submitted by: netchild@
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/swap_pager.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index 32fde4e..93e193c 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -2415,6 +2415,17 @@ swapgeom_strategy(struct buf *bp, struct swdevt *sp)
return;
}
bio = g_clone_bio(&bp->b_io);
+ if (bio == NULL) {
+ /*
+ * XXX: This is better than panicing, but not much better.
+ * XXX: Somehow this should be retried. A more generic
+ * XXX: implementation of ENOMEM in geom may be able to cope.
+ */
+ bp->b_error = ENOMEM;
+ bp->b_ioflags |= BIO_ERROR;
+ bufdone(bp);
+ return;
+ }
bio->bio_caller2 = bp;
bio->bio_offset = (bp->b_blkno - sp->sw_first) * PAGE_SIZE;
bio->bio_length = bp->b_bcount;
OpenPOWER on IntegriCloud