提交 802ddc37 编写于 作者: P Paolo Bonzini 提交者: Kevin Wolf

qemu-nbd: open the block device after starting the client thread

This is cleaner, because we do not need to close the block device when
there is an error opening /dev/nbdX.  It was done this way only to
print errors before daemonizing.

At the same time, use atexit to ensure that the block device is closed
whenever we exit.
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NKevin Wolf <kwolf@redhat.com>
上级 f1ef5555
......@@ -460,22 +460,6 @@ int main(int argc, char **argv)
}
}
bdrv_init();
bs = bdrv_new("hda");
srcpath = argv[optind];
if ((ret = bdrv_open(bs, srcpath, flags, NULL)) < 0) {
errno = -ret;
err(EXIT_FAILURE, "Failed to bdrv_open '%s'", srcpath);
}
fd_size = bs->total_sectors * 512;
if (partition != -1 &&
find_partition(bs, partition, &dev_offset, &fd_size))
err(EXIT_FAILURE, "Could not find partition %d", partition);
if (device) {
/* Open before spawning new threads. In the future, we may
* drop privileges after opening.
......@@ -491,6 +475,23 @@ int main(int argc, char **argv)
}
}
bdrv_init();
atexit(bdrv_close_all);
bs = bdrv_new("hda");
srcpath = argv[optind];
if ((ret = bdrv_open(bs, srcpath, flags, NULL)) < 0) {
errno = -ret;
err(EXIT_FAILURE, "Failed to bdrv_open '%s'", argv[optind]);
}
fd_size = bs->total_sectors * 512;
if (partition != -1 &&
find_partition(bs, partition, &dev_offset, &fd_size)) {
err(EXIT_FAILURE, "Could not find partition %d", partition);
}
sharing_fds = g_malloc((shared + 1) * sizeof(int));
if (sockpath) {
......@@ -568,7 +569,6 @@ int main(int argc, char **argv)
qemu_vfree(data);
close(sharing_fds[0]);
bdrv_close(bs);
g_free(sharing_fds);
if (sockpath) {
unlink(sockpath);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册