Revision caad4eb3 hw/scsi/scsi-bus.c
b/hw/scsi/scsi-bus.c | ||
---|---|---|
209 | 209 |
/* handle legacy '-drive if=scsi,...' cmd line args */ |
210 | 210 |
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv, |
211 | 211 |
int unit, bool removable, int bootindex, |
212 |
const char *serial) |
|
212 |
const char *serial, Error **errp)
|
|
213 | 213 |
{ |
214 | 214 |
const char *driver; |
215 | 215 |
DeviceState *dev; |
216 |
Error *err = NULL; |
|
216 | 217 |
|
217 | 218 |
driver = bdrv_is_sg(bdrv) ? "scsi-generic" : "scsi-disk"; |
218 | 219 |
dev = qdev_create(&bus->qbus, driver); |
... | ... | |
227 | 228 |
qdev_prop_set_string(dev, "serial", serial); |
228 | 229 |
} |
229 | 230 |
if (qdev_prop_set_drive(dev, "drive", bdrv) < 0) { |
231 |
error_setg(errp, "Setting drive property failed"); |
|
230 | 232 |
qdev_free(dev); |
231 | 233 |
return NULL; |
232 | 234 |
} |
233 |
if (qdev_init(dev) < 0) |
|
235 |
object_property_set_bool(OBJECT(dev), true, "realized", &err); |
|
236 |
if (err != NULL) { |
|
237 |
error_propagate(errp, err); |
|
238 |
qdev_free(dev); |
|
234 | 239 |
return NULL; |
240 |
} |
|
235 | 241 |
return SCSI_DEVICE(dev); |
236 | 242 |
} |
237 | 243 |
|
238 |
int scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
|
|
244 |
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, Error **errp)
|
|
239 | 245 |
{ |
240 | 246 |
Location loc; |
241 | 247 |
DriveInfo *dinfo; |
242 |
int res = 0, unit; |
|
248 |
int unit; |
|
249 |
Error *err = NULL; |
|
243 | 250 |
|
244 | 251 |
loc_push_none(&loc); |
245 | 252 |
for (unit = 0; unit <= bus->info->max_target; unit++) { |
... | ... | |
248 | 255 |
continue; |
249 | 256 |
} |
250 | 257 |
qemu_opts_loc_restore(dinfo->opts); |
251 |
if (!scsi_bus_legacy_add_drive(bus, dinfo->bdrv, unit, false, -1, NULL)) { |
|
252 |
res = -1; |
|
258 |
scsi_bus_legacy_add_drive(bus, dinfo->bdrv, unit, false, -1, NULL, |
|
259 |
&err); |
|
260 |
if (err != NULL) { |
|
261 |
error_propagate(errp, err); |
|
253 | 262 |
break; |
254 | 263 |
} |
255 | 264 |
} |
256 | 265 |
loc_pop(&loc); |
257 |
return res; |
|
258 | 266 |
} |
259 | 267 |
|
260 | 268 |
static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf) |
Also available in: Unified diff