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