Message ID | 1476971860-20860-3-git-send-email-zhang.zhanghailiang@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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(&bs->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 <zhang.zhanghailiang@huawei.com> > --- > 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); >
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(&bs->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 <zhang.zhanghailiang@huawei.com> >> --- >> 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); >> > > > > . >
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);
With this helper function, we can get the BdrvChild struct from BlockBackend Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> --- block/block-backend.c | 5 +++++ include/sysemu/block-backend.h | 1 + 2 files changed, 6 insertions(+)