From: Kevin Wolf Date: Wed, 21 May 2014 16:16:21 +0000 (+0200) Subject: mirror: Handle failure for potentially large allocations X-Git-Tag: qemu-xen-4.6.0-rc1~264^2~4 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=7504edf477d2bac9cbf53225811ec595abf045e4;p=qemu-upstream-4.6-testing.git mirror: 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 mirror block job. Signed-off-by: Kevin Wolf Reviewed-by: Stefan Hajnoczi Reviewed-by: Benoit Canet --- diff --git a/block/mirror.c b/block/mirror.c index c7a655fc5..5e7a166b3 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -367,7 +367,12 @@ static void coroutine_fn mirror_run(void *opaque) } end = s->common.len >> BDRV_SECTOR_BITS; - s->buf = qemu_blockalign(bs, s->buf_size); + s->buf = qemu_try_blockalign(bs, s->buf_size); + if (s->buf == NULL) { + ret = -ENOMEM; + goto immediate_exit; + } + sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS; mirror_free_init(s);