Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
6d910c9f
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看板
提交
6d910c9f
编写于
4月 03, 2009
作者:
C
Cole Robinson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't lose file format info on volume refresh.
上级
766b2250
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
95 addition
and
70 deletion
+95
-70
ChangeLog
ChangeLog
+5
-0
src/storage_backend.c
src/storage_backend.c
+0
-66
src/storage_backend_scsi.c
src/storage_backend_scsi.c
+90
-4
未找到文件。
ChangeLog
浏览文件 @
6d910c9f
Fri Apr 3 10:16:55 EDT 2009 Cole Robinson <crobinso@redhat.com>
* src/storage_backend.c src/storage_backend_scsi.c:
Don't lose file format info on volume refresh.
Fri Apr 3 10:15:01 EDT 2009 Cole Robinson <crobinso@redhat.com>
* src/storage_driver.c: Refresh volume alloc/capacity when dumping XML.
...
...
src/storage_backend.c
浏览文件 @
6d910c9f
...
...
@@ -156,37 +156,6 @@ virStorageBackendUpdateVolInfo(virConnectPtr conn,
return
0
;
}
struct
diskType
{
int
part_table_type
;
unsigned
short
offset
;
unsigned
short
length
;
unsigned
long
long
magic
;
};
static
struct
diskType
const
disk_types
[]
=
{
{
VIR_STORAGE_POOL_DISK_LVM2
,
0x218
,
8
,
0x31303020324D564CULL
},
{
VIR_STORAGE_POOL_DISK_GPT
,
0x200
,
8
,
0x5452415020494645ULL
},
{
VIR_STORAGE_POOL_DISK_DVH
,
0x0
,
4
,
0x41A9E50BULL
},
{
VIR_STORAGE_POOL_DISK_MAC
,
0x0
,
2
,
0x5245ULL
},
{
VIR_STORAGE_POOL_DISK_BSD
,
0x40
,
4
,
0x82564557ULL
},
{
VIR_STORAGE_POOL_DISK_SUN
,
0x1fc
,
2
,
0xBEDAULL
},
/*
* NOTE: pc98 is funky; the actual signature is 0x55AA (just like dos), so
* we can't use that. At the moment I'm relying on the "dummy" IPL
* bootloader data that comes from parted. Luckily, the chances of running
* into a pc98 machine running libvirt are approximately nil.
*/
/*{ 0x1fe, 2, 0xAA55UL },*/
{
VIR_STORAGE_POOL_DISK_PC98
,
0x0
,
8
,
0x314C5049000000CBULL
},
/*
* NOTE: the order is important here; some other disk types (like GPT and
* and PC98) also have 0x55AA at this offset. For that reason, the DOS
* one must be the last one.
*/
{
VIR_STORAGE_POOL_DISK_DOS
,
0x1fe
,
2
,
0xAA55ULL
},
{
-
1
,
0x0
,
0
,
0x0ULL
},
};
int
virStorageBackendUpdateVolTargetInfoFD
(
virConnectPtr
conn
,
virStorageVolTargetPtr
target
,
...
...
@@ -244,41 +213,6 @@ virStorageBackendUpdateVolTargetInfoFD(virConnectPtr conn,
}
}
/* make sure to set the target format "unknown" to begin with */
target
->
format
=
VIR_STORAGE_POOL_DISK_UNKNOWN
;
if
(
S_ISBLK
(
sb
.
st_mode
))
{
off_t
start
;
int
i
;
unsigned
char
buffer
[
1024
];
ssize_t
bytes
;
start
=
lseek
(
fd
,
0
,
SEEK_SET
);
if
(
start
<
0
)
{
virReportSystemError
(
conn
,
errno
,
_
(
"cannot seek to beginning of file '%s'"
),
target
->
path
);
return
-
1
;
}
bytes
=
saferead
(
fd
,
buffer
,
sizeof
(
buffer
));
if
(
bytes
<
0
)
{
virReportSystemError
(
conn
,
errno
,
_
(
"cannot read beginning of file '%s'"
),
target
->
path
);
return
-
1
;
}
for
(
i
=
0
;
disk_types
[
i
].
part_table_type
!=
-
1
;
i
++
)
{
if
(
disk_types
[
i
].
offset
+
disk_types
[
i
].
length
>
bytes
)
continue
;
if
(
memcmp
(
buffer
+
disk_types
[
i
].
offset
,
&
disk_types
[
i
].
magic
,
disk_types
[
i
].
length
)
==
0
)
{
target
->
format
=
disk_types
[
i
].
part_table_type
;
break
;
}
}
}
target
->
perms
.
mode
=
sb
.
st_mode
&
S_IRWXUGO
;
target
->
perms
.
uid
=
sb
.
st_uid
;
target
->
perms
.
gid
=
sb
.
st_gid
;
...
...
src/storage_backend_scsi.c
浏览文件 @
6d910c9f
...
...
@@ -100,6 +100,92 @@ out:
return
retval
;
}
struct
diskType
{
int
part_table_type
;
unsigned
short
offset
;
unsigned
short
length
;
unsigned
long
long
magic
;
};
static
struct
diskType
const
disk_types
[]
=
{
{
VIR_STORAGE_POOL_DISK_LVM2
,
0x218
,
8
,
0x31303020324D564CULL
},
{
VIR_STORAGE_POOL_DISK_GPT
,
0x200
,
8
,
0x5452415020494645ULL
},
{
VIR_STORAGE_POOL_DISK_DVH
,
0x0
,
4
,
0x41A9E50BULL
},
{
VIR_STORAGE_POOL_DISK_MAC
,
0x0
,
2
,
0x5245ULL
},
{
VIR_STORAGE_POOL_DISK_BSD
,
0x40
,
4
,
0x82564557ULL
},
{
VIR_STORAGE_POOL_DISK_SUN
,
0x1fc
,
2
,
0xBEDAULL
},
/*
* NOTE: pc98 is funky; the actual signature is 0x55AA (just like dos), so
* we can't use that. At the moment I'm relying on the "dummy" IPL
* bootloader data that comes from parted. Luckily, the chances of running
* into a pc98 machine running libvirt are approximately nil.
*/
/*{ 0x1fe, 2, 0xAA55UL },*/
{
VIR_STORAGE_POOL_DISK_PC98
,
0x0
,
8
,
0x314C5049000000CBULL
},
/*
* NOTE: the order is important here; some other disk types (like GPT and
* and PC98) also have 0x55AA at this offset. For that reason, the DOS
* one must be the last one.
*/
{
VIR_STORAGE_POOL_DISK_DOS
,
0x1fe
,
2
,
0xAA55ULL
},
{
-
1
,
0x0
,
0
,
0x0ULL
},
};
static
int
virStorageBackendSCSIUpdateVolTargetInfo
(
virConnectPtr
conn
,
virStorageVolTargetPtr
target
,
unsigned
long
long
*
allocation
,
unsigned
long
long
*
capacity
)
{
int
fd
,
i
;
off_t
start
;
unsigned
char
buffer
[
1024
];
ssize_t
bytes
;
if
((
fd
=
open
(
target
->
path
,
O_RDONLY
))
<
0
)
{
virReportSystemError
(
conn
,
errno
,
_
(
"cannot open volume '%s'"
),
target
->
path
);
return
-
1
;
}
if
(
virStorageBackendUpdateVolTargetInfoFD
(
conn
,
target
,
fd
,
allocation
,
capacity
)
<
0
)
return
-
1
;
/* make sure to set the target format "unknown" to begin with */
target
->
format
=
VIR_STORAGE_POOL_DISK_UNKNOWN
;
start
=
lseek
(
fd
,
0
,
SEEK_SET
);
if
(
start
<
0
)
{
virReportSystemError
(
conn
,
errno
,
_
(
"cannot seek to beginning of file '%s'"
),
target
->
path
);
return
-
1
;
}
bytes
=
saferead
(
fd
,
buffer
,
sizeof
(
buffer
));
if
(
bytes
<
0
)
{
virReportSystemError
(
conn
,
errno
,
_
(
"cannot read beginning of file '%s'"
),
target
->
path
);
return
-
1
;
}
for
(
i
=
0
;
disk_types
[
i
].
part_table_type
!=
-
1
;
i
++
)
{
if
(
disk_types
[
i
].
offset
+
disk_types
[
i
].
length
>
bytes
)
continue
;
if
(
memcmp
(
buffer
+
disk_types
[
i
].
offset
,
&
disk_types
[
i
].
magic
,
disk_types
[
i
].
length
)
==
0
)
{
target
->
format
=
disk_types
[
i
].
part_table_type
;
break
;
}
}
return
0
;
}
static
int
virStorageBackendSCSINewLun
(
virConnectPtr
conn
,
...
...
@@ -160,10 +246,10 @@ virStorageBackendSCSINewLun(virConnectPtr conn,
goto
free_vol
;
}
if
(
virStorageBackendUpdateVolTargetInfo
(
conn
,
&
vol
->
target
,
&
vol
->
allocation
,
&
vol
->
capacity
)
<
0
)
{
if
(
virStorageBackend
SCSI
UpdateVolTargetInfo
(
conn
,
&
vol
->
target
,
&
vol
->
allocation
,
&
vol
->
capacity
)
<
0
)
{
virStorageReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"Failed to update volume for '%s'"
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录