From: Eric Blake <eblake@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, den@openvz.org
Subject: Re: [Qemu-devel] [PATCH 15/19] nbd/server: use errp instead of LOG
Date: Sat, 3 Jun 2017 16:46:31 -0500 [thread overview]
Message-ID: <eadf1060-4198-a5c4-f337-003a2ec0c917@redhat.com> (raw)
In-Reply-To: <20170530143052.165002-16-vsementsov@virtuozzo.com>
[-- Attachment #1: Type: text/plain, Size: 4421 bytes --]
On 05/30/2017 09:30 AM, Vladimir Sementsov-Ogievskiy wrote:
> Move to modern errp scheme from just LOGging errors.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> nbd/server.c | 257 ++++++++++++++++++++++++++++++++++-------------------------
> 1 file changed, 150 insertions(+), 107 deletions(-)
>
> @@ -143,30 +143,30 @@ static int nbd_negotiate_send_rep_len(QIOChannel *ioc, uint32_t type,
> type, opt, len);
>
> magic = cpu_to_be64(NBD_REP_MAGIC);
> - ret = write_sync(ioc, &magic, sizeof(magic), NULL);
> + ret = write_sync(ioc, &magic, sizeof(magic), errp);
> if (ret < 0) {
> - LOG("write failed (rep magic)");
> + error_prepend(errp, "write failed (rep magic): ");
> return ret;
> }
I'm wondering how much we really want to use error_prepend(), or if we
could just get away with using the original error message unchanged.
I'm not saying to rewrite the patch now that you've done the work, so
much as asking aloud whether the additional information in the error
messages will prove useful.
There are definitely some ripple effects from your v2 posting of the
first half of the series that will require you to rebase this, but the
overall idea is sound.
> /* Send an error reply.
> * Return -errno on error, 0 on success. */
> -static int GCC_FMT_ATTR(4, 5)
> +static int GCC_FMT_ATTR(5, 6)
> nbd_negotiate_send_rep_err(QIOChannel *ioc, uint32_t type,
> - uint32_t opt, const char *fmt, ...)
> + uint32_t opt, Error **errp, const char *fmt, ...)
Having errp not be the last argument is unusual, but I don't see how you
can do any differently with the var-args nature of the call.
> @@ -505,26 +515,33 @@ static int nbd_negotiate_options(NBDClient *client)
> * disconnecting, but that we must also tolerate
> * guests that don't wait for our reply. */
> ret = nbd_negotiate_send_rep(client->ioc, NBD_REP_ACK,
> - clientflags);
> - return ret < 0 && ret != -EPIPE ? ret : 1;
> + clientflags, &local_err);
> +
> + if (ret < 0 && ret != -EPIPE) {
> + error_propagate(errp, local_err);
> + return ret;
> + }
> +
> + error_free(local_err);
> + return 1;
Of course, you'll have to simplify this portion. This is probably the
one place where you actually DO want to use:
nbd_negotiate_send_rep(client->ioc, NBD_REP_ACK,
clientflags, NULL)
because you truly do not care whether you had an error.
> @@ -1090,18 +1113,18 @@ static int nbd_co_receive_request(NBDRequestData *req, NBDRequest *request)
>
> /* Sanity checks, part 2. */
> if (request->from + request->len > client->exp->size) {
> - LOG("operation past EOF; From: %" PRIu64 ", Len: %" PRIu32
> - ", Size: %" PRIu64, request->from, request->len,
> - (uint64_t)client->exp->size);
> + error_setg(errp, "operation past EOF; From: %" PRIu64 ", Len: %" PRIu32
> + ", Size: %" PRIu64, request->from, request->len,
> + (uint64_t)client->exp->size);
> return request->type == NBD_CMD_WRITE ? -ENOSPC : -EINVAL;
Question - now that we are consistently setting a decent errp, do we
have any callers that care about specific -errno return values, or could
we further simplify the functions by just returning -1 (instead of
worrying about -errno) on failures?
> @@ -1244,21 +1268,33 @@ static coroutine_fn void nbd_trip(void *opaque)
>
> reply:
> + if (local_err) {
> + error_report_err(local_err);
> + local_err = NULL;
> + }
This says that after we detect an error, we report it,
> +
> + if (nbd_co_send_reply(req, &reply, reply_data_len) < 0) {
> + error_setg(&local_err, "Failed to send reply");
> + goto disconnect;
> + }
...but then blindly try to send the reply anyways, forgetting that we
ever detected the original error. Is that going to bite us?
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2017-06-03 21:46 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-30 14:30 [Qemu-devel] [PATCH 00/19] nbd errors and traces refactoring Vladimir Sementsov-Ogievskiy
2017-05-30 14:30 ` [Qemu-devel] [PATCH 01/19] nbd/server: get rid of nbd_negotiate_read and friends Vladimir Sementsov-Ogievskiy
2017-05-30 20:10 ` Eric Blake
2017-05-31 13:12 ` Vladimir Sementsov-Ogievskiy
2017-05-31 14:39 ` Eric Blake
2017-05-31 14:56 ` Vladimir Sementsov-Ogievskiy
2017-05-31 15:48 ` Vladimir Sementsov-Ogievskiy
2017-05-30 14:30 ` [Qemu-devel] [PATCH 02/19] nbd/server: get rid of ssize_t Vladimir Sementsov-Ogievskiy
2017-05-30 20:23 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 03/19] nbd/server: refactor nbd_co_send_reply Vladimir Sementsov-Ogievskiy
2017-05-30 20:25 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 04/19] nbd/server: get rid of EAGAIN dead code Vladimir Sementsov-Ogievskiy
2017-05-30 21:06 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 05/19] nbd/server: refactor nbd_co_receive_request Vladimir Sementsov-Ogievskiy
2017-05-30 21:31 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 06/19] nbd/server: remove NBDClientNewData Vladimir Sementsov-Ogievskiy
2017-05-30 22:03 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 07/19] nbd/server: nbd_negotiate: fix error path Vladimir Sementsov-Ogievskiy
2017-05-30 21:12 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 08/19] nbd/server: get rid of fail: return rc Vladimir Sementsov-Ogievskiy
2017-05-30 22:05 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 09/19] nbd/server: rename rc to ret Vladimir Sementsov-Ogievskiy
2017-05-30 22:15 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 10/19] nbd/server: refactor nbd_trip Vladimir Sementsov-Ogievskiy
2017-05-30 22:23 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 11/19] io/channel-socket: qio_channel_socket_writev handle EPIPE Vladimir Sementsov-Ogievskiy
2017-05-30 15:04 ` Daniel P. Berrange
2017-05-30 15:15 ` Vladimir Sementsov-Ogievskiy
2017-05-30 15:29 ` Daniel P. Berrange
2017-05-30 14:30 ` [Qemu-devel] [PATCH 12/19] nbd/common: nbd_wr_syncv handle QIO_CHANNEL_ERR_EPIPE Vladimir Sementsov-Ogievskiy
2017-06-01 22:13 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 13/19] nbd/server: return original error codes Vladimir Sementsov-Ogievskiy
2017-06-01 22:29 ` Eric Blake
2017-06-02 10:00 ` Vladimir Sementsov-Ogievskiy
2017-05-30 14:30 ` [Qemu-devel] [PATCH 14/19] nbd/server: nbd_negotiate: return 1 on NBD_OPT_ABORT Vladimir Sementsov-Ogievskiy
2017-06-01 22:33 ` Eric Blake
2017-06-02 12:55 ` Vladimir Sementsov-Ogievskiy
2017-06-02 13:14 ` Vladimir Sementsov-Ogievskiy
2017-05-30 14:30 ` [Qemu-devel] [PATCH 15/19] nbd/server: use errp instead of LOG Vladimir Sementsov-Ogievskiy
2017-06-03 21:46 ` Eric Blake [this message]
2017-06-05 9:33 ` Vladimir Sementsov-Ogievskiy
2017-05-30 14:30 ` [Qemu-devel] [PATCH 16/19] nbd/server: add errp to nbd_send_reply() Vladimir Sementsov-Ogievskiy
2017-06-03 21:50 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 17/19] nbd/common: nbd_tls_handshake: use error_reportf_err instead of TRACE Vladimir Sementsov-Ogievskiy
2017-06-03 21:55 ` Eric Blake
2017-05-30 14:30 ` [Qemu-devel] [PATCH 18/19] nbd/client: refactor TRACE of NBD_MAGIC Vladimir Sementsov-Ogievskiy
2017-06-05 15:06 ` Eric Blake
2017-06-06 9:01 ` Vladimir Sementsov-Ogievskiy
2017-05-30 14:30 ` [Qemu-devel] [PATCH 19/19] nbd: use generic trace subsystem instead of TRACE macro Vladimir Sementsov-Ogievskiy
2017-06-05 15:23 ` Eric Blake
2017-06-06 9:10 ` Vladimir Sementsov-Ogievskiy
2017-06-06 9:17 ` Vladimir Sementsov-Ogievskiy
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=eadf1060-4198-a5c4-f337-003a2ec0c917@redhat.com \
--to=eblake@redhat.com \
--cc=den@openvz.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.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).