qmp: Allow block_resize to manipulate bs graph nodes.
Signed-off-by: Benoit Canet <benoit@irqsave.net> Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							
								
								
									
										18
									
								
								blockdev.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								blockdev.c
									
									
									
									
									
								
							| @@ -1683,14 +1683,24 @@ int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data) | |||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| void qmp_block_resize(const char *device, int64_t size, Error **errp) | void qmp_block_resize(bool has_device, const char *device, | ||||||
|  |                       bool has_node_name, const char *node_name, | ||||||
|  |                       int64_t size, Error **errp) | ||||||
| { | { | ||||||
|  |     Error *local_err = NULL; | ||||||
|     BlockDriverState *bs; |     BlockDriverState *bs; | ||||||
|     int ret; |     int ret; | ||||||
|  |  | ||||||
|     bs = bdrv_find(device); |     bs = bdrv_lookup_bs(has_device ? device : NULL, | ||||||
|     if (!bs) { |                         has_node_name ? node_name : NULL, | ||||||
|         error_set(errp, QERR_DEVICE_NOT_FOUND, device); |                         &local_err); | ||||||
|  |     if (error_is_set(&local_err)) { | ||||||
|  |         error_propagate(errp, local_err); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (!bdrv_is_first_non_filter(bs)) { | ||||||
|  |         error_set(errp, QERR_FEATURE_DISABLED, "resize"); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								hmp.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								hmp.c
									
									
									
									
									
								
							| @@ -893,7 +893,7 @@ void hmp_block_resize(Monitor *mon, const QDict *qdict) | |||||||
|     int64_t size = qdict_get_int(qdict, "size"); |     int64_t size = qdict_get_int(qdict, "size"); | ||||||
|     Error *errp = NULL; |     Error *errp = NULL; | ||||||
|  |  | ||||||
|     qmp_block_resize(device, size, &errp); |     qmp_block_resize(true, device, false, NULL, size, &errp); | ||||||
|     hmp_handle_error(mon, &errp); |     hmp_handle_error(mon, &errp); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1724,7 +1724,11 @@ | |||||||
| # | # | ||||||
| # Resize a block image while a guest is running. | # Resize a block image while a guest is running. | ||||||
| # | # | ||||||
| # @device:  the name of the device to get the image resized | # Either @device or @node-name must be set but not both. | ||||||
|  | # | ||||||
|  | # @device: #optional the name of the device to get the image resized | ||||||
|  | # | ||||||
|  | # @node-name: #optional graph node name to get the image resized (Since 2.0) | ||||||
| # | # | ||||||
| # @size:  new image size in bytes | # @size:  new image size in bytes | ||||||
| # | # | ||||||
| @@ -1733,7 +1737,9 @@ | |||||||
| # | # | ||||||
| # Since: 0.14.0 | # Since: 0.14.0 | ||||||
| ## | ## | ||||||
| { 'command': 'block_resize', 'data': { 'device': 'str', 'size': 'int' }} | { 'command': 'block_resize', 'data': { '*device': 'str', | ||||||
|  |                                        '*node-name': 'str', | ||||||
|  |                                        'size': 'int' }} | ||||||
|  |  | ||||||
| ## | ## | ||||||
| # @NewImageMode | # @NewImageMode | ||||||
|   | |||||||
| @@ -931,7 +931,7 @@ EQMP | |||||||
|  |  | ||||||
|     { |     { | ||||||
|         .name       = "block_resize", |         .name       = "block_resize", | ||||||
|         .args_type  = "device:B,size:o", |         .args_type  = "device:s?,node-name:s?,size:o", | ||||||
|         .mhandler.cmd_new = qmp_marshal_input_block_resize, |         .mhandler.cmd_new = qmp_marshal_input_block_resize, | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
| @@ -944,6 +944,7 @@ Resize a block image while a guest is running. | |||||||
| Arguments: | Arguments: | ||||||
|  |  | ||||||
| - "device": the device's ID, must be unique (json-string) | - "device": the device's ID, must be unique (json-string) | ||||||
|  | - "node-name": the node name in the block driver state graph (json-string) | ||||||
| - "size": new size | - "size": new size | ||||||
|  |  | ||||||
| Example: | Example: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user