Skip to content

Commit

Permalink
mirror: Handle failure for potentially large allocations
Browse files Browse the repository at this point in the history
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 <kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
  • Loading branch information
kevmw committed Aug 15, 2014
1 parent 5fb09cd commit 7504edf
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion block/mirror.c
Expand Up @@ -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);

Expand Down

0 comments on commit 7504edf

Please sign in to comment.