Right now BlockAcctStats is always reside on BlockBackend. This structure is not used in any other place. Thus we are able to create a converter from one pointer to another.
Signed-off-by: Denis V. Lunev <d...@openvz.org> CC: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> CC: Kevin Wolf <kw...@redhat.com> CC: Max Reitz <mre...@redhat.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 6936b25c83..e77a7e468e 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -2143,6 +2143,11 @@ BlockAcctStats *blk_get_stats(BlockBackend *blk) return &blk->stats; } +BlockBackend *blk_stats2blk(BlockAcctStats *s) +{ + return container_of(s, BlockBackend, stats); +} + void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk, BlockCompletionFunc *cb, void *opaque) { diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index 8203d7f6f9..bd4694e7bc 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -227,6 +227,7 @@ void blk_add_insert_bs_notifier(BlockBackend *blk, Notifier *notify); void blk_io_plug(BlockBackend *blk); void blk_io_unplug(BlockBackend *blk); BlockAcctStats *blk_get_stats(BlockBackend *blk); +BlockBackend *blk_stats2blk(BlockAcctStats *stats); BlockBackendRootState *blk_get_root_state(BlockBackend *blk); void blk_update_root_state(BlockBackend *blk); bool blk_get_detect_zeroes_from_root_state(BlockBackend *blk); -- 2.17.1