提交 8b46a7bb 编写于 作者: D David Allan

Improve nodedev parent/child relationships

* If a nodedev has a parent that we don't want to display, we should
  continue walking up the udev device tree to see if any of its
  earlier ancestors are devices that we display.  It makes the tree
  much nicer looking than having a whole lot of devices hanging off
  the root node.
上级 1a5c465e
......@@ -1223,31 +1223,43 @@ static int udevSetParent(struct udev_device *device,
virNodeDeviceObjPtr dev = NULL;
int ret = -1;
parent_device = udev_device_get_parent(device);
if (parent_device == NULL) {
VIR_INFO("Could not find udev parent for device with sysfs path '%s'",
udev_device_get_syspath(device));
}
parent_device = device;
do {
parent_sysfs_path = udev_device_get_syspath(parent_device);
if (parent_sysfs_path == NULL) {
VIR_INFO("Could not get syspath for parent of '%s'",
udev_device_get_syspath(device));
parent_sysfs_path = "";
}
parent_device = udev_device_get_parent(parent_device);
if (parent_device == NULL) {
break;
}
def->parent_sysfs_path = strdup(parent_sysfs_path);
if (def->parent_sysfs_path == NULL) {
virReportOOMError();
goto out;
}
parent_sysfs_path = udev_device_get_syspath(parent_device);
if (parent_sysfs_path == NULL) {
VIR_INFO("Could not get syspath for parent of '%s'",
udev_device_get_syspath(parent_device));
}
dev = virNodeDeviceFindBySysfsPath(&driverState->devs, parent_sysfs_path);
if (dev == NULL) {
dev = virNodeDeviceFindBySysfsPath(&driverState->devs,
parent_sysfs_path);
if (dev != NULL) {
def->parent = strdup(dev->def->name);
virNodeDeviceObjUnlock(dev);
if (def->parent == NULL) {
virReportOOMError();
goto out;
}
def->parent_sysfs_path = strdup(parent_sysfs_path);
if (def->parent_sysfs_path == NULL) {
virReportOOMError();
goto out;
}
}
} while (def->parent == NULL && parent_device != NULL);
if (def->parent == NULL) {
def->parent = strdup("computer");
} else {
def->parent = strdup(dev->def->name);
virNodeDeviceObjUnlock(dev);
}
if (def->parent == NULL) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册