[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 07/20] iscsi: Handle failure for potentially
From: |
Benoît Canet |
Subject: |
Re: [Qemu-devel] [PATCH v2 07/20] iscsi: Handle failure for potentially large allocations |
Date: |
Fri, 30 May 2014 14:28:21 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
The Wednesday 28 May 2014 à 16:37:40 (+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 iscsi block driver.
>
> Signed-off-by: Kevin Wolf <address@hidden>
> Acked-by: Paolo Bonzini <address@hidden>
> ---
> block/iscsi.c | 17 ++++++++++++++---
> 1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 3892cc5..b3e9bdd 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -335,7 +335,10 @@ static int coroutine_fn iscsi_co_writev(BlockDriverState
> *bs,
> data = iov->iov[0].iov_base;
> } else {
> size_t size = MIN(nb_sectors * BDRV_SECTOR_SIZE, iov->size);
> - buf = g_malloc(size);
> + buf = g_try_malloc(size);
> + if (size && buf == NULL) {
> + return -ENOMEM;
> + }
> qemu_iovec_to_buf(iov, 0, buf, size);
> data = buf;
> }
> @@ -721,7 +724,12 @@ static BlockDriverAIOCB
> *iscsi_aio_ioctl(BlockDriverState *bs,
> #else
> struct iovec *iov = (struct iovec *)acb->ioh->dxferp;
>
> - acb->buf = g_malloc(acb->ioh->dxfer_len);
> + acb->buf = g_try_malloc(acb->ioh->dxfer_len);
> + if (acb->ioh->dxfer_len && acb->buf == NULL) {
> + free(acb->task);
> + qemu_aio_release(acb);
> + return NULL;
> + }
> data.data = acb->buf;
> data.size = iov_to_buf(iov, acb->ioh->iovec_count, 0,
> acb->buf, acb->ioh->dxfer_len);
> @@ -902,7 +910,10 @@ coroutine_fn iscsi_co_write_zeroes(BlockDriverState *bs,
> int64_t sector_num,
> nb_blocks = sector_qemu2lun(nb_sectors, iscsilun);
>
> if (iscsilun->zeroblock == NULL) {
> - iscsilun->zeroblock = g_malloc0(iscsilun->block_size);
> + iscsilun->zeroblock = g_try_malloc0(iscsilun->block_size);
> + if (iscsilun->zeroblock == NULL) {
> + return -ENOMEM;
> + }
> }
>
> iscsi_co_init_iscsitask(iscsilun, &iTask);
> --
> 1.8.3.1
>
>
Reviewed-by: Benoit Canet <address@hidden>
- [Qemu-devel] [PATCH v2 04/20] cloop: Handle failure for potentially large allocations, (continued)
- [Qemu-devel] [PATCH v2 04/20] cloop: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 01/20] block: Introduce qemu_try_blockalign(), Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 05/20] curl: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 06/20] dmg: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 07/20] iscsi: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 08/20] nfs: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 09/20] parallels: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 10/20] qcow1: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 11/20] qcow2: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28