diff mbox

[v4,15/20] quorum: Convert quorum_aiocb_info.cancel to .cancel_async

Message ID 1409743435-21155-16-git-send-email-famz@redhat.com
State New
Headers show

Commit Message

Fam Zheng Sept. 3, 2014, 11:23 a.m. UTC
Before, we cancel all the child requests with bdrv_aio_cancel, then free
the acb..

Now we just kick off asynchronous cancellation of child requests and
return, we know quorum_aio_cb will be called later, so in the end
quorum_aio_finalize will take care of calling the caller's cb.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block/quorum.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

Comments

Benoît Canet Sept. 4, 2014, 3:40 p.m. UTC | #1
The Wednesday 03 Sep 2014 à 19:23:50 (+0800), Fam Zheng wrote :
> Before, we cancel all the child requests with bdrv_aio_cancel, then free
> the acb..
> 
> Now we just kick off asynchronous cancellation of child requests and
> return, we know quorum_aio_cb will be called later, so in the end
> quorum_aio_finalize will take care of calling the caller's cb.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  block/quorum.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/block/quorum.c b/block/quorum.c
> index 093382e..0951d52 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -138,16 +138,13 @@ static void quorum_aio_cancel(BlockDriverAIOCB *blockacb)
>  
>      /* cancel all callbacks */
>      for (i = 0; i < s->num_children; i++) {
> -        bdrv_aio_cancel(acb->qcrs[i].aiocb);
> +        bdrv_aio_cancel_async(acb->qcrs[i].aiocb);
>      }
> -
> -    g_free(acb->qcrs);
> -    qemu_aio_release(acb);
>  }
>  
>  static AIOCBInfo quorum_aiocb_info = {
>      .aiocb_size         = sizeof(QuorumAIOCB),
> -    .cancel             = quorum_aio_cancel,
> +    .cancel_async       = quorum_aio_cancel,
>  };
>  
>  static void quorum_aio_finalize(QuorumAIOCB *acb)
> -- 
> 2.1.0.27.g96db324
> 

Look good but this seems to conflict with one of Liu ongoing patches
as the the quorum_cancel method is currently broken and Liu repair it
in his latest patchset.

See: http://lists.gnu.org/archive/html/qemu-devel/2014-09/msg00022.html

I think one of your series must rebase on the other.

Liu: can you coordinate with Fam ?
diff mbox

Patch

diff --git a/block/quorum.c b/block/quorum.c
index 093382e..0951d52 100644
--- a/block/quorum.c
+++ b/block/quorum.c
@@ -138,16 +138,13 @@  static void quorum_aio_cancel(BlockDriverAIOCB *blockacb)
 
     /* cancel all callbacks */
     for (i = 0; i < s->num_children; i++) {
-        bdrv_aio_cancel(acb->qcrs[i].aiocb);
+        bdrv_aio_cancel_async(acb->qcrs[i].aiocb);
     }
-
-    g_free(acb->qcrs);
-    qemu_aio_release(acb);
 }
 
 static AIOCBInfo quorum_aiocb_info = {
     .aiocb_size         = sizeof(QuorumAIOCB),
-    .cancel             = quorum_aio_cancel,
+    .cancel_async       = quorum_aio_cancel,
 };
 
 static void quorum_aio_finalize(QuorumAIOCB *acb)