qemu-devel
[Top][All Lists]
Advanced

[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>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]