block: reopen: Extract QemuOpts for generic block layer options
This patch adds a QemuOpts for generic block layer options to bdrv_reopen_prepare(). The only two options that currently exist (node-name and driver) cannot be changed, so the only thing we do is putting them right back into the QDict so that we check at the end that they are indeed unchanged. We will add new options soon that can actually be changed. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
		
							parent
							
								
									fc17c25931
								
							
						
					
					
						commit
						ccf9dc07b5
					
				
							
								
								
									
										24
									
								
								block.c
								
								
								
								
							
							
						
						
									
										24
									
								
								block.c
								
								
								
								
							| 
						 | 
				
			
			@ -1907,11 +1907,34 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
 | 
			
		|||
    int ret = -1;
 | 
			
		||||
    Error *local_err = NULL;
 | 
			
		||||
    BlockDriver *drv;
 | 
			
		||||
    QemuOpts *opts;
 | 
			
		||||
    const char *value;
 | 
			
		||||
 | 
			
		||||
    assert(reopen_state != NULL);
 | 
			
		||||
    assert(reopen_state->bs->drv != NULL);
 | 
			
		||||
    drv = reopen_state->bs->drv;
 | 
			
		||||
 | 
			
		||||
    /* Process generic block layer options */
 | 
			
		||||
    opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
 | 
			
		||||
    qemu_opts_absorb_qdict(opts, reopen_state->options, &local_err);
 | 
			
		||||
    if (local_err) {
 | 
			
		||||
        error_propagate(errp, local_err);
 | 
			
		||||
        ret = -EINVAL;
 | 
			
		||||
        goto error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* node-name and driver must be unchanged. Put them back into the QDict, so
 | 
			
		||||
     * that they are checked at the end of this function. */
 | 
			
		||||
    value = qemu_opt_get(opts, "node-name");
 | 
			
		||||
    if (value) {
 | 
			
		||||
        qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    value = qemu_opt_get(opts, "driver");
 | 
			
		||||
    if (value) {
 | 
			
		||||
        qdict_put(reopen_state->options, "driver", qstring_from_str(value));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* if we are to stay read-only, do not allow permission change
 | 
			
		||||
     * to r/w */
 | 
			
		||||
    if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
 | 
			
		||||
| 
						 | 
				
			
			@ -1972,6 +1995,7 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
 | 
			
		|||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
    qemu_opts_del(opts);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue