From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NvvzT-0003St-3o for qemu-devel@nongnu.org; Sun, 28 Mar 2010 13:09:35 -0400 Received: from [140.186.70.92] (port=39879 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NvvzQ-0003Ql-MD for qemu-devel@nongnu.org; Sun, 28 Mar 2010 13:09:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NvvzP-0007fN-82 for qemu-devel@nongnu.org; Sun, 28 Mar 2010 13:09:32 -0400 Received: from mail-yw0-f198.google.com ([209.85.211.198]:37369) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NvvzP-0007fG-4c for qemu-devel@nongnu.org; Sun, 28 Mar 2010 13:09:31 -0400 Received: by ywh36 with SMTP id 36so2895570ywh.4 for ; Sun, 28 Mar 2010 10:09:30 -0700 (PDT) From: Ryota Ozaki Date: Mon, 29 Mar 2010 02:07:12 +0900 Message-Id: <1269796032-9166-3-git-send-email-ozaki.ryota@gmail.com> In-Reply-To: <1269796032-9166-1-git-send-email-ozaki.ryota@gmail.com> References: <1269796032-9166-1-git-send-email-ozaki.ryota@gmail.com> Subject: [Qemu-devel] [PATCH 3/3] qemu-nbd: Improve error reporting List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org - 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 --- qemu-nbd.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index 7ef409f..d3e1814 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -324,7 +324,7 @@ int main(int argc, char **argv) if (disconnect) { fd = open(argv[optind], readonly ? O_RDONLY : O_RDWR); if (fd == -1) { - errx(EXIT_FAILURE, "Cannot open %s", argv[optind]); + err(EXIT_FAILURE, "Cannot open %s", argv[optind]); } nbd_disconnect(fd); @@ -343,25 +343,31 @@ int main(int argc, char **argv) return 1; } - if (bdrv_open(bs, argv[optind], flags) < 0) { - return 1; + if ((ret = bdrv_open(bs, argv[optind], flags)) < 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, readonly ? R_OK : 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"); } } @@ -386,6 +392,7 @@ int main(int argc, char **argv) sock = unix_socket_outgoing(socket); if (sock == -1) { if (errno != ENOENT && errno != ECONNREFUSED) { + ret = 1; goto out; } sleep(1); /* wait children */ -- 1.6.5.2