qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] quorum: Fix crash in quorum_aio_cb()


From: Wen Congyang
Subject: Re: [Qemu-devel] [PATCH] quorum: Fix crash in quorum_aio_cb()
Date: Fri, 11 Mar 2016 09:31:31 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0

On 03/10/2016 08:13 PM, Alberto Garcia wrote:
> quorum_aio_cb() emits the QUORUM_REPORT_BAD event if there's
> an I/O error in a Quorum child. However sacb->aiocb must be
> correctly initialized for this to happen. read_quorum_children() and
> read_fifo_child() are not doing this, which results in a QEMU crash.

If we use FIFO mode, we don't call quorum_report_bad() in quorum_aio_cb().
But it is OK to iniialize sacb->aiocb for it.

> 
> Signed-off-by: Alberto Garcia <address@hidden>
> Reviewed-by: Max Reitz <address@hidden>

Reviewed-by: Wen Congyang <address@hidden>

> ---
>  block/quorum.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/block/quorum.c b/block/quorum.c
> index b9ba028..e640688 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -646,8 +646,9 @@ static BlockAIOCB *read_quorum_children(QuorumAIOCB *acb)
>      }
>  
>      for (i = 0; i < s->num_children; i++) {
> -        bdrv_aio_readv(s->children[i]->bs, acb->sector_num, 
> &acb->qcrs[i].qiov,
> -                       acb->nb_sectors, quorum_aio_cb, &acb->qcrs[i]);
> +        acb->qcrs[i].aiocb = bdrv_aio_readv(s->children[i]->bs, 
> acb->sector_num,
> +                                            &acb->qcrs[i].qiov, 
> acb->nb_sectors,
> +                                            quorum_aio_cb, &acb->qcrs[i]);
>      }
>  
>      return &acb->common;
> @@ -662,9 +663,10 @@ static BlockAIOCB *read_fifo_child(QuorumAIOCB *acb)
>      qemu_iovec_init(&acb->qcrs[acb->child_iter].qiov, acb->qiov->niov);
>      qemu_iovec_clone(&acb->qcrs[acb->child_iter].qiov, acb->qiov,
>                       acb->qcrs[acb->child_iter].buf);
> -    bdrv_aio_readv(s->children[acb->child_iter]->bs, acb->sector_num,
> -                   &acb->qcrs[acb->child_iter].qiov, acb->nb_sectors,
> -                   quorum_aio_cb, &acb->qcrs[acb->child_iter]);
> +    acb->qcrs[acb->child_iter].aiocb =
> +        bdrv_aio_readv(s->children[acb->child_iter]->bs, acb->sector_num,
> +                       &acb->qcrs[acb->child_iter].qiov, acb->nb_sectors,
> +                       quorum_aio_cb, &acb->qcrs[acb->child_iter]);
>  
>      return &acb->common;
>  }
> 






reply via email to

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