[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/17] nbd: Pass local error object pointer to error
From: |
Greg Kurz |
Subject: |
[Qemu-devel] [PATCH 13/17] nbd: Pass local error object pointer to error_append_hint() |
Date: |
Tue, 17 Sep 2019 12:21:53 +0200 |
User-agent: |
StGit/unknown-version |
Ensure that hints are added even if errp is &error_fatal or &error_abort.
Signed-off-by: Greg Kurz <address@hidden>
---
nbd/client.c | 24 +++++++++++++-----------
nbd/server.c | 7 +++++--
2 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/nbd/client.c b/nbd/client.c
index b9dc829175f9..c6e6e4046fd5 100644
--- a/nbd/client.c
+++ b/nbd/client.c
@@ -154,6 +154,7 @@ static int nbd_handle_reply_err(QIOChannel *ioc,
NBDOptionReply *reply,
bool strict, Error **errp)
{
g_autofree char *msg = NULL;
+ Error *local_err = NULL;
if (!(reply->type & (1 << 31))) {
return 1;
@@ -161,14 +162,14 @@ static int nbd_handle_reply_err(QIOChannel *ioc,
NBDOptionReply *reply,
if (reply->length) {
if (reply->length > NBD_MAX_BUFFER_SIZE) {
- error_setg(errp, "server error %" PRIu32
+ error_setg(&local_err, "server error %" PRIu32
" (%s) message is too long",
reply->type, nbd_rep_lookup(reply->type));
goto err;
}
msg = g_malloc(reply->length + 1);
if (nbd_read(ioc, msg, reply->length, NULL, errp) < 0) {
- error_prepend(errp, "Failed to read option error %" PRIu32
+ error_prepend(&local_err, "Failed to read option error %" PRIu32
" (%s) message: ",
reply->type, nbd_rep_lookup(reply->type));
goto err;
@@ -187,50 +188,51 @@ static int nbd_handle_reply_err(QIOChannel *ioc,
NBDOptionReply *reply,
switch (reply->type) {
case NBD_REP_ERR_POLICY:
- error_setg(errp, "Denied by server for option %" PRIu32 " (%s)",
+ error_setg(&local_err, "Denied by server for option %" PRIu32 " (%s)",
reply->option, nbd_opt_lookup(reply->option));
break;
case NBD_REP_ERR_INVALID:
- error_setg(errp, "Invalid parameters for option %" PRIu32 " (%s)",
+ error_setg(&local_err, "Invalid parameters for option %" PRIu32 "
(%s)",
reply->option, nbd_opt_lookup(reply->option));
break;
case NBD_REP_ERR_PLATFORM:
- error_setg(errp, "Server lacks support for option %" PRIu32 " (%s)",
+ error_setg(&local_err, "Server lacks support for option %" PRIu32 "
(%s)",
reply->option, nbd_opt_lookup(reply->option));
break;
case NBD_REP_ERR_TLS_REQD:
- error_setg(errp, "TLS negotiation required before option %" PRIu32
+ error_setg(&local_err, "TLS negotiation required before option %"
PRIu32
" (%s)", reply->option, nbd_opt_lookup(reply->option));
break;
case NBD_REP_ERR_UNKNOWN:
- error_setg(errp, "Requested export not available");
+ error_setg(&local_err, "Requested export not available");
break;
case NBD_REP_ERR_SHUTDOWN:
- error_setg(errp, "Server shutting down before option %" PRIu32 " (%s)",
+ error_setg(&local_err, "Server shutting down before option %" PRIu32 "
(%s)",
reply->option, nbd_opt_lookup(reply->option));
break;
case NBD_REP_ERR_BLOCK_SIZE_REQD:
- error_setg(errp, "Server requires INFO_BLOCK_SIZE for option %" PRIu32
+ error_setg(&local_err, "Server requires INFO_BLOCK_SIZE for option %"
PRIu32
" (%s)", reply->option, nbd_opt_lookup(reply->option));
break;
default:
- error_setg(errp, "Unknown error code when asking for option %" PRIu32
+ error_setg(&local_err, "Unknown error code when asking for option %"
PRIu32
" (%s)", reply->option, nbd_opt_lookup(reply->option));
break;
}
if (msg) {
- error_append_hint(errp, "server reported: %s\n", msg);
+ error_append_hint(&local_err, "server reported: %s\n", msg);
}
err:
+ error_propagate(errp, local_err);
nbd_send_opt_abort(ioc);
return -1;
}
diff --git a/nbd/server.c b/nbd/server.c
index 28c3c8be854c..6d9ca2563cce 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -1616,6 +1616,8 @@ void nbd_export_close(NBDExport *exp)
void nbd_export_remove(NBDExport *exp, NbdServerRemoveMode mode, Error **errp)
{
+ Error *local_err = NULL;
+
if (mode == NBD_SERVER_REMOVE_MODE_HARD || QTAILQ_EMPTY(&exp->clients)) {
nbd_export_close(exp);
return;
@@ -1623,8 +1625,9 @@ void nbd_export_remove(NBDExport *exp,
NbdServerRemoveMode mode, Error **errp)
assert(mode == NBD_SERVER_REMOVE_MODE_SAFE);
- error_setg(errp, "export '%s' still in use", exp->name);
- error_append_hint(errp, "Use mode='hard' to force client disconnect\n");
+ error_setg(&local_err, "export '%s' still in use", exp->name);
+ error_append_hint(&local_err, "Use mode='hard' to force client
disconnect\n");
+ error_propagate(errp, local_err);
}
void nbd_export_get(NBDExport *exp)
- [Qemu-devel] [PATCH 08/17] pcie_root_port: Pass local error object pointer to error_append_hint(), (continued)
- [Qemu-devel] [PATCH 08/17] pcie_root_port: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 09/17] hw/rdma: Fix missing conversion to rdma_error_report(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 10/17] s390x/css: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 11/17] scsi: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 12/17] migration: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 13/17] nbd: Pass local error object pointer to error_append_hint(),
Greg Kurz <=
- [Qemu-devel] [PATCH 14/17] ccid-card-emul: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 15/17] option: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 16/17] socket: Pass local error object pointer to error_append_hint(), Greg Kurz, 2019/09/17
- [Qemu-devel] [PATCH 17/17] checkpatch: Warn when errp is passed to error_append_hint(), Greg Kurz, 2019/09/17
- Re: [Qemu-devel] [PATCH 00/17] Fix usage of error_append_hint(), Philippe Mathieu-Daudé, 2019/09/17