mirror of
				https://github.com/mborgerson/xemu.git
				synced 2025-10-30 04:31:19 +00:00 
			
		
		
		
	blockdev-nbd: Boxed argument type for nbd-server-add
Move the arguments of nbd-server-add to a new struct BlockExportNbd and convert the command to 'boxed': true. This makes it easier to share code with the storage daemon. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200224143008.13362-11-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									eed8b69178
								
							
						
					
					
						commit
						c62d24e906
					
				| @ -148,10 +148,7 @@ void qmp_nbd_server_start(SocketAddressLegacy *addr, | ||||
|     qapi_free_SocketAddress(addr_flat); | ||||
| } | ||||
| 
 | ||||
| void qmp_nbd_server_add(const char *device, bool has_name, const char *name, | ||||
|                         bool has_description, const char *description, | ||||
|                         bool has_writable, bool writable, | ||||
|                         bool has_bitmap, const char *bitmap, Error **errp) | ||||
| void qmp_nbd_server_add(BlockExportNbd *arg, Error **errp) | ||||
| { | ||||
|     BlockDriverState *bs = NULL; | ||||
|     BlockBackend *on_eject_blk; | ||||
| @ -164,28 +161,28 @@ void qmp_nbd_server_add(const char *device, bool has_name, const char *name, | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (!has_name) { | ||||
|         name = device; | ||||
|     if (!arg->has_name) { | ||||
|         arg->name = arg->device; | ||||
|     } | ||||
| 
 | ||||
|     if (strlen(name) > NBD_MAX_STRING_SIZE) { | ||||
|         error_setg(errp, "export name '%s' too long", name); | ||||
|     if (strlen(arg->name) > NBD_MAX_STRING_SIZE) { | ||||
|         error_setg(errp, "export name '%s' too long", arg->name); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (has_description && strlen(description) > NBD_MAX_STRING_SIZE) { | ||||
|         error_setg(errp, "description '%s' too long", description); | ||||
|     if (arg->description && strlen(arg->description) > NBD_MAX_STRING_SIZE) { | ||||
|         error_setg(errp, "description '%s' too long", arg->description); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (nbd_export_find(name)) { | ||||
|         error_setg(errp, "NBD server already has export named '%s'", name); | ||||
|     if (nbd_export_find(arg->name)) { | ||||
|         error_setg(errp, "NBD server already has export named '%s'", arg->name); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     on_eject_blk = blk_by_name(device); | ||||
|     on_eject_blk = blk_by_name(arg->device); | ||||
| 
 | ||||
|     bs = bdrv_lookup_bs(device, device, errp); | ||||
|     bs = bdrv_lookup_bs(arg->device, arg->device, errp); | ||||
|     if (!bs) { | ||||
|         return; | ||||
|     } | ||||
| @ -199,15 +196,15 @@ void qmp_nbd_server_add(const char *device, bool has_name, const char *name, | ||||
|         goto out; | ||||
|     } | ||||
| 
 | ||||
|     if (!has_writable) { | ||||
|         writable = false; | ||||
|     if (!arg->has_writable) { | ||||
|         arg->writable = false; | ||||
|     } | ||||
|     if (bdrv_is_read_only(bs)) { | ||||
|         writable = false; | ||||
|         arg->writable = false; | ||||
|     } | ||||
| 
 | ||||
|     exp = nbd_export_new(bs, 0, len, name, description, bitmap, | ||||
|                          !writable, !writable, | ||||
|     exp = nbd_export_new(bs, 0, len, arg->name, arg->description, arg->bitmap, | ||||
|                          !arg->writable, !arg->writable, | ||||
|                          NULL, false, on_eject_blk, errp); | ||||
|     if (!exp) { | ||||
|         goto out; | ||||
|  | ||||
| @ -2341,6 +2341,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) | ||||
|     Error *local_err = NULL; | ||||
|     BlockInfoList *block_list, *info; | ||||
|     SocketAddress *addr; | ||||
|     BlockExportNbd export; | ||||
| 
 | ||||
|     if (writable && !all) { | ||||
|         error_setg(&local_err, "-w only valid together with -a"); | ||||
| @ -2373,8 +2374,13 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) | ||||
|             continue; | ||||
|         } | ||||
| 
 | ||||
|         qmp_nbd_server_add(info->value->device, false, NULL, false, NULL, | ||||
|                            true, writable, false, NULL, &local_err); | ||||
|         export = (BlockExportNbd) { | ||||
|             .device         = info->value->device, | ||||
|             .has_writable   = true, | ||||
|             .writable       = writable, | ||||
|         }; | ||||
| 
 | ||||
|         qmp_nbd_server_add(&export, &local_err); | ||||
| 
 | ||||
|         if (local_err != NULL) { | ||||
|             qmp_nbd_server_stop(NULL); | ||||
| @ -2395,8 +2401,15 @@ void hmp_nbd_server_add(Monitor *mon, const QDict *qdict) | ||||
|     bool writable = qdict_get_try_bool(qdict, "writable", false); | ||||
|     Error *local_err = NULL; | ||||
| 
 | ||||
|     qmp_nbd_server_add(device, !!name, name, false, NULL, true, writable, | ||||
|                        false, NULL, &local_err); | ||||
|     BlockExportNbd export = { | ||||
|         .device         = (char *) device, | ||||
|         .has_name       = !!name, | ||||
|         .name           = (char *) name, | ||||
|         .has_writable   = true, | ||||
|         .writable       = writable, | ||||
|     }; | ||||
| 
 | ||||
|     qmp_nbd_server_add(&export, &local_err); | ||||
|     hmp_handle_error(mon, local_err); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -5112,9 +5112,9 @@ | ||||
|             '*tls-authz': 'str'} } | ||||
| 
 | ||||
| ## | ||||
| # @nbd-server-add: | ||||
| # @BlockExportNbd: | ||||
| # | ||||
| # Export a block node to QEMU's embedded NBD server. | ||||
| # An NBD block export. | ||||
| # | ||||
| # @device: The device name or node name of the node to be exported | ||||
| # | ||||
| @ -5131,14 +5131,24 @@ | ||||
| #          NBD client can use NBD_OPT_SET_META_CONTEXT with | ||||
| #          "qemu:dirty-bitmap:NAME" to inspect the bitmap. (since 4.0) | ||||
| # | ||||
| # Since: 5.0 | ||||
| ## | ||||
| { 'struct': 'BlockExportNbd', | ||||
|   'data': {'device': 'str', '*name': 'str', '*description': 'str', | ||||
|            '*writable': 'bool', '*bitmap': 'str' } } | ||||
| 
 | ||||
| ## | ||||
| # @nbd-server-add: | ||||
| # | ||||
| # Export a block node to QEMU's embedded NBD server. | ||||
| # | ||||
| # Returns: error if the server is not running, or export with the same name | ||||
| #          already exists. | ||||
| # | ||||
| # Since: 1.3.0 | ||||
| ## | ||||
| { 'command': 'nbd-server-add', | ||||
|   'data': {'device': 'str', '*name': 'str', '*description': 'str', | ||||
|            '*writable': 'bool', '*bitmap': 'str' } } | ||||
|   'data': 'BlockExportNbd', 'boxed': true } | ||||
| 
 | ||||
| ## | ||||
| # @NbdServerRemoveMode: | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user