This is another feature that was "logically" part of the BlockBackend, but implemented as a BlockDriverState feature. It was always kept on top using swap_feature_fields().
This series moves it to be actually implemented in the BlockBackend, removing another obstacle for removing bs->blk and allowing multiple BBs per BDS. Depends on 'block: Implement writethrough in BlockBackend'. Kevin Wolf (12): block: Don't disable I/O throttling on sync requests block: Make sure throttled BDSes always have a BB block: Introduce BlockBackendPublic block: throttle-groups: Use BlockBackend pointers internally block: Convert throttle_group_get_name() to BlockBackend block: Move throttling fields from BDS to BB block: Move actual I/O throttling to BlockBackend block: Move I/O throttling configuration functions to BlockBackend block: Introduce BdrvChild.opaque block: Drain throttling queue with BdrvChild callback block: Decouple throttling from BlockDriverState block: Don't check throttled reqs in bdrv_requests_pending() block.c | 23 +---- block/block-backend.c | 146 +++++++++++++++++++++----- block/io.c | 115 +++------------------ block/qapi.c | 6 +- block/throttle-groups.c | 223 +++++++++++++++++++++------------------- blockdev.c | 43 +++----- include/block/block.h | 6 +- include/block/block_int.h | 23 +---- include/block/throttle-groups.h | 12 +-- include/sysemu/block-backend.h | 27 +++++ tests/test-throttle.c | 62 ++++++----- 11 files changed, 345 insertions(+), 341 deletions(-) -- 1.8.3.1