Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
80f35e6e
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看板
提交
80f35e6e
编写于
10月 24, 2014
作者:
T
Taowei Luo
提交者:
Michal Privoznik
10月 29, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vbox: Rewrite vboxStorageVolGetInfo
上级
1c2c3906
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
89 addition
and
70 deletion
+89
-70
src/vbox/vbox_storage.c
src/vbox/vbox_storage.c
+56
-0
src/vbox/vbox_tmpl.c
src/vbox/vbox_tmpl.c
+30
-70
src/vbox/vbox_uniformed_api.h
src/vbox/vbox_uniformed_api.h
+3
-0
未找到文件。
src/vbox/vbox_storage.c
浏览文件 @
80f35e6e
...
...
@@ -690,3 +690,59 @@ int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
vboxIIDUnalloc
(
&
hddIID
);
return
ret
;
}
int
vboxStorageVolGetInfo
(
virStorageVolPtr
vol
,
virStorageVolInfoPtr
info
)
{
vboxGlobalData
*
data
=
vol
->
conn
->
privateData
;
IHardDisk
*
hardDisk
=
NULL
;
unsigned
char
uuid
[
VIR_UUID_BUFLEN
];
PRUint32
hddstate
;
PRUint64
hddLogicalSize
=
0
;
PRUint64
hddActualSize
=
0
;
vboxIIDUnion
hddIID
;
nsresult
rc
;
int
ret
=
-
1
;
if
(
!
data
->
vboxObj
)
{
return
ret
;
}
if
(
!
info
)
return
ret
;
if
(
virUUIDParse
(
vol
->
key
,
uuid
)
<
0
)
{
virReportError
(
VIR_ERR_INVALID_ARG
,
_
(
"Could not parse UUID from '%s'"
),
vol
->
key
);
return
ret
;
}
VBOX_IID_INITIALIZE
(
&
hddIID
);
vboxIIDFromUUID
(
&
hddIID
,
uuid
);
rc
=
gVBoxAPI
.
UIVirtualBox
.
GetHardDiskByIID
(
data
->
vboxObj
,
&
hddIID
,
&
hardDisk
);
if
(
NS_FAILED
(
rc
))
goto
cleanup
;
gVBoxAPI
.
UIMedium
.
GetState
(
hardDisk
,
&
hddstate
);
if
(
hddstate
==
MediaState_Inaccessible
)
goto
cleanup
;
info
->
type
=
VIR_STORAGE_VOL_FILE
;
gVBoxAPI
.
UIHardDisk
.
GetLogicalSizeInByte
(
hardDisk
,
&
hddLogicalSize
);
info
->
capacity
=
hddLogicalSize
;
gVBoxAPI
.
UIMedium
.
GetSize
(
hardDisk
,
&
hddActualSize
);
info
->
allocation
=
hddActualSize
;
ret
=
0
;
VIR_DEBUG
(
"Storage Volume Name: %s"
,
vol
->
name
);
VIR_DEBUG
(
"Storage Volume Type: %s"
,
info
->
type
==
VIR_STORAGE_VOL_BLOCK
?
"Block"
:
"File"
);
VIR_DEBUG
(
"Storage Volume Capacity: %llu"
,
info
->
capacity
);
VIR_DEBUG
(
"Storage Volume Allocation: %llu"
,
info
->
allocation
);
cleanup:
VBOX_MEDIUM_RELEASE
(
hardDisk
);
vboxIIDUnalloc
(
&
hddIID
);
return
ret
;
}
src/vbox/vbox_tmpl.c
浏览文件 @
80f35e6e
...
...
@@ -2033,76 +2033,6 @@ _registerDomainEvent(virHypervisorDriverPtr driver)
* The Storage Functions here on
*/
static
int
vboxStorageVolGetInfo
(
virStorageVolPtr
vol
,
virStorageVolInfoPtr
info
)
{
VBOX_OBJECT_CHECK
(
vol
->
conn
,
int
,
-
1
);
IHardDisk
*
hardDisk
=
NULL
;
unsigned
char
uuid
[
VIR_UUID_BUFLEN
];
vboxIID
hddIID
=
VBOX_IID_INITIALIZER
;
nsresult
rc
;
if
(
!
info
)
return
ret
;
if
(
virUUIDParse
(
vol
->
key
,
uuid
)
<
0
)
{
virReportError
(
VIR_ERR_INVALID_ARG
,
_
(
"Could not parse UUID from '%s'"
),
vol
->
key
);
return
ret
;
}
vboxIIDFromUUID
(
&
hddIID
,
uuid
);
#if VBOX_API_VERSION < 4000000
rc
=
data
->
vboxObj
->
vtbl
->
GetHardDisk
(
data
->
vboxObj
,
hddIID
.
value
,
&
hardDisk
);
#elif VBOX_API_VERSION >= 4000000 && VBOX_API_VERSION < 4002000
rc
=
data
->
vboxObj
->
vtbl
->
FindMedium
(
data
->
vboxObj
,
hddIID
.
value
,
DeviceType_HardDisk
,
&
hardDisk
);
#else
rc
=
data
->
vboxObj
->
vtbl
->
OpenMedium
(
data
->
vboxObj
,
hddIID
.
value
,
DeviceType_HardDisk
,
AccessMode_ReadWrite
,
PR_FALSE
,
&
hardDisk
);
#endif
/* VBOX_API_VERSION >= 4000000 */
if
(
NS_SUCCEEDED
(
rc
))
{
PRUint32
hddstate
;
VBOX_MEDIUM_FUNC_ARG1
(
hardDisk
,
GetState
,
&
hddstate
);
if
(
hddstate
!=
MediaState_Inaccessible
)
{
#if VBOX_API_VERSION < 4000000
PRUint64
hddLogicalSize
;
PRUint64
hddActualSize
;
#else
/* VBOX_API_VERSION >= 4000000 */
PRInt64
hddLogicalSize
;
PRInt64
hddActualSize
;
#endif
/* VBOX_API_VERSION >= 4000000 */
info
->
type
=
VIR_STORAGE_VOL_FILE
;
hardDisk
->
vtbl
->
GetLogicalSize
(
hardDisk
,
&
hddLogicalSize
);
#if VBOX_API_VERSION < 4000000
info
->
capacity
=
hddLogicalSize
*
1024
*
1024
;
/* MB => Bytes */
#else
/* VBOX_API_VERSION >= 4000000 */
info
->
capacity
=
hddLogicalSize
;
#endif
/* VBOX_API_VERSION >= 4000000 */
VBOX_MEDIUM_FUNC_ARG1
(
hardDisk
,
GetSize
,
&
hddActualSize
);
info
->
allocation
=
hddActualSize
;
ret
=
0
;
VIR_DEBUG
(
"Storage Volume Name: %s"
,
vol
->
name
);
VIR_DEBUG
(
"Storage Volume Type: %s"
,
info
->
type
==
VIR_STORAGE_VOL_BLOCK
?
"Block"
:
"File"
);
VIR_DEBUG
(
"Storage Volume Capacity: %llu"
,
info
->
capacity
);
VIR_DEBUG
(
"Storage Volume Allocation: %llu"
,
info
->
allocation
);
}
VBOX_MEDIUM_RELEASE
(
hardDisk
);
}
vboxIIDUnalloc
(
&
hddIID
);
return
ret
;
}
static
char
*
vboxStorageVolGetXMLDesc
(
virStorageVolPtr
vol
,
unsigned
int
flags
)
{
VBOX_OBJECT_CHECK
(
vol
->
conn
,
char
*
,
NULL
);
...
...
@@ -4407,6 +4337,19 @@ static nsresult _mediumGetName(IMedium *medium, PRUnichar **name)
return
medium
->
vtbl
->
GetName
(
medium
,
name
);
}
static
nsresult
_mediumGetSize
(
IMedium
*
medium
,
PRUint64
*
uSize
)
{
#if VBOX_API_VERSION < 4000000
return
medium
->
vtbl
->
GetSize
(
medium
,
uSize
);
#else
/* VBOX_API_VERSION >= 4000000 */
nsresult
rc
;
PRInt64
Size
;
rc
=
medium
->
vtbl
->
GetSize
(
medium
,
&
Size
);
*
uSize
=
Size
;
return
rc
;
#endif
/* VBOX_API_VERSION >= 4000000 */
}
static
nsresult
_mediumGetReadOnly
(
IMedium
*
medium
ATTRIBUTE_UNUSED
,
PRBool
*
readOnly
ATTRIBUTE_UNUSED
)
{
...
...
@@ -4881,6 +4824,21 @@ _hardDiskDeleteStorage(IHardDisk *hardDisk, IProgress **progress)
return
hardDisk
->
vtbl
->
DeleteStorage
(
hardDisk
,
progress
);
}
static
nsresult
_hardDiskGetLogicalSizeInByte
(
IHardDisk
*
hardDisk
,
PRUint64
*
uLogicalSize
)
{
nsresult
rc
;
#if VBOX_API_VERSION < 4000000
rc
=
hardDisk
->
vtbl
->
GetLogicalSize
(
hardDisk
,
uLogicalSize
);
*
uLogicalSize
*=
1024
*
1024
;
/* MB => Bytes */
#else
/* VBOX_API_VERSION >= 4000000 */
PRInt64
logicalSize
;
rc
=
hardDisk
->
vtbl
->
GetLogicalSize
(
hardDisk
,
&
logicalSize
);
*
uLogicalSize
=
logicalSize
;
#endif
/* VBOX_API_VERSION >= 4000000 */
return
rc
;
}
static
bool
_machineStateOnline
(
PRUint32
state
)
{
return
((
state
>=
MachineState_FirstOnline
)
&&
...
...
@@ -5150,6 +5108,7 @@ static vboxUniformedIMedium _UIMedium = {
.
GetLocation
=
_mediumGetLocation
,
.
GetState
=
_mediumGetState
,
.
GetName
=
_mediumGetName
,
.
GetSize
=
_mediumGetSize
,
.
GetReadOnly
=
_mediumGetReadOnly
,
.
GetParent
=
_mediumGetParent
,
.
GetChildren
=
_mediumGetChildren
,
...
...
@@ -5228,6 +5187,7 @@ static vboxUniformedIDHCPServer _UIDHCPServer = {
static
vboxUniformedIHardDisk
_UIHardDisk
=
{
.
CreateBaseStorage
=
_hardDiskCreateBaseStorage
,
.
DeleteStorage
=
_hardDiskDeleteStorage
,
.
GetLogicalSizeInByte
=
_hardDiskGetLogicalSizeInByte
,
};
static
uniformedMachineStateChecker
_machineStateChecker
=
{
...
...
src/vbox/vbox_uniformed_api.h
浏览文件 @
80f35e6e
...
...
@@ -416,6 +416,7 @@ typedef struct {
nsresult
(
*
GetLocation
)(
IMedium
*
medium
,
PRUnichar
**
location
);
nsresult
(
*
GetState
)(
IMedium
*
medium
,
PRUint32
*
state
);
nsresult
(
*
GetName
)(
IMedium
*
medium
,
PRUnichar
**
name
);
nsresult
(
*
GetSize
)(
IMedium
*
medium
,
PRUint64
*
uSize
);
nsresult
(
*
GetReadOnly
)(
IMedium
*
medium
,
PRBool
*
readOnly
);
nsresult
(
*
GetParent
)(
IMedium
*
medium
,
IMedium
**
parent
);
nsresult
(
*
GetChildren
)(
IMedium
*
medium
,
PRUint32
*
childrenSize
,
IMedium
***
children
);
...
...
@@ -528,6 +529,7 @@ typedef struct {
nsresult
(
*
CreateBaseStorage
)(
IHardDisk
*
hardDisk
,
PRUint64
logicalSize
,
PRUint32
variant
,
IProgress
**
progress
);
nsresult
(
*
DeleteStorage
)(
IHardDisk
*
hardDisk
,
IProgress
**
progress
);
nsresult
(
*
GetLogicalSizeInByte
)(
IHardDisk
*
hardDisk
,
PRUint64
*
uLogicalSize
);
}
vboxUniformedIHardDisk
;
typedef
struct
{
...
...
@@ -619,6 +621,7 @@ virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const char *path
virStorageVolPtr
vboxStorageVolCreateXML
(
virStoragePoolPtr
pool
,
const
char
*
xml
,
unsigned
int
flags
);
int
vboxStorageVolDelete
(
virStorageVolPtr
vol
,
unsigned
int
flags
);
int
vboxStorageVolGetInfo
(
virStorageVolPtr
vol
,
virStorageVolInfoPtr
info
);
/* Version specified functions for installing uniformed API */
void
vbox22InstallUniformedAPI
(
vboxUniformedAPI
*
pVBoxAPI
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录