mirror of https://github.com/xqemu/xqemu.git
usb-storage: Forward serial number to scsi-disk
usb-storage takes care to fetch the USB serial number from -drive options, but it neglected to pass its own 'serial' property to the scsi-disk it creates. With this patch, the 'serial' qdev property and the 'serial' option in -drive behave the same and correctly apply the serial number on both USB and SCSI level. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
d05ef16045
commit
76534da749
|
@ -99,7 +99,7 @@ static int scsi_hot_add(Monitor *mon, DeviceState *adapter,
|
||||||
dinfo->unit = qemu_opt_get_number(dinfo->opts, "unit", -1);
|
dinfo->unit = qemu_opt_get_number(dinfo->opts, "unit", -1);
|
||||||
dinfo->bus = scsibus->busnr;
|
dinfo->bus = scsibus->busnr;
|
||||||
scsidev = scsi_bus_legacy_add_drive(scsibus, dinfo->bdrv, dinfo->unit,
|
scsidev = scsi_bus_legacy_add_drive(scsibus, dinfo->bdrv, dinfo->unit,
|
||||||
false, -1);
|
false, -1, NULL);
|
||||||
if (!scsidev) {
|
if (!scsidev) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,7 +207,8 @@ static int scsi_qdev_exit(DeviceState *qdev)
|
||||||
|
|
||||||
/* handle legacy '-drive if=scsi,...' cmd line args */
|
/* handle legacy '-drive if=scsi,...' cmd line args */
|
||||||
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv,
|
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv,
|
||||||
int unit, bool removable, int bootindex)
|
int unit, bool removable, int bootindex,
|
||||||
|
const char *serial)
|
||||||
{
|
{
|
||||||
const char *driver;
|
const char *driver;
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
@ -221,6 +222,9 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv,
|
||||||
if (object_property_find(OBJECT(dev), "removable", NULL)) {
|
if (object_property_find(OBJECT(dev), "removable", NULL)) {
|
||||||
qdev_prop_set_bit(dev, "removable", removable);
|
qdev_prop_set_bit(dev, "removable", removable);
|
||||||
}
|
}
|
||||||
|
if (serial) {
|
||||||
|
qdev_prop_set_string(dev, "serial", serial);
|
||||||
|
}
|
||||||
if (qdev_prop_set_drive(dev, "drive", bdrv) < 0) {
|
if (qdev_prop_set_drive(dev, "drive", bdrv) < 0) {
|
||||||
qdev_free(dev);
|
qdev_free(dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -243,7 +247,7 @@ int scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
qemu_opts_loc_restore(dinfo->opts);
|
qemu_opts_loc_restore(dinfo->opts);
|
||||||
if (!scsi_bus_legacy_add_drive(bus, dinfo->bdrv, unit, false, -1)) {
|
if (!scsi_bus_legacy_add_drive(bus, dinfo->bdrv, unit, false, -1, NULL)) {
|
||||||
res = -1;
|
res = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,7 +160,8 @@ static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d)
|
||||||
}
|
}
|
||||||
|
|
||||||
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv,
|
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockDriverState *bdrv,
|
||||||
int unit, bool removable, int bootindex);
|
int unit, bool removable, int bootindex,
|
||||||
|
const char *serial);
|
||||||
int scsi_bus_legacy_handle_cmdline(SCSIBus *bus);
|
int scsi_bus_legacy_handle_cmdline(SCSIBus *bus);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -625,7 +625,7 @@ static int usb_msd_initfn_storage(USBDevice *dev)
|
||||||
usb_desc_init(dev);
|
usb_desc_init(dev);
|
||||||
scsi_bus_new(&s->bus, &s->dev.qdev, &usb_msd_scsi_info_storage);
|
scsi_bus_new(&s->bus, &s->dev.qdev, &usb_msd_scsi_info_storage);
|
||||||
scsi_dev = scsi_bus_legacy_add_drive(&s->bus, bs, 0, !!s->removable,
|
scsi_dev = scsi_bus_legacy_add_drive(&s->bus, bs, 0, !!s->removable,
|
||||||
s->conf.bootindex);
|
s->conf.bootindex, s->serial);
|
||||||
if (!scsi_dev) {
|
if (!scsi_dev) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue