Message ID | 1401287873-25805-16-git-send-email-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
Kevin Wolf <kwolf@redhat.com> writes: > 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> > --- > block/rbd.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/block/rbd.c b/block/rbd.c > index dbc79f4..2ac65a8 100644 > --- a/block/rbd.c > +++ b/block/rbd.c > @@ -630,7 +630,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; /work/armbru/qemu/block/rbd.c: In function ‘rbd_start_aio’: /work/armbru/qemu/block/rbd.c:696:11: warning: ‘rcb’ may be used uninitialized in this function [-Wmaybe-uninitialized] g_free(rcb); ^ Fix is obvious: initialize it to null.
diff --git a/block/rbd.c b/block/rbd.c index dbc79f4..2ac65a8 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -630,7 +630,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;