[RFC,v2,6/7] block-backend: Add blk_co_copy_range
diff mbox series

Message ID 20180418030424.28980-7-famz@redhat.com
State New
Headers show
Series
  • qemu-img convert with copy offloading
Related show

Commit Message

Fam Zheng April 18, 2018, 3:04 a.m. UTC
It's a BlockBackend wrapper of the BDS interface.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block/block-backend.c          | 9 +++++++++
 include/sysemu/block-backend.h | 4 ++++
 2 files changed, 13 insertions(+)

Comments

Stefan Hajnoczi May 3, 2018, 10:28 a.m. UTC | #1
On Wed, Apr 18, 2018 at 11:04:23AM +0800, Fam Zheng wrote:
> It's a BlockBackend wrapper of the BDS interface.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  block/block-backend.c          | 9 +++++++++
>  include/sysemu/block-backend.h | 4 ++++
>  2 files changed, 13 insertions(+)
> 
> diff --git a/block/block-backend.c b/block/block-backend.c
> index 681b240b12..2a984b1864 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -2217,3 +2217,12 @@ void blk_unregister_buf(BlockBackend *blk, void *host)
>  {
>      bdrv_unregister_buf(blk_bs(blk), host);
>  }
> +
> +int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
> +                                   BlockBackend *blk_out, int64_t off_out,
> +                                   int bytes, BdrvRequestFlags flags)
> +{
> +    return bdrv_co_copy_range(blk_in->root, off_in,
> +                              blk_out->root, off_out,
> +                              bytes, flags);
> +}

What happens if either ->root field is NULL?

Patch
diff mbox series

diff --git a/block/block-backend.c b/block/block-backend.c
index 681b240b12..2a984b1864 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -2217,3 +2217,12 @@  void blk_unregister_buf(BlockBackend *blk, void *host)
 {
     bdrv_unregister_buf(blk_bs(blk), host);
 }
+
+int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
+                                   BlockBackend *blk_out, int64_t off_out,
+                                   int bytes, BdrvRequestFlags flags)
+{
+    return bdrv_co_copy_range(blk_in->root, off_in,
+                              blk_out->root, off_out,
+                              bytes, flags);
+}
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 92ab624fac..6f043b6b51 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -232,4 +232,8 @@  void blk_set_force_allow_inactivate(BlockBackend *blk);
 void blk_register_buf(BlockBackend *blk, void *host, size_t size);
 void blk_unregister_buf(BlockBackend *blk, void *host);
 
+int blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
+                      BlockBackend *blk_out, int64_t off_out,
+                      int bytes, BdrvRequestFlags flags);
+
 #endif