diff options
| author | Kevin Wolf <kwolf@redhat.com> | 2014-05-21 18:11:48 +0200 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2014-08-15 15:07:16 +0200 |
| commit | 0f7a02379bb672666e21dfcd6b549c3506f8d784 (patch) | |
| tree | f30ad5b1b9195fb18ae00731ab6f9c2bc2e15ca6 | |
| parent | 4b6af3d58a73193017926dd59de3b3e7b4890323 (diff) | |
| download | focaccia-qemu-0f7a02379bb672666e21dfcd6b549c3506f8d784.tar.gz focaccia-qemu-0f7a02379bb672666e21dfcd6b549c3506f8d784.zip | |
rbd: Handle failure for potentially large allocations
Some code in the block layer makes potentially huge allocations. Failure is not completely unexpected there, so avoid aborting qemu and handle out-of-memory situations gracefully. This patch addresses the allocations in the rbd block driver. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
| -rw-r--r-- | block/rbd.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/block/rbd.c b/block/rbd.c index 2b797d3e8b..4459102adf 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -617,7 +617,7 @@ static BlockDriverAIOCB *rbd_start_aio(BlockDriverState *bs, RBDAIOCmd cmd) { RBDAIOCB *acb; - RADOSCB *rcb; + RADOSCB *rcb = NULL; rbd_completion_t c; int64_t off, size; char *buf; @@ -631,7 +631,10 @@ static BlockDriverAIOCB *rbd_start_aio(BlockDriverState *bs, if (cmd == RBD_AIO_DISCARD || cmd == RBD_AIO_FLUSH) { acb->bounce = NULL; } else { - acb->bounce = qemu_blockalign(bs, qiov->size); + acb->bounce = qemu_try_blockalign(bs, qiov->size); + if (acb->bounce == NULL) { + goto failed; + } } acb->ret = 0; acb->error = 0; |