Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
a6ac2313
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a6ac2313
编写于
12月 06, 2011
作者:
P
Paolo Bonzini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
open /dev/nbd in nbd_client_thread
Signed-off-by:
N
Paolo Bonzini
<
pbonzini@redhat.com
>
上级
9faf31b6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
18 deletion
+16
-18
qemu-nbd.c
qemu-nbd.c
+16
-18
未找到文件。
qemu-nbd.c
浏览文件 @
a6ac2313
...
@@ -37,7 +37,6 @@
...
@@ -37,7 +37,6 @@
static
NBDExport
*
exp
;
static
NBDExport
*
exp
;
static
int
verbose
;
static
int
verbose
;
static
char
*
device
;
static
char
*
srcpath
;
static
char
*
srcpath
;
static
char
*
sockpath
;
static
char
*
sockpath
;
static
bool
sigterm_reported
;
static
bool
sigterm_reported
;
...
@@ -178,6 +177,7 @@ static void termsig_handler(int signum)
...
@@ -178,6 +177,7 @@ static void termsig_handler(int signum)
static
void
*
show_parts
(
void
*
arg
)
static
void
*
show_parts
(
void
*
arg
)
{
{
char
*
device
=
arg
;
int
nbd
;
int
nbd
;
/* linux just needs an open() to trigger
/* linux just needs an open() to trigger
...
@@ -194,11 +194,11 @@ static void *show_parts(void *arg)
...
@@ -194,11 +194,11 @@ static void *show_parts(void *arg)
static
void
*
nbd_client_thread
(
void
*
arg
)
static
void
*
nbd_client_thread
(
void
*
arg
)
{
{
int
fd
=
*
(
int
*
)
arg
;
char
*
device
=
arg
;
off_t
size
;
off_t
size
;
size_t
blocksize
;
size_t
blocksize
;
uint32_t
nbdflags
;
uint32_t
nbdflags
;
int
sock
;
int
fd
,
sock
;
int
ret
;
int
ret
;
pthread_t
show_parts_thread
;
pthread_t
show_parts_thread
;
...
@@ -213,13 +213,20 @@ static void *nbd_client_thread(void *arg)
...
@@ -213,13 +213,20 @@ static void *nbd_client_thread(void *arg)
goto
out
;
goto
out
;
}
}
fd
=
open
(
device
,
O_RDWR
);
if
(
fd
==
-
1
)
{
/* Linux-only, we can use %m in printf. */
fprintf
(
stderr
,
"Failed to open %s: %m"
,
device
);
goto
out
;
}
ret
=
nbd_init
(
fd
,
sock
,
nbdflags
,
size
,
blocksize
);
ret
=
nbd_init
(
fd
,
sock
,
nbdflags
,
size
,
blocksize
);
if
(
ret
==
-
1
)
{
if
(
ret
==
-
1
)
{
goto
out
;
goto
out
;
}
}
/* update partition table */
/* update partition table */
pthread_create
(
&
show_parts_thread
,
NULL
,
show_parts
,
NULL
);
pthread_create
(
&
show_parts_thread
,
NULL
,
show_parts
,
device
);
if
(
verbose
)
{
if
(
verbose
)
{
fprintf
(
stderr
,
"NBD device %s is now connected to %s
\n
"
,
fprintf
(
stderr
,
"NBD device %s is now connected to %s
\n
"
,
...
@@ -273,6 +280,7 @@ int main(int argc, char **argv)
...
@@ -273,6 +280,7 @@ int main(int argc, char **argv)
uint32_t
nbdflags
=
0
;
uint32_t
nbdflags
=
0
;
bool
disconnect
=
false
;
bool
disconnect
=
false
;
const
char
*
bindto
=
"0.0.0.0"
;
const
char
*
bindto
=
"0.0.0.0"
;
char
*
device
=
NULL
;
int
port
=
NBD_DEFAULT_PORT
;
int
port
=
NBD_DEFAULT_PORT
;
off_t
fd_size
;
off_t
fd_size
;
const
char
*
sopt
=
"hVb:o:p:rsnP:c:dvk:e:t"
;
const
char
*
sopt
=
"hVb:o:p:rsnP:c:dvk:e:t"
;
...
@@ -466,19 +474,9 @@ int main(int argc, char **argv)
...
@@ -466,19 +474,9 @@ int main(int argc, char **argv)
}
}
}
}
if
(
device
)
{
if
(
device
!=
NULL
&&
sockpath
==
NULL
)
{
/* Open before spawning new threads. In the future, we may
sockpath
=
g_malloc
(
128
);
* drop privileges after opening.
snprintf
(
sockpath
,
128
,
SOCKET_PATH
,
basename
(
device
));
*/
fd
=
open
(
device
,
O_RDWR
);
if
(
fd
==
-
1
)
{
err
(
EXIT_FAILURE
,
"Failed to open %s"
,
device
);
}
if
(
sockpath
==
NULL
)
{
sockpath
=
g_malloc
(
128
);
snprintf
(
sockpath
,
128
,
SOCKET_PATH
,
basename
(
device
));
}
}
}
bdrv_init
();
bdrv_init
();
...
@@ -513,7 +511,7 @@ int main(int argc, char **argv)
...
@@ -513,7 +511,7 @@ int main(int argc, char **argv)
if
(
device
)
{
if
(
device
)
{
int
ret
;
int
ret
;
ret
=
pthread_create
(
&
client_thread
,
NULL
,
nbd_client_thread
,
&
fd
);
ret
=
pthread_create
(
&
client_thread
,
NULL
,
nbd_client_thread
,
device
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
errx
(
EXIT_FAILURE
,
"Failed to create client thread: %s"
,
errx
(
EXIT_FAILURE
,
"Failed to create client thread: %s"
,
strerror
(
ret
));
strerror
(
ret
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录