mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-06 03:58:59 +00:00
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: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
f1ef5555c2
commit
802ddc375a
34
qemu-nbd.c
34
qemu-nbd.c
@ -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) {
|
if (device) {
|
||||||
/* Open before spawning new threads. In the future, we may
|
/* Open before spawning new threads. In the future, we may
|
||||||
* drop privileges after opening.
|
* 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));
|
sharing_fds = g_malloc((shared + 1) * sizeof(int));
|
||||||
|
|
||||||
if (sockpath) {
|
if (sockpath) {
|
||||||
@ -568,7 +569,6 @@ int main(int argc, char **argv)
|
|||||||
qemu_vfree(data);
|
qemu_vfree(data);
|
||||||
|
|
||||||
close(sharing_fds[0]);
|
close(sharing_fds[0]);
|
||||||
bdrv_close(bs);
|
|
||||||
g_free(sharing_fds);
|
g_free(sharing_fds);
|
||||||
if (sockpath) {
|
if (sockpath) {
|
||||||
unlink(sockpath);
|
unlink(sockpath);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user