diff options
Diffstat (limited to 'qga/commands-posix.c')
-rw-r--r-- | qga/commands-posix.c | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 1a42ec8171..e8467ac567 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -874,10 +874,6 @@ static bool build_guest_fsinfo_for_pci_dev(char const *syspath, GuestPCIAddress *pciaddr = disk->pci_controller; bool has_ata = false, has_host = false, has_tgt = false; char *p, *q, *driver = NULL; -#ifdef CONFIG_LIBUDEV - struct udev *udev = NULL; - struct udev_device *udevice = NULL; -#endif bool ret = false; p = strstr(syspath, "/devices/pci"); @@ -936,26 +932,6 @@ static bool build_guest_fsinfo_for_pci_dev(char const *syspath, pciaddr->slot = pci[2]; pciaddr->function = pci[3]; -#ifdef CONFIG_LIBUDEV - udev = udev_new(); - udevice = udev_device_new_from_syspath(udev, syspath); - if (udev == NULL || udevice == NULL) { - g_debug("failed to query udev"); - } else { - const char *devnode, *serial; - devnode = udev_device_get_devnode(udevice); - if (devnode != NULL) { - disk->dev = g_strdup(devnode); - disk->has_dev = true; - } - serial = udev_device_get_property_value(udevice, "ID_SERIAL"); - if (serial != NULL && *serial != 0) { - disk->serial = g_strdup(serial); - disk->has_serial = true; - } - } -#endif - if (strcmp(driver, "ata_piix") == 0) { /* a host per ide bus, target*:0:<unit>:0 */ if (!has_host || !has_tgt) { @@ -1017,10 +993,6 @@ static bool build_guest_fsinfo_for_pci_dev(char const *syspath, cleanup: g_free(driver); -#ifdef CONFIG_LIBUDEV - udev_unref(udev); - udev_device_unref(udevice); -#endif return ret; } @@ -1033,18 +1005,50 @@ static void build_guest_fsinfo_for_real_device(char const *syspath, GuestPCIAddress *pciaddr; GuestDiskAddressList *list = NULL; bool has_hwinf; +#ifdef CONFIG_LIBUDEV + struct udev *udev = NULL; + struct udev_device *udevice = NULL; +#endif pciaddr = g_new0(GuestPCIAddress, 1); + pciaddr->domain = -1; /* -1 means field is invalid */ + pciaddr->bus = -1; + pciaddr->slot = -1; + pciaddr->function = -1; disk = g_new0(GuestDiskAddress, 1); disk->pci_controller = pciaddr; + disk->bus_type = GUEST_DISK_BUS_TYPE_UNKNOWN; list = g_new0(GuestDiskAddressList, 1); list->value = disk; +#ifdef CONFIG_LIBUDEV + udev = udev_new(); + udevice = udev_device_new_from_syspath(udev, syspath); + if (udev == NULL || udevice == NULL) { + g_debug("failed to query udev"); + } else { + const char *devnode, *serial; + devnode = udev_device_get_devnode(udevice); + if (devnode != NULL) { + disk->dev = g_strdup(devnode); + disk->has_dev = true; + } + serial = udev_device_get_property_value(udevice, "ID_SERIAL"); + if (serial != NULL && *serial != 0) { + disk->serial = g_strdup(serial); + disk->has_serial = true; + } + } + + udev_unref(udev); + udev_device_unref(udevice); +#endif + has_hwinf = build_guest_fsinfo_for_pci_dev(syspath, disk, errp); - if (has_hwinf) { + if (has_hwinf || disk->has_dev || disk->has_serial) { list->next = fs->disk; fs->disk = list; } else { |