block: Reuse reference handling from bdrv_open()
Remove the reference parameter and the related handling code from bdrv_file_open(), since it exists in bdrv_open() now as well. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Benoit Canet <benoit@irqsave.net> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									2e40134bfd
								
							
						
					
					
						commit
						5d12aa63c7
					
				
							
								
								
									
										32
									
								
								block.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								block.c
									
									
									
									
									
								
							@ -961,8 +961,7 @@ free_and_fail:
 | 
				
			|||||||
 * dictionary, it needs to use QINCREF() before calling bdrv_file_open.
 | 
					 * dictionary, it needs to use QINCREF() before calling bdrv_file_open.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
 | 
					static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
 | 
				
			||||||
                          const char *reference, QDict *options, int flags,
 | 
					                          QDict *options, int flags, Error **errp)
 | 
				
			||||||
                          Error **errp)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    BlockDriverState *bs = NULL;
 | 
					    BlockDriverState *bs = NULL;
 | 
				
			||||||
    BlockDriver *drv;
 | 
					    BlockDriver *drv;
 | 
				
			||||||
@ -976,23 +975,6 @@ static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
 | 
				
			|||||||
        options = qdict_new();
 | 
					        options = qdict_new();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (reference) {
 | 
					 | 
				
			||||||
        if (filename || qdict_size(options)) {
 | 
					 | 
				
			||||||
            error_setg(errp, "Cannot reference an existing block device with "
 | 
					 | 
				
			||||||
                       "additional options or a new filename");
 | 
					 | 
				
			||||||
            return -EINVAL;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        QDECREF(options);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        bs = bdrv_lookup_bs(reference, reference, errp);
 | 
					 | 
				
			||||||
        if (!bs) {
 | 
					 | 
				
			||||||
            return -ENODEV;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        bdrv_ref(bs);
 | 
					 | 
				
			||||||
        *pbs = bs;
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bs = bdrv_new("");
 | 
					    bs = bdrv_new("");
 | 
				
			||||||
    bs->options = options;
 | 
					    bs->options = options;
 | 
				
			||||||
    options = qdict_clone_shallow(options);
 | 
					    options = qdict_clone_shallow(options);
 | 
				
			||||||
@ -1245,12 +1227,6 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    assert(pbs);
 | 
					    assert(pbs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (flags & BDRV_O_PROTOCOL) {
 | 
					 | 
				
			||||||
        assert(!drv);
 | 
					 | 
				
			||||||
        return bdrv_file_open(pbs, filename, reference, options,
 | 
					 | 
				
			||||||
                              flags & ~BDRV_O_PROTOCOL, errp);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (reference) {
 | 
					    if (reference) {
 | 
				
			||||||
        bool options_non_empty = options ? qdict_size(options) : false;
 | 
					        bool options_non_empty = options ? qdict_size(options) : false;
 | 
				
			||||||
        QDECREF(options);
 | 
					        QDECREF(options);
 | 
				
			||||||
@ -1276,6 +1252,12 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
 | 
				
			|||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (flags & BDRV_O_PROTOCOL) {
 | 
				
			||||||
 | 
					        assert(!drv);
 | 
				
			||||||
 | 
					        return bdrv_file_open(pbs, filename, options, flags & ~BDRV_O_PROTOCOL,
 | 
				
			||||||
 | 
					                              errp);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (*pbs) {
 | 
					    if (*pbs) {
 | 
				
			||||||
        bs = *pbs;
 | 
					        bs = *pbs;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user