[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/21] qemu-nbd: Improve error reporting
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 02/21] qemu-nbd: Improve error reporting |
Date: |
Fri, 14 May 2010 19:10:36 +0200 |
From: Ryota Ozaki <address@hidden>
- use err(3) instead of errx(3) if errno is available
to report why failed
- let fail prior to daemon(3) if opening a nbd file
is likely to fail after daemonizing to avoid silent
failure exit
- add missing 'ret = 1' when unix_socket_outgoing failed
Signed-off-by: Ryota Ozaki <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
qemu-nbd.c | 34 ++++++++++++++++++++++++----------
1 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 25aa913..4e607cf 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -112,9 +112,12 @@ static int find_partition(BlockDriverState *bs, int
partition,
uint8_t data[512];
int i;
int ext_partnum = 4;
+ int ret;
- if (bdrv_read(bs, 0, data, 1))
- errx(EXIT_FAILURE, "error while reading");
+ if ((ret = bdrv_read(bs, 0, data, 1)) < 0) {
+ errno = -ret;
+ err(EXIT_FAILURE, "error while reading");
+ }
if (data[510] != 0x55 || data[511] != 0xaa) {
errno = -EINVAL;
@@ -132,8 +135,10 @@ static int find_partition(BlockDriverState *bs, int
partition,
uint8_t data1[512];
int j;
- if (bdrv_read(bs, mbr[i].start_sector_abs, data1, 1))
- errx(EXIT_FAILURE, "error while reading");
+ if ((ret = bdrv_read(bs, mbr[i].start_sector_abs, data1, 1)) < 0) {
+ errno = -ret;
+ err(EXIT_FAILURE, "error while reading");
+ }
for (j = 0; j < 4; j++) {
read_partition(&data1[446 + 16 * j], &ext[j]);
@@ -316,7 +321,7 @@ int main(int argc, char **argv)
if (disconnect) {
fd = open(argv[optind], O_RDWR);
if (fd == -1)
- errx(EXIT_FAILURE, "Cannot open %s", argv[optind]);
+ err(EXIT_FAILURE, "Cannot open %s", argv[optind]);
nbd_disconnect(fd);
@@ -333,23 +338,30 @@ int main(int argc, char **argv)
if (bs == NULL)
return 1;
- if (bdrv_open(bs, argv[optind], flags, NULL) < 0)
- return 1;
+ if ((ret = bdrv_open(bs, argv[optind], 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))
- errx(EXIT_FAILURE, "Could not find partition %d", partition);
+ err(EXIT_FAILURE, "Could not find partition %d", partition);
if (device) {
pid_t pid;
int sock;
+ /* want to fail before daemonizing */
+ if (access(device, R_OK|W_OK) == -1) {
+ err(EXIT_FAILURE, "Could not access '%s'", device);
+ }
+
if (!verbose) {
/* detach client and server */
if (daemon(0, 0) == -1) {
- errx(EXIT_FAILURE, "Failed to daemonize");
+ err(EXIT_FAILURE, "Failed to daemonize");
}
}
@@ -372,8 +384,10 @@ int main(int argc, char **argv)
do {
sock = unix_socket_outgoing(socket);
if (sock == -1) {
- if (errno != ENOENT && errno != ECONNREFUSED)
+ if (errno != ENOENT && errno != ECONNREFUSED) {
+ ret = 1;
goto out;
+ }
sleep(1); /* wait children */
}
} while (sock == -1);
--
1.6.6.1
- [Qemu-devel] [PATCH 09/21] block: Fix protocol detection for Windows devices, (continued)
- [Qemu-devel] [PATCH 09/21] block: Fix protocol detection for Windows devices, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 07/21] bochs: use qemu block API, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 03/21] cloop: use pread, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 08/21] block: Avoid unchecked casts for AIOCBs, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 06/21] bochs: use pread, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 12/21] parallels: use pread, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 13/21] parallels: use qemu block API, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 11/21] block/vdi: Allow disk images of size 0, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 15/21] dmg: fix reading of uncompressed chunks, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 14/21] block/vpc: Fix conversion from size to disk geometry, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 02/21] qemu-nbd: Improve error reporting,
Kevin Wolf <=
- [Qemu-devel] [PATCH 16/21] dmg: use pread, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 17/21] dmg: use qemu block API, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 18/21] block/vdi: Fix image opening and creation for odd disk sizes, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 20/21] Fix docs for block stats monitor command, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 21/21] block: Remove special case for vvfat, Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 19/21] use qemu_free() instead of free(), Kevin Wolf, 2010/05/14
- [Qemu-devel] [PATCH 10/21] block: Fix bdrv_commit, Kevin Wolf, 2010/05/14
- [Qemu-devel] Re: [PULL 00/21] Block patches, Anthony Liguori, 2010/05/17