diff options
author | phk <phk@FreeBSD.org> | 2004-02-02 13:08:03 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-02-02 13:08:03 +0000 |
commit | 62a971f78f44ce84f95ca8fab82c9282c0177157 (patch) | |
tree | 8c01c35204727231ce1cf91f648cf163fc518efb /sys/vm | |
parent | ead0df39035833154c53b242f9f0490c24556cb7 (diff) | |
download | FreeBSD-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.c | 11 |
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; |