Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
e8a4ea75
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e8a4ea75
编写于
12月 04, 2008
作者:
D
Daniel P. Berrange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge all return paths from node device driver APIs
上级
04a31e99
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
64 addition
and
27 deletion
+64
-27
ChangeLog
ChangeLog
+8
-0
src/datatypes.c
src/datatypes.c
+1
-0
src/datatypes.h
src/datatypes.h
+1
-0
src/libvirt.c
src/libvirt.c
+9
-5
src/node_device.c
src/node_device.c
+45
-22
未找到文件。
ChangeLog
浏览文件 @
e8a4ea75
Thu Dec 4 21:46:41 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
* src/libvirt.c, src/datatypes.h, src/datatypes.c: Cache
device parent string to workaround need to keep public
virNodeDeviceGetParent API returning a const string
* src/node_device.c: Merge all return paths from node
device driver APIs
Thu Dec 4 21:43:41 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
Thu Dec 4 21:43:41 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
* src/openvz_conf.h: Add driver lock
* src/openvz_conf.h: Add driver lock
...
...
src/datatypes.c
浏览文件 @
e8a4ea75
...
@@ -861,6 +861,7 @@ virReleaseNodeDevice(virNodeDevicePtr dev) {
...
@@ -861,6 +861,7 @@ virReleaseNodeDevice(virNodeDevicePtr dev) {
dev
->
magic
=
-
1
;
dev
->
magic
=
-
1
;
VIR_FREE
(
dev
->
name
);
VIR_FREE
(
dev
->
name
);
VIR_FREE
(
dev
->
parent
);
VIR_FREE
(
dev
);
VIR_FREE
(
dev
);
DEBUG
(
"unref connection %p %d"
,
conn
,
conn
->
refs
);
DEBUG
(
"unref connection %p %d"
,
conn
,
conn
->
refs
);
...
...
src/datatypes.h
浏览文件 @
e8a4ea75
...
@@ -199,6 +199,7 @@ struct _virNodeDevice {
...
@@ -199,6 +199,7 @@ struct _virNodeDevice {
int
refs
;
/* reference count */
int
refs
;
/* reference count */
virConnectPtr
conn
;
/* pointer back to the connection */
virConnectPtr
conn
;
/* pointer back to the connection */
char
*
name
;
/* device name (unique on node) */
char
*
name
;
/* device name (unique on node) */
char
*
parent
;
/* parent device name */
};
};
...
...
src/libvirt.c
浏览文件 @
e8a4ea75
...
@@ -5689,11 +5689,15 @@ const char *virNodeDeviceGetParent(virNodeDevicePtr dev)
...
@@ -5689,11 +5689,15 @@ const char *virNodeDeviceGetParent(virNodeDevicePtr dev)
return
NULL
;
return
NULL
;
}
}
if
(
dev
->
conn
->
deviceMonitor
&&
dev
->
conn
->
deviceMonitor
->
deviceGetParent
)
if
(
!
dev
->
parent
)
{
return
dev
->
conn
->
deviceMonitor
->
deviceGetParent
(
dev
);
if
(
dev
->
conn
->
deviceMonitor
&&
dev
->
conn
->
deviceMonitor
->
deviceGetParent
)
{
dev
->
parent
=
dev
->
conn
->
deviceMonitor
->
deviceGetParent
(
dev
);
virLibConnError
(
dev
->
conn
,
VIR_ERR_NO_SUPPORT
,
__FUNCTION__
);
}
else
{
return
NULL
;
virLibConnError
(
dev
->
conn
,
VIR_ERR_NO_SUPPORT
,
__FUNCTION__
);
return
NULL
;
}
}
return
dev
->
parent
;
}
}
/**
/**
...
...
src/node_device.c
浏览文件 @
e8a4ea75
...
@@ -91,66 +91,86 @@ static virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn,
...
@@ -91,66 +91,86 @@ static virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn,
const
char
*
name
)
const
char
*
name
)
{
{
virDeviceMonitorStatePtr
driver
=
conn
->
devMonPrivateData
;
virDeviceMonitorStatePtr
driver
=
conn
->
devMonPrivateData
;
virNodeDeviceObjPtr
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
name
);
virNodeDeviceObjPtr
obj
;
virNodeDevicePtr
ret
=
NULL
;
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
name
);
if
(
!
obj
)
{
if
(
!
obj
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
virNodeDeviceReportError
(
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
"%s"
,
_
(
"no node device with matching name"
));
"%s"
,
_
(
"no node device with matching name"
));
return
NULL
;
goto
cleanup
;
}
}
ret
urn
virGetNodeDevice
(
conn
,
name
);
ret
=
virGetNodeDevice
(
conn
,
name
);
cleanup:
return
ret
;
}
}
static
char
*
nodeDeviceDumpXML
(
virNodeDevicePtr
dev
,
static
char
*
nodeDeviceDumpXML
(
virNodeDevicePtr
dev
,
unsigned
int
flags
ATTRIBUTE_UNUSED
)
unsigned
int
flags
ATTRIBUTE_UNUSED
)
{
{
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virNodeDeviceObjPtr
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
virNodeDeviceObjPtr
obj
;
char
*
ret
=
NULL
;
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
if
(
!
obj
)
{
if
(
!
obj
)
{
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
"%s"
,
_
(
"no node device with matching name"
));
"%s"
,
_
(
"no node device with matching name"
));
return
NULL
;
goto
cleanup
;
}
}
return
virNodeDeviceDefFormat
(
dev
->
conn
,
obj
->
def
);
ret
=
virNodeDeviceDefFormat
(
dev
->
conn
,
obj
->
def
);
cleanup:
return
ret
;
}
}
static
char
*
nodeDeviceGetParent
(
virNodeDevicePtr
dev
)
static
char
*
nodeDeviceGetParent
(
virNodeDevicePtr
dev
)
{
{
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virNodeDeviceObjPtr
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
virNodeDeviceObjPtr
obj
;
char
*
ret
=
NULL
;
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
if
(
!
obj
)
{
if
(
!
obj
)
{
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
"%s"
,
_
(
"no node device with matching name"
));
"%s"
,
_
(
"no node device with matching name"
));
return
NULL
;
goto
cleanup
;
}
}
return
obj
->
def
->
parent
;
ret
=
strdup
(
obj
->
def
->
parent
);
if
(
!
ret
)
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_NO_MEMORY
,
NULL
);
cleanup:
return
ret
;
}
}
static
int
nodeDeviceNumOfCaps
(
virNodeDevicePtr
dev
)
static
int
nodeDeviceNumOfCaps
(
virNodeDevicePtr
dev
)
{
{
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virNodeDeviceObjPtr
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
)
;
virNodeDeviceObjPtr
obj
;
virNodeDevCapsDefPtr
caps
;
virNodeDevCapsDefPtr
caps
;
int
ncaps
=
0
;
int
ncaps
=
0
;
int
ret
=
-
1
;
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
if
(
!
obj
)
{
if
(
!
obj
)
{
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
"%s"
,
_
(
"no node device with matching name"
));
"%s"
,
_
(
"no node device with matching name"
));
return
-
1
;
goto
cleanup
;
}
}
for
(
caps
=
obj
->
def
->
caps
;
caps
;
caps
=
caps
->
next
)
for
(
caps
=
obj
->
def
->
caps
;
caps
;
caps
=
caps
->
next
)
++
ncaps
;
++
ncaps
;
ret
=
ncaps
;
return
ncaps
;
cleanup:
return
ret
;
}
}
...
@@ -158,29 +178,32 @@ static int
...
@@ -158,29 +178,32 @@ static int
nodeDeviceListCaps
(
virNodeDevicePtr
dev
,
char
**
const
names
,
int
maxnames
)
nodeDeviceListCaps
(
virNodeDevicePtr
dev
,
char
**
const
names
,
int
maxnames
)
{
{
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virDeviceMonitorStatePtr
driver
=
dev
->
conn
->
devMonPrivateData
;
virNodeDeviceObjPtr
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
)
;
virNodeDeviceObjPtr
obj
;
virNodeDevCapsDefPtr
caps
;
virNodeDevCapsDefPtr
caps
;
int
ncaps
=
0
;
int
ncaps
=
0
;
int
ret
=
-
1
;
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
if
(
!
obj
)
{
if
(
!
obj
)
{
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_INVALID_NODE_DEVICE
,
"%s"
,
_
(
"no node device with matching name"
));
"%s"
,
_
(
"no node device with matching name"
));
return
-
1
;
goto
cleanup
;
}
}
for
(
caps
=
obj
->
def
->
caps
;
caps
&&
ncaps
<
maxnames
;
caps
=
caps
->
next
)
{
for
(
caps
=
obj
->
def
->
caps
;
caps
&&
ncaps
<
maxnames
;
caps
=
caps
->
next
)
{
names
[
ncaps
]
=
strdup
(
virNodeDevCapTypeToString
(
caps
->
type
));
names
[
ncaps
]
=
strdup
(
virNodeDevCapTypeToString
(
caps
->
type
));
if
(
names
[
ncaps
++
]
==
NULL
)
if
(
names
[
ncaps
++
]
==
NULL
)
goto
failure
;
goto
cleanup
;
}
}
ret
=
ncaps
;
return
ncaps
;
cleanup:
if
(
ret
==
-
1
)
{
failure:
--
ncaps
;
--
ncaps
;
while
(
--
ncaps
>=
0
)
while
(
--
ncaps
>=
0
)
VIR_FREE
(
names
[
ncaps
]);
VIR_FREE
(
names
[
ncaps
]);
}
return
-
1
;
return
ret
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录