block/qapi: Add 'qdev' field to query-blockstats result
Like for query-block, the client needs to identify which BlockBackend the returned data is for. Anonymous BlockBackends are identified by the device model they are attached to. Add a 'qdev' field that contains the qdev ID or QOM path of the attached device model. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
		
							
								
								
									
										10
									
								
								block/qapi.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								block/qapi.c
									
									
									
									
									
								
							| @@ -597,11 +597,21 @@ BlockStatsList *qmp_query_blockstats(bool has_query_nodes, | |||||||
|             BlockStatsList *info = g_malloc0(sizeof(*info)); |             BlockStatsList *info = g_malloc0(sizeof(*info)); | ||||||
|             AioContext *ctx = blk_get_aio_context(blk); |             AioContext *ctx = blk_get_aio_context(blk); | ||||||
|             BlockStats *s; |             BlockStats *s; | ||||||
|  |             char *qdev; | ||||||
|  |  | ||||||
|             aio_context_acquire(ctx); |             aio_context_acquire(ctx); | ||||||
|             s = bdrv_query_bds_stats(blk_bs(blk), true); |             s = bdrv_query_bds_stats(blk_bs(blk), true); | ||||||
|             s->has_device = true; |             s->has_device = true; | ||||||
|             s->device = g_strdup(blk_name(blk)); |             s->device = g_strdup(blk_name(blk)); | ||||||
|  |  | ||||||
|  |             qdev = blk_get_attached_dev_id(blk); | ||||||
|  |             if (qdev && *qdev) { | ||||||
|  |                 s->has_qdev = true; | ||||||
|  |                 s->qdev = qdev; | ||||||
|  |             } else { | ||||||
|  |                 g_free(qdev); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             bdrv_query_blk_stats(s->stats, blk); |             bdrv_query_blk_stats(s->stats, blk); | ||||||
|             aio_context_release(ctx); |             aio_context_release(ctx); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -866,6 +866,9 @@ | |||||||
| # | # | ||||||
| # @node-name: The node name of the device. (Since 2.3) | # @node-name: The node name of the device. (Since 2.3) | ||||||
| # | # | ||||||
|  | # @qdev: The qdev ID, or if no ID is assigned, the QOM path of the block | ||||||
|  | #        device. (since 3.0) | ||||||
|  | # | ||||||
| # @stats:  A @BlockDeviceStats for the device. | # @stats:  A @BlockDeviceStats for the device. | ||||||
| # | # | ||||||
| # @parent: This describes the file block device if it has one. | # @parent: This describes the file block device if it has one. | ||||||
| @@ -879,7 +882,7 @@ | |||||||
| # Since: 0.14.0 | # Since: 0.14.0 | ||||||
| ## | ## | ||||||
| { 'struct': 'BlockStats', | { 'struct': 'BlockStats', | ||||||
|   'data': {'*device': 'str', '*node-name': 'str', |   'data': {'*device': 'str', '*qdev': 'str', '*node-name': 'str', | ||||||
|            'stats': 'BlockDeviceStats', |            'stats': 'BlockDeviceStats', | ||||||
|            '*parent': 'BlockStats', |            '*parent': 'BlockStats', | ||||||
|            '*backing': 'BlockStats'} } |            '*backing': 'BlockStats'} } | ||||||
| @@ -941,7 +944,8 @@ | |||||||
| #                "idle_time_ns":2953431879, | #                "idle_time_ns":2953431879, | ||||||
| #                "account_invalid":true, | #                "account_invalid":true, | ||||||
| #                "account_failed":false | #                "account_failed":false | ||||||
| #             } | #             }, | ||||||
|  | #             "qdev": "/machine/unattached/device[23]" | ||||||
| #          }, | #          }, | ||||||
| #          { | #          { | ||||||
| #             "device":"ide1-cd0", | #             "device":"ide1-cd0", | ||||||
| @@ -959,7 +963,8 @@ | |||||||
| #                "wr_merged":0, | #                "wr_merged":0, | ||||||
| #                "account_invalid":false, | #                "account_invalid":false, | ||||||
| #                "account_failed":false | #                "account_failed":false | ||||||
| #             } | #             }, | ||||||
|  | #             "qdev": "/machine/unattached/device[24]" | ||||||
| #          }, | #          }, | ||||||
| #          { | #          { | ||||||
| #             "device":"floppy0", | #             "device":"floppy0", | ||||||
| @@ -977,7 +982,8 @@ | |||||||
| #                "wr_merged":0, | #                "wr_merged":0, | ||||||
| #                "account_invalid":false, | #                "account_invalid":false, | ||||||
| #                "account_failed":false | #                "account_failed":false | ||||||
| #             } | #             }, | ||||||
|  | #             "qdev": "/machine/unattached/device[16]" | ||||||
| #          }, | #          }, | ||||||
| #          { | #          { | ||||||
| #             "device":"sd0", | #             "device":"sd0", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user