From: Eric Blake <eblake@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
qemu-devel@nongnu.org
Cc: stefanha@redhat.com, codyprime@gmail.com, jan.kiszka@siemens.com,
berto@igalia.com, zhang.zhanghailiang@huawei.com,
qemu-block@nongnu.org, arikalo@wavecomp.com, pasic@linux.ibm.com,
hpoussin@reactos.org, anthony.perard@citrix.com,
samuel.thibault@ens-lyon.org, philmd@redhat.com,
green@moxielogic.com, lvivier@redhat.com, ehabkost@redhat.com,
xiechanglong.d@gmail.com, pl@kamp.de, dgilbert@redhat.com,
b.galvani@gmail.com, eric.auger@redhat.com,
alex.williamson@redhat.com, ronniesahlberg@gmail.com,
jsnow@redhat.com, rth@twiddle.net, kwolf@redhat.com,
andrew@aj.id.au, crwulff@gmail.com, sundeep.lkml@gmail.com,
michael@walle.cc, qemu-ppc@nongnu.org,
kbastian@mail.uni-paderborn.de, imammedo@redhat.com,
fam@euphon.net, peter.maydell@linaro.org,
sheepdog@lists.wpkg.org, david@redhat.com, palmer@sifive.com,
thuth@redhat.com, jcmvbkbc@gmail.com, den@openvz.org,
hare@suse.com, sstabellini@kernel.org, arei.gonglei@huawei.com,
namei.unix@gmail.com, atar4qemu@gmail.com, farman@linux.ibm.com,
amit@kernel.org, sw@weilnetz.de, groug@kaod.org,
qemu-s390x@nongnu.org, qemu-arm@nongnu.org,
peter.chubb@nicta.com.au, clg@kaod.org, shorne@gmail.com,
qemu-riscv@nongnu.org, cohuck@redhat.com, amarkovic@wavecomp.com,
aurelien@aurel32.net, pburton@wavecomp.com,
sagark@eecs.berkeley.edu, jasowang@redhat.com, kraxel@redhat.com,
edgar.iglesias@gmail.com, gxt@mprc.pku.edu.cn, ari@tuxera.com,
quintela@redhat.com, mdroth@linux.vnet.ibm.com,
lersek@redhat.com, borntraeger@de.ibm.com,
antonynpavlov@gmail.com, dillaman@redhat.com, joel@jms.id.au,
xen-devel@lists.xenproject.org, integration@gluster.org,
rjones@redhat.com, Andrew.Baumann@microsoft.com,
mreitz@redhat.com, walling@linux.ibm.com, mst@redhat.com,
mark.cave-ayland@ilande.co.uk, v.maffione@gmail.com,
marex@denx.de, armbru@redhat.com, marcandre.lureau@redhat.com,
alistair@alistair23.me, paul.durrant@citrix.com,
pavel.dovgaluk@ispras.ru, g.lettieri@iet.unipi.it,
rizzo@iet.unipi.it, david@gibson.dropbear.id.au,
akrowiak@linux.ibm.com, berrange@redhat.com,
xiaoguangrong.eric@gmail.com, pmorel@linux.ibm.com,
wencongyang2@huawei.com, jcd@tribudubois.net,
pbonzini@redhat.com, stefanb@linux.ibm.com
Subject: Re: [RFC v2 7/9] Use auto-propagated errp
Date: Mon, 23 Sep 2019 15:30:31 -0500 [thread overview]
Message-ID: <59c5ccc7-3d4c-9613-fcd3-97642c1394cd@redhat.com> (raw)
In-Reply-To: <20190923161231.22028-8-vsementsov@virtuozzo.com>
On 9/23/19 11:12 AM, Vladimir Sementsov-Ogievskiy wrote:
> This commit is generated by command
>
> git grep -l 'Error \*\*errp' | while read f; \
> do spatch --sp-file \
> scripts/coccinelle/auto-propagated-errp.cocci --in-place $f; done
>
As mentioned in your cover letter, this fails syntax-check and
compilation without squashing in some followups; if we can't improve the
.cocci script to do it automatically, then manually squashing in
cleanups (and documenting what types of cleanups they were) is fine.
(The goal for a mechanical patch like this is to make it easy enough to
automate downstream, even where the file contents are changed, but where
the process for creating those changes are the same).
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
Spot-checking
> block/io.c | 11 +-
> block/nbd.c | 44 +++---
> qapi/qapi-visit-core.c | 53 ++-----
just to see how it looks.
> +++ b/block/io.c
> @@ -136,7 +136,6 @@ static void bdrv_merge_limits(BlockLimits *dst, const BlockLimits *src)
> void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
> {
> BlockDriver *drv = bs->drv;
> - Error *local_err = NULL;
>
Umm, no insertion of ERR_FUNCTION_BEGIN(). Oops.
> memset(&bs->bl, 0, sizeof(bs->bl));
>
> @@ -151,9 +150,8 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
>
> /* Take some limits from the children as a default */
> if (bs->file) {
> - bdrv_refresh_limits(bs->file->bs, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + bdrv_refresh_limits(bs->file->bs, errp);
> + if (*errp) {
> return;
> }
> bdrv_merge_limits(&bs->bl, &bs->file->bs->bl);
> @@ -166,9 +164,8 @@ void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
> }
>
> if (bs->backing) {
> - bdrv_refresh_limits(bs->backing->bs, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> + bdrv_refresh_limits(bs->backing->bs, errp);
> + if (*errp) {
> return;
Rest of the changes in this file are good if the macro gets added correctly.
> }
> bdrv_merge_limits(&bs->bl, &bs->backing->bs->bl);
> +++ b/block/nbd.c
> @@ -808,7 +808,6 @@ static int nbd_co_receive_cmdread_reply(BDRVNBDState *s, uint64_t handle,
> NBDReplyChunkIter iter;
> NBDReply reply;
> void *payload = NULL;
> - Error *local_err = NULL;
Recurring problem of not inserting the macro as expected.
>
> NBD_FOREACH_REPLY_CHUNK(s, iter, handle, s->info.structured_reply,
> qiov, &reply, &payload)
> @@ -827,20 +826,20 @@ static int nbd_co_receive_cmdread_reply(BDRVNBDState *s, uint64_t handle,
> break;
> case NBD_REPLY_TYPE_OFFSET_HOLE:
> ret = nbd_parse_offset_hole_payload(s, &reply.structured, payload,
> - offset, qiov, &local_err);
> + offset, qiov, errp);
> if (ret < 0) {
> nbd_channel_error(s, ret);
> - nbd_iter_channel_error(&iter, ret, &local_err);
> + nbd_iter_channel_error(&iter, ret, errp);
> }
> break;
> default:
> if (!nbd_reply_type_is_error(chunk->type)) {
> /* not allowed reply type */
> nbd_channel_error(s, -EINVAL);
> - error_setg(&local_err,
> + error_setg(errp,
> "Unexpected reply type: %d (%s) for CMD_READ",
Could almost fold these lines (but I'm not asking you to; keeping this
patch as mechanical as possible is fine).
> chunk->type, nbd_reply_type_lookup(chunk->type));
> - nbd_iter_channel_error(&iter, -EINVAL, &local_err);
> + nbd_iter_channel_error(&iter, -EINVAL, errp);
> }
> }
>
> @@ -861,7 +860,6 @@ static int nbd_co_receive_blockstatus_reply(BDRVNBDState *s,
> NBDReplyChunkIter iter;
> NBDReply reply;
> void *payload = NULL;
> - Error *local_err = NULL;
> bool received = false;
Oops on the macro.
> @@ -1174,15 +1172,13 @@ static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr,
> Error **errp)
> {
> QIOChannelSocket *sioc;
> - Error *local_err = NULL;
>
> sioc = qio_channel_socket_new();
> qio_channel_set_name(QIO_CHANNEL(sioc), "nbd-client");
>
> - qio_channel_socket_connect_sync(sioc, saddr, &local_err);
> - if (local_err) {
> + qio_channel_socket_connect_sync(sioc, saddr, errp);
> + if (*errp) {
> object_unref(OBJECT(sioc));
> - error_propagate(errp, local_err);
> return NULL;
But getting rid of error_propagate() is nice.
Did you grep for instances of error_propagate() after your mechanical
patch, to see what else the Coccinelle script might have missed?
> +++ b/qapi/opts-visitor.c
> @@ -275,6 +275,7 @@ opts_next_list(Visitor *v, GenericList *tail, size_t size)
> static void
> opts_check_list(Visitor *v, Error **errp)
> {
> + ERRP_FUNCTION_BEGIN();
> /*
> * Unvisited list elements will be reported later when checking
> * whether unvisited struct members remain.
Here the macro got added, but with no obvious benefit later on (although
we also argued that adding it even when it makes no difference is not
bad, if that's easier to automate for style checking).
> diff --git a/qapi/qapi-dealloc-visitor.c b/qapi/qapi-dealloc-visitor.c
> index d192724b13..3ee4c7a2e7 100644
> --- a/qapi/qapi-dealloc-visitor.c
> +++ b/qapi/qapi-dealloc-visitor.c
> @@ -25,6 +25,7 @@ struct QapiDeallocVisitor
> static void qapi_dealloc_start_struct(Visitor *v, const char *name, void **obj,
> size_t unused, Error **errp)
> {
> + ERRP_FUNCTION_BEGIN();
> }
Here's an example where exempting empty functions would be nicer.
> +++ b/qapi/qapi-visit-core.c
> @@ -39,18 +39,15 @@ void visit_free(Visitor *v)
> void visit_start_struct(Visitor *v, const char *name, void **obj,
> size_t size, Error **errp)
> {
> - Error *err = NULL;
> -
Oops, macro not added.
> trace_visit_start_struct(v, name, obj, size);
> if (obj) {
> assert(size);
> assert(!(v->type & VISITOR_OUTPUT) || *obj);
> }
> - v->start_struct(v, name, obj, size, &err);
> + v->start_struct(v, name, obj, size, errp);
> if (obj && (v->type & VISITOR_INPUT)) {
> - assert(!err != !*obj);
> + assert(!*errp != !*obj);
> }
> - error_propagate(errp, err);
> }
But the cleanup is sane, once the macro is present.
> @@ -152,12 +143,10 @@ void visit_type_int(Visitor *v, const char *name, int64_t *obj, Error **errp)
> static void visit_type_uintN(Visitor *v, uint64_t *obj, const char *name,
> uint64_t max, const char *type, Error **errp)
> {
> - Error *err = NULL;
> uint64_t value = *obj;
>
> - v->type_uint64(v, name, &value, &err);
> - if (err) {
> - error_propagate(errp, err);
> + v->type_uint64(v, name, &value, errp);
> + if (*errp) {
> } else if (value > max) {
> error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
> name ? name : "null", type);
Results in an empty if which looks funny. This one could be a manual
touchup later.
> @@ -211,12 +200,10 @@ static void visit_type_intN(Visitor *v, int64_t *obj, const char *name,
> int64_t min, int64_t max, const char *type,
> Error **errp)
> {
> - Error *err = NULL;
> int64_t value = *obj;
>
> - v->type_int64(v, name, &value, &err);
> - if (err) {
> - error_propagate(errp, err);
> + v->type_int64(v, name, &value, errp);
> + if (*errp) {
> } else if (value < min || value > max) {
and again
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2019-09-23 20:54 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-23 16:12 [RFC v2 0/9] error: auto propagated local_err Vladimir Sementsov-Ogievskiy
2019-09-23 16:12 ` [RFC v2 1/9] " Vladimir Sementsov-Ogievskiy
2019-09-23 19:58 ` Eric Blake
2019-09-23 16:12 ` [RFC v2 2/9] qapi/error: add (Error **errp) cleaning APIs Vladimir Sementsov-Ogievskiy
2019-09-23 18:39 ` Eric Blake
2019-09-23 16:12 ` [RFC v2 3/9] errp: rename errp to errp_in where it is IN-argument Vladimir Sementsov-Ogievskiy
2019-09-23 18:35 ` Eric Blake
2019-09-23 16:12 ` [RFC v2 4/9] hw/core/loader-fit: fix freeing errp in fit_load_fdt Vladimir Sementsov-Ogievskiy
2019-09-23 18:41 ` Eric Blake
2019-09-23 16:12 ` [RFC v2 5/9] net/net: fix local variable shadowing in net_client_init Vladimir Sementsov-Ogievskiy
2019-09-23 18:44 ` Eric Blake
2019-09-23 16:12 ` [RFC v2 6/9] scripts: add coccinelle script to use auto propagated errp Vladimir Sementsov-Ogievskiy
2019-09-23 20:05 ` Eric Blake
2019-09-23 21:29 ` Eric Blake
2019-09-24 10:35 ` Vladimir Sementsov-Ogievskiy
2019-09-23 16:12 ` [RFC v2 8/9] fix-compilation: empty goto Vladimir Sementsov-Ogievskiy
2019-09-23 16:12 ` [RFC v2 9/9] fix-compilation: includes Vladimir Sementsov-Ogievskiy
2019-09-23 19:47 ` [RFC v2 0/9] error: auto propagated local_err Eric Blake
2019-09-24 14:12 ` Vladimir Sementsov-Ogievskiy
2019-09-24 15:28 ` Eric Blake
2019-09-24 15:44 ` Vladimir Sementsov-Ogievskiy
2019-09-24 15:46 ` Vladimir Sementsov-Ogievskiy
2019-09-24 15:49 ` Vladimir Sementsov-Ogievskiy
2019-09-24 16:10 ` Vladimir Sementsov-Ogievskiy
[not found] ` <20190923161231.22028-8-vsementsov@virtuozzo.com>
2019-09-23 20:30 ` Eric Blake [this message]
2019-09-24 7:54 ` [RFC v2 7/9] Use auto-propagated errp 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=59c5ccc7-3d4c-9613-fcd3-97642c1394cd@redhat.com \
--to=eblake@redhat.com \
--cc=Andrew.Baumann@microsoft.com \
--cc=akrowiak@linux.ibm.com \
--cc=alex.williamson@redhat.com \
--cc=alistair@alistair23.me \
--cc=amarkovic@wavecomp.com \
--cc=amit@kernel.org \
--cc=andrew@aj.id.au \
--cc=anthony.perard@citrix.com \
--cc=antonynpavlov@gmail.com \
--cc=arei.gonglei@huawei.com \
--cc=ari@tuxera.com \
--cc=arikalo@wavecomp.com \
--cc=armbru@redhat.com \
--cc=atar4qemu@gmail.com \
--cc=aurelien@aurel32.net \
--cc=b.galvani@gmail.com \
--cc=berrange@redhat.com \
--cc=berto@igalia.com \
--cc=borntraeger@de.ibm.com \
--cc=clg@kaod.org \
--cc=codyprime@gmail.com \
--cc=cohuck@redhat.com \
--cc=crwulff@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=den@openvz.org \
--cc=dgilbert@redhat.com \
--cc=dillaman@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=ehabkost@redhat.com \
--cc=eric.auger@redhat.com \
--cc=fam@euphon.net \
--cc=farman@linux.ibm.com \
--cc=g.lettieri@iet.unipi.it \
--cc=green@moxielogic.com \
--cc=groug@kaod.org \
--cc=gxt@mprc.pku.edu.cn \
--cc=hare@suse.com \
--cc=hpoussin@reactos.org \
--cc=imammedo@redhat.com \
--cc=integration@gluster.org \
--cc=jan.kiszka@siemens.com \
--cc=jasowang@redhat.com \
--cc=jcd@tribudubois.net \
--cc=jcmvbkbc@gmail.com \
--cc=joel@jms.id.au \
--cc=jsnow@redhat.com \
--cc=kbastian@mail.uni-paderborn.de \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lersek@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=marex@denx.de \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=mdroth@linux.vnet.ibm.com \
--cc=michael@walle.cc \
--cc=mreitz@redhat.com \
--cc=mst@redhat.com \
--cc=namei.unix@gmail.com \
--cc=palmer@sifive.com \
--cc=pasic@linux.ibm.com \
--cc=paul.durrant@citrix.com \
--cc=pavel.dovgaluk@ispras.ru \
--cc=pbonzini@redhat.com \
--cc=pburton@wavecomp.com \
--cc=peter.chubb@nicta.com.au \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--cc=pl@kamp.de \
--cc=pmorel@linux.ibm.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=quintela@redhat.com \
--cc=rizzo@iet.unipi.it \
--cc=rjones@redhat.com \
--cc=ronniesahlberg@gmail.com \
--cc=rth@twiddle.net \
--cc=sagark@eecs.berkeley.edu \
--cc=samuel.thibault@ens-lyon.org \
--cc=sheepdog@lists.wpkg.org \
--cc=shorne@gmail.com \
--cc=sstabellini@kernel.org \
--cc=stefanb@linux.ibm.com \
--cc=stefanha@redhat.com \
--cc=sundeep.lkml@gmail.com \
--cc=sw@weilnetz.de \
--cc=thuth@redhat.com \
--cc=v.maffione@gmail.com \
--cc=vsementsov@virtuozzo.com \
--cc=walling@linux.ibm.com \
--cc=wencongyang2@huawei.com \
--cc=xen-devel@lists.xenproject.org \
--cc=xiaoguangrong.eric@gmail.com \
--cc=xiechanglong.d@gmail.com \
--cc=zhang.zhanghailiang@huawei.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).