[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [RFC PATCH v2 1/7] block: Introduce API for copy offloa
From: |
Fam Zheng |
Subject: |
Re: [Qemu-block] [RFC PATCH v2 1/7] block: Introduce API for copy offloading |
Date: |
Fri, 27 Apr 2018 13:52:33 +0800 |
User-agent: |
Mutt/1.9.2 (2017-12-15) |
On Thu, 04/26 15:57, Stefan Hajnoczi wrote:
> On Wed, Apr 18, 2018 at 11:04:18AM +0800, Fam Zheng wrote:
> > diff --git a/block/io.c b/block/io.c
> > index bd9a19a9c4..d274e9525f 100644
> > --- a/block/io.c
> > +++ b/block/io.c
> > @@ -2826,3 +2826,94 @@ void bdrv_unregister_buf(BlockDriverState *bs, void
> > *host)
> > bdrv_unregister_buf(child->bs, host);
> > }
> > }
> > +
> > +static int bdrv_co_copy_range_internal(BdrvChild *src,
>
> Please remember to use coroutine_fn for coroutines! This applies to the
> other functions in this patch too.
OK!
>
> > +int bdrv_co_copy_range(BdrvChild *src, uint64_t src_offset,
> > + BdrvChild *dst, uint64_t dst_offset,
> > + uint64_t bytes, BdrvRequestFlags flags)
> > +{
> > + BdrvTrackedRequest src_req, dst_req;
> > + BlockDriverState *src_bs = src->bs;
> > + BlockDriverState *dst_bs = dst->bs;
> > + int ret;
> > +
> > + bdrv_inc_in_flight(src_bs);
> > + bdrv_inc_in_flight(dst_bs);
> > + tracked_request_begin(&src_req, src_bs, src_offset,
> > + bytes, BDRV_TRACKED_READ);
> > + tracked_request_begin(&dst_req, dst_bs, dst_offset,
> > + bytes, BDRV_TRACKED_WRITE);
>
> Tracked requests and in-flight counters are only updated on root nodes.
> This is not how read/write works. Does drain work on an internal or
> leaf node with multiple parents?
Telling from how bdrv_do_drained_begin is implemented now (recursive both to
parents and children), I think it should work. But you are right this is
inconsistent with read/write code, it seems I could move this it to
bdrv_co_copy_range_internal.
>
> > diff --git a/include/block/block.h b/include/block/block.h
> > index cdec3639a3..72ac011b2b 100644
> > --- a/include/block/block.h
> > +++ b/include/block/block.h
> > @@ -604,4 +604,8 @@ bool bdrv_can_store_new_dirty_bitmap(BlockDriverState
> > *bs, const char *name,
> > */
> > void bdrv_register_buf(BlockDriverState *bs, void *host, size_t size);
> > void bdrv_unregister_buf(BlockDriverState *bs, void *host);
> > +
> > +int bdrv_co_copy_range(BdrvChild *bs, uint64_t offset,
> > + BdrvChild *src, uint64_t src_offset,
> > + uint64_t bytes, BdrvRequestFlags flags);
>
> Please document this new block.h API.
OK.
>
> These arguments are in the wrong order! The first BdrvChild is the
> source and the second is the destination.
Right, will fix.
Fam
- [Qemu-block] [RFC PATCH v2 0/7] qemu-img convert with copy offloading, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 1/7] block: Introduce API for copy offloading, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 2/7] raw: Implement copy offloading, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 3/7] qcow2: Implement copy offloading, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 4/7] file-posix: Implement bdrv_co_copy_range, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 5/7] iscsi: Implement copy offloading, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 6/7] block-backend: Add blk_co_copy_range, Fam Zheng, 2018/04/17
- [Qemu-block] [RFC PATCH v2 7/7] qemu-img: Convert with copy offloading, Fam Zheng, 2018/04/17