@ -759,7 +759,8 @@ QemuOptsList qemu_legacy_drive_opts = {
} ,
} ,
} ;
} ;
DriveInfo * drive_new ( QemuOpts * all_opts , BlockInterfaceType block_default_type )
DriveInfo * drive_new ( QemuOpts * all_opts , BlockInterfaceType block_default_type ,
Error * * errp )
{
{
const char * value ;
const char * value ;
BlockBackend * blk ;
BlockBackend * blk ;
@ -808,7 +809,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
qemu_opt_rename ( all_opts , opt_renames [ i ] . from , opt_renames [ i ] . to ,
qemu_opt_rename ( all_opts , opt_renames [ i ] . from , opt_renames [ i ] . to ,
& local_err ) ;
& local_err ) ;
if ( local_err ) {
if ( local_err ) {
error_report_err ( local_err ) ;
error_propagate ( errp , local_err ) ;
return NULL ;
return NULL ;
}
}
}
}
@ -819,7 +820,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
bool writethrough ;
bool writethrough ;
if ( bdrv_parse_cache_mode ( value , & flags , & writethrough ) ! = 0 ) {
if ( bdrv_parse_cache_mode ( value , & flags , & writethrough ) ! = 0 ) {
error_report ( " invalid cache option " ) ;
error_setg ( errp , " invalid cache option " ) ;
return NULL ;
return NULL ;
}
}
@ -847,7 +848,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
& error_abort ) ;
& error_abort ) ;
qemu_opts_absorb_qdict ( legacy_opts , bs_opts , & local_err ) ;
qemu_opts_absorb_qdict ( legacy_opts , bs_opts , & local_err ) ;
if ( local_err ) {
if ( local_err ) {
error_report_err ( local_err ) ;
error_propagate ( errp , local_err ) ;
goto fail ;
goto fail ;
}
}
@ -860,7 +861,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
media = MEDIA_CDROM ;
media = MEDIA_CDROM ;
read_only = true ;
read_only = true ;
} else {
} else {
error_report ( " '%s' invalid media " , value ) ;
error_setg ( errp , " '%s' invalid media " , value ) ;
goto fail ;
goto fail ;
}
}
}
}
@ -885,7 +886,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
type + + ) {
type + + ) {
}
}
if ( type = = IF_COUNT ) {
if ( type = = IF_COUNT ) {
error_report ( " unsupported bus type '%s' " , value ) ;
error_setg ( errp , " unsupported bus type '%s' " , value ) ;
goto fail ;
goto fail ;
}
}
} else {
} else {
@ -902,7 +903,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
if ( index ! = - 1 ) {
if ( index ! = - 1 ) {
if ( bus_id ! = 0 | | unit_id ! = - 1 ) {
if ( bus_id ! = 0 | | unit_id ! = - 1 ) {
error_report ( " index cannot be used with bus and unit " ) ;
error_setg ( errp , " index cannot be used with bus and unit " ) ;
goto fail ;
goto fail ;
}
}
bus_id = drive_index_to_bus_id ( type , index ) ;
bus_id = drive_index_to_bus_id ( type , index ) ;
@ -921,13 +922,13 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
}
}
if ( max_devs & & unit_id > = max_devs ) {
if ( max_devs & & unit_id > = max_devs ) {
error_report ( " unit %d too big (max is %d) " , unit_id , max_devs - 1 ) ;
error_setg ( errp , " unit %d too big (max is %d) " , unit_id , max_devs - 1 ) ;
goto fail ;
goto fail ;
}
}
if ( drive_get ( type , bus_id , unit_id ) ! = NULL ) {
if ( drive_get ( type , bus_id , unit_id ) ! = NULL ) {
error_report ( " drive with bus=%d, unit=%d (index=%d) exists " ,
error_setg ( errp , " drive with bus=%d, unit=%d (index=%d) exists " ,
bus_id , unit_id , index ) ;
bus_id , unit_id , index ) ;
goto fail ;
goto fail ;
}
}
@ -970,7 +971,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
if ( werror ! = NULL ) {
if ( werror ! = NULL ) {
if ( type ! = IF_IDE & & type ! = IF_SCSI & & type ! = IF_VIRTIO & &
if ( type ! = IF_IDE & & type ! = IF_SCSI & & type ! = IF_VIRTIO & &
type ! = IF_NONE ) {
type ! = IF_NONE ) {
error_report ( " werror is not supported by this bus type " ) ;
error_setg ( errp , " werror is not supported by this bus type " ) ;
goto fail ;
goto fail ;
}
}
qdict_put_str ( bs_opts , " werror " , werror ) ;
qdict_put_str ( bs_opts , " werror " , werror ) ;
@ -980,7 +981,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
if ( rerror ! = NULL ) {
if ( rerror ! = NULL ) {
if ( type ! = IF_IDE & & type ! = IF_VIRTIO & & type ! = IF_SCSI & &
if ( type ! = IF_IDE & & type ! = IF_VIRTIO & & type ! = IF_SCSI & &
type ! = IF_NONE ) {
type ! = IF_NONE ) {
error_report ( " rerror is not supported by this bus type " ) ;
error_setg ( errp , " rerror is not supported by this bus type " ) ;
goto fail ;
goto fail ;
}
}
qdict_put_str ( bs_opts , " rerror " , rerror ) ;
qdict_put_str ( bs_opts , " rerror " , rerror ) ;
@ -991,7 +992,7 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
bs_opts = NULL ;
bs_opts = NULL ;
if ( ! blk ) {
if ( ! blk ) {
if ( local_err ) {
if ( local_err ) {
error_report_err ( local_err ) ;
error_propagate ( errp , local_err ) ;
}
}
goto fail ;
goto fail ;
} else {
} else {