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) {
|
||||
/* 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);
|
||||
|
Loading…
Reference in New Issue
Block a user