blockdev: move BDRV_O_NO_BACKING option forward
For both external_snapshot_prepare and qmp_drive_mirror, we eventually append the option BDRV_O_NO_BACKING. However, we generally do so after we create the image. To accommodate image creation wanting to verify that a backing file exists or not, add this option prior to create to override checking the existence of the backing file. This prevents QEMU from trying to re-open a backing file that's already in use (thanks to qcow2 locking). Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									7c8730d45f
								
							
						
					
					
						commit
						2a32c6e82e
					
				
							
								
								
									
										11
									
								
								blockdev.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								blockdev.c
									
									
									
									
									
								
							| @ -1710,7 +1710,8 @@ static void external_snapshot_prepare(BlkActionState *common, | ||||
|         } | ||||
| 
 | ||||
|         flags = state->old_bs->open_flags; | ||||
|         flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ); | ||||
|         flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_COPY_ON_READ); | ||||
|         flags |= BDRV_O_NO_BACKING; | ||||
| 
 | ||||
|         /* create new image w/backing file */ | ||||
|         mode = s->has_mode ? s->mode : NEW_IMAGE_MODE_ABSOLUTE_PATHS; | ||||
| @ -1735,8 +1736,6 @@ static void external_snapshot_prepare(BlkActionState *common, | ||||
|             qdict_put_str(options, "node-name", snapshot_node_name); | ||||
|         } | ||||
|         qdict_put_str(options, "driver", format); | ||||
| 
 | ||||
|         flags |= BDRV_O_NO_BACKING; | ||||
|     } | ||||
| 
 | ||||
|     state->new_bs = bdrv_open(new_image_file, snapshot_ref, options, flags, | ||||
| @ -3548,6 +3547,9 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp) | ||||
|         backing_mode = MIRROR_OPEN_BACKING_CHAIN; | ||||
|     } | ||||
| 
 | ||||
|     /* Don't open backing image in create() */ | ||||
|     flags |= BDRV_O_NO_BACKING; | ||||
| 
 | ||||
|     if ((arg->sync == MIRROR_SYNC_MODE_FULL || !source) | ||||
|         && arg->mode != NEW_IMAGE_MODE_EXISTING) | ||||
|     { | ||||
| @ -3587,8 +3589,7 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp) | ||||
|     /* Mirroring takes care of copy-on-write using the source's backing
 | ||||
|      * file. | ||||
|      */ | ||||
|     target_bs = bdrv_open(arg->target, NULL, options, | ||||
|                           flags | BDRV_O_NO_BACKING, errp); | ||||
|     target_bs = bdrv_open(arg->target, NULL, options, flags, errp); | ||||
|     if (!target_bs) { | ||||
|         goto out; | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 John Snow
						John Snow