I realized that I inadvertently added a member to the def struct to
contain each device's sysfs path when there was an existing member in the
dev struct for "OS specific path to device metadat, eg sysfs" Since the
udev backend needs to record the sysfs path while it's in the process of
creating the device, before the dev struct gets allocated, I chose to
remove the member from the dev struct.
* src/conf/node_device_conf.c src/conf/node_device_conf.h
src/node_device/node_device_driver.c src/node_device/node_device_hal.c
src/node_device/node_device_udev.c: remove devicePath from the
structure and use def->sysfs_path instead
if (!dev)
return;
- VIR_FREE(dev->devicePath);
virNodeDeviceDefFree(dev->def);
if (dev->privateFree)
(*dev->privateFree)(dev->privateData);
struct _virNodeDeviceObj {
virMutex lock;
- char *devicePath; /* OS specific path to device metadat, eg sysfs */
virNodeDeviceDefPtr def; /* device definition */
void *privateData; /* driver-specific private data */
void (*privateFree)(void *data); /* destructor for private data */
VIR_FREE(dev->def->driver);
- if (virAsprintf(&driver_link, "%s/driver", dev->devicePath) < 0) {
+ if (virAsprintf(&driver_link, "%s/driver", dev->def->sysfs_path) < 0) {
virReportOOMError(conn);
goto cleanup;
}
dev->privateData = privData;
dev->privateFree = free_udi;
- dev->devicePath = devicePath;
+ dev->def->sysfs_path = devicePath;
virNodeDeviceObjUnlock(dev);
goto out;
}
- dev->devicePath = strdup(udev_device_get_devpath(device));
- if (dev->devicePath == NULL) {
- virReportOOMError(NULL);
- virNodeDeviceObjRemove(&driverState->devs, dev);
- goto out;
- }
-
virNodeDeviceObjUnlock(dev);
ret = 0;