From: Paolo Bonzini <pbonzini@redhat.com>
To: Max Reitz <mreitz@redhat.com>, qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 08/25] nbd: Handle blk_getlength() failure
Date: Wed, 11 Mar 2015 12:26:38 +0100 [thread overview]
Message-ID: <5500266E.3040909@redhat.com> (raw)
In-Reply-To: <1424887718-10800-9-git-send-email-mreitz@redhat.com>
On 25/02/2015 19:08, Max Reitz wrote:
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
> blockdev-nbd.c | 6 +++++-
> include/block/nbd.h | 3 ++-
> nbd.c | 19 ++++++++++++++++---
> qemu-nbd.c | 10 +++++++++-
> 4 files changed, 32 insertions(+), 6 deletions(-)
>
> diff --git a/blockdev-nbd.c b/blockdev-nbd.c
> index eb5f9a0..46482a8 100644
> --- a/blockdev-nbd.c
> +++ b/blockdev-nbd.c
> @@ -80,7 +80,11 @@ void qmp_nbd_server_add(const char *device, bool has_writable, bool writable,
> writable = false;
> }
>
> - exp = nbd_export_new(blk, 0, -1, writable ? 0 : NBD_FLAG_READ_ONLY, NULL);
> + exp = nbd_export_new(blk, 0, -1, writable ? 0 : NBD_FLAG_READ_ONLY, NULL,
> + errp);
> + if (!exp) {
> + return;
> + }
>
> nbd_export_set_name(exp, device);
> }
> diff --git a/include/block/nbd.h b/include/block/nbd.h
> index ca9a5ac..2c20138 100644
> --- a/include/block/nbd.h
> +++ b/include/block/nbd.h
> @@ -86,7 +86,8 @@ typedef struct NBDExport NBDExport;
> typedef struct NBDClient NBDClient;
>
> NBDExport *nbd_export_new(BlockBackend *blk, off_t dev_offset, off_t size,
> - uint32_t nbdflags, void (*close)(NBDExport *));
> + uint32_t nbdflags, void (*close)(NBDExport *),
> + Error **errp);
> void nbd_export_close(NBDExport *exp);
> void nbd_export_get(NBDExport *exp);
> void nbd_export_put(NBDExport *exp);
> diff --git a/nbd.c b/nbd.c
> index ad0948b..ddc2bd8 100644
> --- a/nbd.c
> +++ b/nbd.c
> @@ -986,21 +986,30 @@ static void nbd_eject_notifier(Notifier *n, void *data)
> }
>
> NBDExport *nbd_export_new(BlockBackend *blk, off_t dev_offset, off_t size,
> - uint32_t nbdflags, void (*close)(NBDExport *))
> + uint32_t nbdflags, void (*close)(NBDExport *),
> + Error **errp)
> {
> - NBDEjectNotifier *n = g_new0(NBDEjectNotifier, 1);
> + NBDEjectNotifier *n;
This hunk doesn't apply yet, but I've fixed it up.
Paolo
> NBDExport *exp = g_malloc0(sizeof(NBDExport));
> exp->refcount = 1;
> QTAILQ_INIT(&exp->clients);
> exp->blk = blk;
> exp->dev_offset = dev_offset;
> exp->nbdflags = nbdflags;
> - exp->size = size == -1 ? blk_getlength(blk) : size;
> + exp->size = size < 0 ? blk_getlength(blk) : size;
> + if (exp->size < 0) {
> + error_setg_errno(errp, -exp->size,
> + "Failed to determine the NBD export's length");
> + goto fail;
> + }
> + exp->size -= exp->size % BDRV_SECTOR_SIZE;
> +
> exp->close = close;
> exp->ctx = blk_get_aio_context(blk);
> blk_ref(blk);
> blk_add_aio_context_notifier(blk, blk_aio_attached, blk_aio_detach, exp);
>
> + n = g_new0(NBDEjectNotifier, 1);
> n->n.notify = nbd_eject_notifier;
> n->exp = exp;
> QTAILQ_INSERT_TAIL(&eject_notifiers, n, next);
> @@ -1014,6 +1023,10 @@ NBDExport *nbd_export_new(BlockBackend *blk, off_t dev_offset, off_t size,
> */
> blk_invalidate_cache(blk, NULL);
> return exp;
> +
> +fail:
> + g_free(exp);
> + return NULL;
> }
>
> NBDExport *nbd_export_find(const char *name)
> diff --git a/qemu-nbd.c b/qemu-nbd.c
> index cfdc4dc..9b9d40d 100644
> --- a/qemu-nbd.c
> +++ b/qemu-nbd.c
> @@ -721,6 +721,10 @@ int main(int argc, char **argv)
>
> bs->detect_zeroes = detect_zeroes;
> fd_size = blk_getlength(blk);
> + if (fd_size < 0) {
> + errx(EXIT_FAILURE, "Failed to determine the image length: %s",
> + strerror(-fd_size));
> + }
>
> if (partition != -1) {
> ret = find_partition(blk, partition, &dev_offset, &fd_size);
> @@ -730,7 +734,11 @@ int main(int argc, char **argv)
> }
> }
>
> - exp = nbd_export_new(blk, dev_offset, fd_size, nbdflags, nbd_export_closed);
> + exp = nbd_export_new(blk, dev_offset, fd_size, nbdflags, nbd_export_closed,
> + &local_err);
> + if (!exp) {
> + errx(EXIT_FAILURE, "%s", error_get_pretty(local_err));
> + }
>
> if (sockpath) {
> fd = unix_socket_incoming(sockpath);
>
next prev parent reply other threads:[~2015-03-11 11:26 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-25 18:08 [Qemu-devel] [PATCH 00/25] nbd: Several fixes Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 01/25] util/uri: Add overflow check to rfc3986_parse_port Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 02/25] qemu-nbd: Detect unused partitions by system == 0 Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 03/25] nbd: Fix nbd_establish_connection()'s return value Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 04/25] nbd: Fix response to invalid requests Max Reitz
2015-03-02 16:52 ` Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 05/25] nbd: Avoid generic -EINVAL Max Reitz
2015-03-11 11:22 ` Paolo Bonzini
2015-03-16 13:51 ` Max Reitz
2015-03-16 14:42 ` Paolo Bonzini
2015-03-16 14:48 ` Max Reitz
2015-03-16 14:49 ` Paolo Bonzini
2015-02-25 18:08 ` [Qemu-devel] [PATCH 06/25] nbd: Pass return value from nbd_handle_list() Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 07/25] nbd: Add "failed to open export" error message Max Reitz
2015-03-11 11:24 ` Paolo Bonzini
2015-03-16 13:55 ` Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 08/25] nbd: Handle blk_getlength() failure Max Reitz
2015-03-11 11:26 ` Paolo Bonzini [this message]
2015-02-25 18:08 ` [Qemu-devel] [PATCH 09/25] qemu-nbd: fork() can fail Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 10/25] nbd: Fix potential signed overflow issues Max Reitz
2015-03-11 11:28 ` Paolo Bonzini
2015-02-25 18:08 ` [Qemu-devel] [PATCH 11/25] qemu-nbd: Fix and improve input verification Max Reitz
2015-03-11 11:30 ` Paolo Bonzini
2015-03-16 13:56 ` Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 12/25] nbd: Set block size to BDRV_SECTOR_SIZE Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 13/25] nbd: Enforce sector alignment Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 14/25] coroutine: Add co_yield_timeout() Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 15/25] coroutine-io: Return -errno in case of error Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 16/25] coroutine-io: Add I/O functions with timeout Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 17/25] nbd: Employ timeouts Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 18/25] nbd: Fix nbd_receive_options() Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 19/25] nbd: Fix interpretation of the export flags Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 20/25] block/nbd: Comment on discard/flush silently failing Max Reitz
2015-03-11 11:31 ` Paolo Bonzini
2015-03-16 13:58 ` Max Reitz
2015-03-16 14:44 ` Paolo Bonzini
2015-03-16 14:49 ` Max Reitz
2015-03-16 14:51 ` Paolo Bonzini
2015-03-16 14:52 ` Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 21/25] nbd: Drop unexpected data for NBD_OPT_LIST Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 22/25] iotests: Add _timeout function Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 23/25] iotests: Add test for invalid qemu-nbd parameters Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 24/25] iotests: Add test for issuing discard over NBD Max Reitz
2015-02-25 18:08 ` [Qemu-devel] [PATCH 25/25] iotests: Add test for a non-existing NBD export Max Reitz
2015-02-25 18:11 ` [Qemu-devel] [PATCH 00/25] nbd: Several fixes Max Reitz
2015-03-11 11:36 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5500266E.3040909@redhat.com \
--to=pbonzini@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).