1cbaf605ab
- kvm-io-ensure-UNIX-client-doesn-t-unlink-server-socket.patch [bz#1665896] - kvm-scsi-disk-Don-t-use-empty-string-as-device-id.patch [bz#1668248] - kvm-scsi-disk-Add-device_id-property.patch [bz#1668248] - Resolves: bz#1665896 (VNC unix listener socket is deleted after first client quits) - Resolves: bz#1668248 ("An unknown error has occurred" when using cdrom to install the system with two blockdev disks.(when choose installation destination))
99 lines
3.7 KiB
Diff
99 lines
3.7 KiB
Diff
From c9f6e5639cc9d7b1d336b55ccacb6673933a3864 Mon Sep 17 00:00:00 2001
|
|
From: Kevin Wolf <kwolf@redhat.com>
|
|
Date: Wed, 6 Feb 2019 15:58:29 +0000
|
|
Subject: [PATCH 3/3] scsi-disk: Add device_id property
|
|
|
|
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
Message-id: <20190206155829.14641-3-kwolf@redhat.com>
|
|
Patchwork-id: 84254
|
|
O-Subject: [RHEL-7.7/8.0-AV qemu-kvm-rhev PATCH 2/2] scsi-disk: Add device_id property
|
|
Bugzilla: 1668248
|
|
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
|
The new device_id property specifies which value to use for the vendor
|
|
specific designator in the Device Identification VPD page.
|
|
|
|
In particular, this is necessary for libvirt to maintain guest ABI
|
|
compatibility when no serial number is given and a VM is switched from
|
|
-drive (where the BlockBackend name is used) to -blockdev (where the
|
|
vendor specific designator is left out by default).
|
|
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
Reviewed-by: Eric Blake <eblake@redhat.com>
|
|
(cherry picked from commit 7471a649fc3a391dd497297013fb2525ca9821ba)
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
hw/scsi/scsi-disk.c | 24 ++++++++++++++++--------
|
|
1 file changed, 16 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
|
|
index 93eef40..e74e1e7 100644
|
|
--- a/hw/scsi/scsi-disk.c
|
|
+++ b/hw/scsi/scsi-disk.c
|
|
@@ -104,6 +104,7 @@ typedef struct SCSIDiskState
|
|
char *serial;
|
|
char *vendor;
|
|
char *product;
|
|
+ char *device_id;
|
|
bool tray_open;
|
|
bool tray_locked;
|
|
/*
|
|
@@ -642,13 +643,8 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf)
|
|
|
|
case 0x83: /* Device identification page, mandatory */
|
|
{
|
|
- const char *str = s->serial ?: blk_name(s->qdev.conf.blk);
|
|
- int max_len = s->serial ? 20 : 255 - 8;
|
|
- int id_len = strlen(str);
|
|
+ int id_len = s->device_id ? MIN(strlen(s->device_id), 255 - 8) : 0;
|
|
|
|
- if (id_len > max_len) {
|
|
- id_len = max_len;
|
|
- }
|
|
DPRINTF("Inquiry EVPD[Device identification] "
|
|
"buffer size %zd\n", req->cmd.xfer);
|
|
|
|
@@ -657,7 +653,7 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf)
|
|
outbuf[buflen++] = 0; /* not officially assigned */
|
|
outbuf[buflen++] = 0; /* reserved */
|
|
outbuf[buflen++] = id_len; /* length of data following */
|
|
- memcpy(outbuf + buflen, str, id_len);
|
|
+ memcpy(outbuf + buflen, s->device_id, id_len);
|
|
buflen += id_len;
|
|
}
|
|
|
|
@@ -2363,6 +2359,16 @@ static void scsi_realize(SCSIDevice *dev, Error **errp)
|
|
if (!s->vendor) {
|
|
s->vendor = g_strdup("QEMU");
|
|
}
|
|
+ if (!s->device_id) {
|
|
+ if (s->serial) {
|
|
+ s->device_id = g_strdup_printf("%.20s", s->serial);
|
|
+ } else {
|
|
+ const char *str = blk_name(s->qdev.conf.blk);
|
|
+ if (str && *str) {
|
|
+ s->device_id = g_strdup(str);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
|
|
if (blk_is_sg(s->qdev.conf.blk)) {
|
|
error_setg(errp, "unwanted /dev/sg*");
|
|
@@ -2904,7 +2910,9 @@ static const TypeInfo scsi_disk_base_info = {
|
|
DEFINE_PROP_STRING("ver", SCSIDiskState, version), \
|
|
DEFINE_PROP_STRING("serial", SCSIDiskState, serial), \
|
|
DEFINE_PROP_STRING("vendor", SCSIDiskState, vendor), \
|
|
- DEFINE_PROP_STRING("product", SCSIDiskState, product)
|
|
+ DEFINE_PROP_STRING("product", SCSIDiskState, product), \
|
|
+ DEFINE_PROP_STRING("device_id", SCSIDiskState, device_id)
|
|
+
|
|
|
|
static Property scsi_hd_properties[] = {
|
|
DEFINE_SCSI_DISK_PROPERTIES(),
|
|
--
|
|
1.8.3.1
|
|
|