Re: [Qemu-block] [PATCH RFC 2/7] block-backend: Introduce blk_root() helper
On 2016/10/25 17:58, Changlong Xie wrote: I know you need blk->root in the next patch, but we strongly don't recommend your current solution. Please refer Kevin's cf2ab8fc 1409 /* XXX Ugly way to get blk->root, but that's a feature, not a bug. This 1410 * hack makes it obvious that vhdx_write_header() bypasses the BlockBackend 1411 * here, which it really shouldn't be doing. */ 1412 child = QLIST_FIRST(>parents); 1413 assert(!QLIST_NEXT(child, next_parent)); Then you can drop this commit. OK, got it, I'll drop this patch in next version, thanks. On 10/20/2016 09:57 PM, zhanghailiang wrote: With this helper function, we can get the BdrvChild struct from BlockBackend Signed-off-by: zhanghailiang--- block/block-backend.c | 5 + include/sysemu/block-backend.h | 1 + 2 files changed, 6 insertions(+) diff --git a/block/block-backend.c b/block/block-backend.c index 1a724a8..66387f0 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -389,6 +389,11 @@ BlockDriverState *blk_bs(BlockBackend *blk) return blk->root ? blk->root->bs : NULL; } +BdrvChild *blk_root(BlockBackend *blk) +{ +return blk->root; +} + static BlockBackend *bdrv_first_blk(BlockDriverState *bs) { BdrvChild *child; diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index b07159b..867f9f5 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -99,6 +99,7 @@ void blk_remove_bs(BlockBackend *blk); void blk_insert_bs(BlockBackend *blk, BlockDriverState *bs); bool bdrv_has_blk(BlockDriverState *bs); bool bdrv_is_root_node(BlockDriverState *bs); +BdrvChild *blk_root(BlockBackend *blk); void blk_set_allow_write_beyond_eof(BlockBackend *blk, bool allow); void blk_iostatus_enable(BlockBackend *blk); .
Re: [Qemu-block] [PATCH RFC 2/7] block-backend: Introduce blk_root() helper
I know you need blk->root in the next patch, but we strongly don't recommend your current solution. Please refer Kevin's cf2ab8fc 1409 /* XXX Ugly way to get blk->root, but that's a feature, not a bug. This 1410 * hack makes it obvious that vhdx_write_header() bypasses the BlockBackend 1411 * here, which it really shouldn't be doing. */ 1412 child = QLIST_FIRST(>parents); 1413 assert(!QLIST_NEXT(child, next_parent)); Then you can drop this commit. On 10/20/2016 09:57 PM, zhanghailiang wrote: With this helper function, we can get the BdrvChild struct from BlockBackend Signed-off-by: zhanghailiang--- block/block-backend.c | 5 + include/sysemu/block-backend.h | 1 + 2 files changed, 6 insertions(+) diff --git a/block/block-backend.c b/block/block-backend.c index 1a724a8..66387f0 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -389,6 +389,11 @@ BlockDriverState *blk_bs(BlockBackend *blk) return blk->root ? blk->root->bs : NULL; } +BdrvChild *blk_root(BlockBackend *blk) +{ +return blk->root; +} + static BlockBackend *bdrv_first_blk(BlockDriverState *bs) { BdrvChild *child; diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index b07159b..867f9f5 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -99,6 +99,7 @@ void blk_remove_bs(BlockBackend *blk); void blk_insert_bs(BlockBackend *blk, BlockDriverState *bs); bool bdrv_has_blk(BlockDriverState *bs); bool bdrv_is_root_node(BlockDriverState *bs); +BdrvChild *blk_root(BlockBackend *blk); void blk_set_allow_write_beyond_eof(BlockBackend *blk, bool allow); void blk_iostatus_enable(BlockBackend *blk);
[Qemu-block] [PATCH RFC 2/7] block-backend: Introduce blk_root() helper
With this helper function, we can get the BdrvChild struct from BlockBackend Signed-off-by: zhanghailiang--- block/block-backend.c | 5 + include/sysemu/block-backend.h | 1 + 2 files changed, 6 insertions(+) diff --git a/block/block-backend.c b/block/block-backend.c index 1a724a8..66387f0 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -389,6 +389,11 @@ BlockDriverState *blk_bs(BlockBackend *blk) return blk->root ? blk->root->bs : NULL; } +BdrvChild *blk_root(BlockBackend *blk) +{ +return blk->root; +} + static BlockBackend *bdrv_first_blk(BlockDriverState *bs) { BdrvChild *child; diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index b07159b..867f9f5 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -99,6 +99,7 @@ void blk_remove_bs(BlockBackend *blk); void blk_insert_bs(BlockBackend *blk, BlockDriverState *bs); bool bdrv_has_blk(BlockDriverState *bs); bool bdrv_is_root_node(BlockDriverState *bs); +BdrvChild *blk_root(BlockBackend *blk); void blk_set_allow_write_beyond_eof(BlockBackend *blk, bool allow); void blk_iostatus_enable(BlockBackend *blk); -- 1.8.3.1