aboutsummaryrefslogtreecommitdiffstats
path: root/qemu-nbd.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2011-11-04 15:51:24 +0100
committerKevin Wolf <kwolf@redhat.com>2011-11-11 14:02:58 +0100
commit802ddc375acabf06c0cb5a2716ca3573bc9ca89f (patch)
tree6bcec5b805731e5013e8b0a205e92d04cd1757ee /qemu-nbd.c
parentf1ef5555c24914f8ad4051a20571a5c62022d928 (diff)
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>
Diffstat (limited to 'qemu-nbd.c')
-rw-r--r--qemu-nbd.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 6f84ad01e..291cba2ea 100644
--- a/qemu-nbd.c
+++ b/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);