Message ID | 1401801062-9154-21-git-send-email-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
The Tuesday 03 Jun 2014 à 15:11:01 (+0200), Kevin Wolf wrote : > 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> > --- > block/mirror.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/block/mirror.c b/block/mirror.c > index 94c8661..07417d7 100644 > --- a/block/mirror.c > +++ b/block/mirror.c > @@ -350,7 +350,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); > > -- > 1.8.3.1 > > Reviewed-by: Benoit Canet <benoit@irqsave.net>
diff --git a/block/mirror.c b/block/mirror.c index 94c8661..07417d7 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -350,7 +350,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);