blockdev: Make orphaned -drive fatal
Block backends defined with "-drive if=T" with T other than "none" are meant to be picked up by machine initialization code: a suitable frontend gets created and wired up automatically. If machine initialization code doesn't comply, the block backend remains unused. This triggers a warning since commit a66c9dc, v2.2.0. Drives created by default are exempted; use -nodefaults to get rid of them. Turn this warning into an error. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <1487153147-11530-8-git-send-email-armbru@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
This commit is contained in:
		
							parent
							
								
									664cc623bf
								
							
						
					
					
						commit
						720b8dc052
					
				
							
								
								
									
										14
									
								
								blockdev.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								blockdev.c
									
									
									
									
									
								
							| @ -227,30 +227,30 @@ DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit) | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| bool drive_check_orphaned(void) | ||||
| void drive_check_orphaned(void) | ||||
| { | ||||
|     BlockBackend *blk; | ||||
|     DriveInfo *dinfo; | ||||
|     Location loc; | ||||
|     bool rs = false; | ||||
|     bool orphans = false; | ||||
| 
 | ||||
|     for (blk = blk_next(NULL); blk; blk = blk_next(blk)) { | ||||
|         dinfo = blk_legacy_dinfo(blk); | ||||
|         /* If dinfo->bdrv->dev is NULL, it has no device attached. */ | ||||
|         /* Unless this is a default drive, this may be an oversight. */ | ||||
|         if (!blk_get_attached_dev(blk) && !dinfo->is_default && | ||||
|             dinfo->type != IF_NONE) { | ||||
|             loc_push_none(&loc); | ||||
|             qemu_opts_loc_restore(dinfo->opts); | ||||
|             error_report("warning: machine type does not support" | ||||
|             error_report("machine type does not support" | ||||
|                          " if=%s,bus=%d,unit=%d", | ||||
|                          if_name[dinfo->type], dinfo->bus, dinfo->unit); | ||||
|             loc_pop(&loc); | ||||
|             rs = true; | ||||
|             orphans = true; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return rs; | ||||
|     if (orphans) { | ||||
|         exit(1); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| DriveInfo *drive_get_by_index(BlockInterfaceType type, int index) | ||||
|  | ||||
| @ -48,7 +48,7 @@ BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo); | ||||
| void override_max_devs(BlockInterfaceType type, int max_devs); | ||||
| 
 | ||||
| DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit); | ||||
| bool drive_check_orphaned(void); | ||||
| void drive_check_orphaned(void); | ||||
| DriveInfo *drive_get_by_index(BlockInterfaceType type, int index); | ||||
| int drive_get_max_bus(BlockInterfaceType type); | ||||
| int drive_get_max_devs(BlockInterfaceType type); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Markus Armbruster
						Markus Armbruster