提交 4337bc57 编写于 作者: J John Ferlan

nodedev: Return the parent for a virNodeDevicePtr struct

When the 'parent' was added to the virNodeDevicePtr structure
by commit id 'e8a4ea75' the 'parent' field was not properly filled
in when a virGetNodeDevice call was made within driver/config code.
Only the device name was ever filled in. Fetching the parent required
a second trip via virNodeDeviceGetParent into the node device lookup
code was required in order to retrieve the specific parent field (and
still the parent field was never filled in although it was free'd).

Since we have the data when we initially call virGetNodeDevice from
within driver/node_config code - let's just fill in the parent field
as well for anyone that wants it without requiring another trip into
the node_device lookup just to get the parent.

This will allow API's such as virConnectListAllNodeDevices,
virNodeDeviceLookupByName, and virNodeDeviceLookupSCSIHostByWWN
to retrieve both name and parent in the returned virNodeDevicePtr.
Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
上级 1e6bc3c5
......@@ -2158,8 +2158,8 @@ virNodeDeviceObjListExport(virConnectPtr conn,
if ((!filter || filter(conn, devobj->def)) &&
virNodeDeviceMatch(devobj, flags)) {
if (devices) {
if (!(device = virGetNodeDevice(conn,
devobj->def->name))) {
if (!(device = virGetNodeDevice(conn, devobj->def->name)) ||
VIR_STRDUP(device->parent, devobj->def->parent) < 0) {
virNodeDeviceObjUnlock(devobj);
goto cleanup;
}
......
......@@ -261,7 +261,10 @@ nodeDeviceLookupByName(virConnectPtr conn, const char *name)
if (virNodeDeviceLookupByNameEnsureACL(conn, obj->def) < 0)
goto cleanup;
ret = virGetNodeDevice(conn, name);
if ((ret = virGetNodeDevice(conn, name))) {
if (VIR_STRDUP(ret->parent, obj->def->parent) < 0)
virObjectUnref(ret);
}
cleanup:
if (obj)
......@@ -302,7 +305,10 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn,
if (virNodeDeviceLookupSCSIHostByWWNEnsureACL(conn, obj->def) < 0)
goto out;
dev = virGetNodeDevice(conn, obj->def->name);
if ((dev = virGetNodeDevice(conn, obj->def->name))) {
if (VIR_STRDUP(dev->parent, obj->def->parent) < 0)
virObjectUnref(dev);
}
virNodeDeviceObjUnlock(obj);
goto out;
}
......
......@@ -5450,7 +5450,10 @@ testNodeDeviceLookupByName(virConnectPtr conn, const char *name)
goto cleanup;
}
ret = virGetNodeDevice(conn, name);
if ((ret = virGetNodeDevice(conn, name))) {
if (VIR_STRDUP(ret->parent, obj->def->parent) < 0)
virObjectUnref(ret);
}
cleanup:
if (obj)
......@@ -5648,6 +5651,7 @@ testNodeDeviceCreateXML(virConnectPtr conn,
0);
dev = virGetNodeDevice(conn, def->name);
ignore_value(VIR_STRDUP(dev->parent, def->parent));
def = NULL;
cleanup:
testDriverUnlock(driver);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册