Skip to content

Commit 1de7096

Browse files
Vladimir Sementsov-OgievskiyMarkus Armbruster
authored andcommitted
xen: Use ERRP_GUARD()
If we want to check error after errp-function call, we need to introduce local_err and then propagate it to errp. Instead, use the ERRP_GUARD() macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_GUARD() leaves errp as is if it's not NULL or &error_fatal, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_GUARD() macro. Otherwise, this info will not be added when errp == &error_fatal (the program will exit prior to the error_append_hint() or error_prepend() call). No such cases are being fixed here. This commit is generated by command sed -n '/^X86 Xen CPUs$/,/^$/{s/^F: //p}' MAINTAINERS | \ xargs git ls-files | grep '\.[hc]$' | \ xargs spatch \ --sp-file scripts/coccinelle/errp-guard.cocci \ --macro-file scripts/cocci-macro-file.h \ --in-place --no-show-diff --max-width 80 Reported-by: Kevin Wolf <[email protected]> Reported-by: Greg Kurz <[email protected]> Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> [Commit message tweaked] Signed-off-by: Markus Armbruster <[email protected]> Message-Id: <[email protected]> [ERRP_AUTO_PROPAGATE() renamed to ERRP_GUARD(), and auto-propagated-errp.cocci to errp-guard.cocci. Commit message tweaked again.]
1 parent 795d946 commit 1de7096

File tree

8 files changed

+128
-166
lines changed

8 files changed

+128
-166
lines changed

hw/block/dataplane/xen-block.c

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -723,8 +723,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *dataplane,
723723
unsigned int protocol,
724724
Error **errp)
725725
{
726+
ERRP_GUARD();
726727
XenDevice *xendev = dataplane->xendev;
727-
Error *local_err = NULL;
728728
unsigned int ring_size;
729729
unsigned int i;
730730

@@ -760,19 +760,17 @@ void xen_block_dataplane_start(XenBlockDataPlane *dataplane,
760760
}
761761

762762
xen_device_set_max_grant_refs(xendev, dataplane->nr_ring_ref,
763-
&local_err);
764-
if (local_err) {
765-
error_propagate(errp, local_err);
763+
errp);
764+
if (*errp) {
766765
goto stop;
767766
}
768767

769768
dataplane->sring = xen_device_map_grant_refs(xendev,
770769
dataplane->ring_ref,
771770
dataplane->nr_ring_ref,
772771
PROT_READ | PROT_WRITE,
773-
&local_err);
774-
if (local_err) {
775-
error_propagate(errp, local_err);
772+
errp);
773+
if (*errp) {
776774
goto stop;
777775
}
778776

@@ -805,9 +803,8 @@ void xen_block_dataplane_start(XenBlockDataPlane *dataplane,
805803
dataplane->event_channel =
806804
xen_device_bind_event_channel(xendev, event_channel,
807805
xen_block_dataplane_event, dataplane,
808-
&local_err);
809-
if (local_err) {
810-
error_propagate(errp, local_err);
806+
errp);
807+
if (*errp) {
811808
goto stop;
812809
}
813810

hw/block/xen-block.c

Lines changed: 43 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -195,14 +195,14 @@ static const BlockDevOps xen_block_dev_ops = {
195195

196196
static void xen_block_realize(XenDevice *xendev, Error **errp)
197197
{
198+
ERRP_GUARD();
198199
XenBlockDevice *blockdev = XEN_BLOCK_DEVICE(xendev);
199200
XenBlockDeviceClass *blockdev_class =
200201
XEN_BLOCK_DEVICE_GET_CLASS(xendev);
201202
const char *type = object_get_typename(OBJECT(blockdev));
202203
XenBlockVdev *vdev = &blockdev->props.vdev;
203204
BlockConf *conf = &blockdev->props.conf;
204205
BlockBackend *blk = conf->blk;
205-
Error *local_err = NULL;
206206

207207
if (vdev->type == XEN_BLOCK_VDEV_TYPE_INVALID) {
208208
error_setg(errp, "vdev property not set");
@@ -212,9 +212,8 @@ static void xen_block_realize(XenDevice *xendev, Error **errp)
212212
trace_xen_block_realize(type, vdev->disk, vdev->partition);
213213

214214
if (blockdev_class->realize) {
215-
blockdev_class->realize(blockdev, &local_err);
216-
if (local_err) {
217-
error_propagate(errp, local_err);
215+
blockdev_class->realize(blockdev, errp);
216+
if (*errp) {
218217
return;
219218
}
220219
}
@@ -280,8 +279,8 @@ static void xen_block_frontend_changed(XenDevice *xendev,
280279
enum xenbus_state frontend_state,
281280
Error **errp)
282281
{
282+
ERRP_GUARD();
283283
enum xenbus_state backend_state = xen_device_backend_get_state(xendev);
284-
Error *local_err = NULL;
285284

286285
switch (frontend_state) {
287286
case XenbusStateInitialised:
@@ -290,15 +289,13 @@ static void xen_block_frontend_changed(XenDevice *xendev,
290289
break;
291290
}
292291

293-
xen_block_disconnect(xendev, &local_err);
294-
if (local_err) {
295-
error_propagate(errp, local_err);
292+
xen_block_disconnect(xendev, errp);
293+
if (*errp) {
296294
break;
297295
}
298296

299-
xen_block_connect(xendev, &local_err);
300-
if (local_err) {
301-
error_propagate(errp, local_err);
297+
xen_block_connect(xendev, errp);
298+
if (*errp) {
302299
break;
303300
}
304301

@@ -311,9 +308,8 @@ static void xen_block_frontend_changed(XenDevice *xendev,
311308

312309
case XenbusStateClosed:
313310
case XenbusStateUnknown:
314-
xen_block_disconnect(xendev, &local_err);
315-
if (local_err) {
316-
error_propagate(errp, local_err);
311+
xen_block_disconnect(xendev, errp);
312+
if (*errp) {
317313
break;
318314
}
319315

@@ -665,9 +661,9 @@ static void xen_block_blockdev_del(const char *node_name, Error **errp)
665661
static char *xen_block_blockdev_add(const char *id, QDict *qdict,
666662
Error **errp)
667663
{
664+
ERRP_GUARD();
668665
const char *driver = qdict_get_try_str(qdict, "driver");
669666
BlockdevOptions *options = NULL;
670-
Error *local_err = NULL;
671667
char *node_name;
672668
Visitor *v;
673669

@@ -688,10 +684,9 @@ static char *xen_block_blockdev_add(const char *id, QDict *qdict,
688684
goto fail;
689685
}
690686

691-
qmp_blockdev_add(options, &local_err);
687+
qmp_blockdev_add(options, errp);
692688

693-
if (local_err) {
694-
error_propagate(errp, local_err);
689+
if (*errp) {
695690
goto fail;
696691
}
697692

@@ -710,14 +705,12 @@ static char *xen_block_blockdev_add(const char *id, QDict *qdict,
710705

711706
static void xen_block_drive_destroy(XenBlockDrive *drive, Error **errp)
712707
{
708+
ERRP_GUARD();
713709
char *node_name = drive->node_name;
714710

715711
if (node_name) {
716-
Error *local_err = NULL;
717-
718-
xen_block_blockdev_del(node_name, &local_err);
719-
if (local_err) {
720-
error_propagate(errp, local_err);
712+
xen_block_blockdev_del(node_name, errp);
713+
if (*errp) {
721714
return;
722715
}
723716
g_free(node_name);
@@ -731,14 +724,14 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
731724
const char *device_type,
732725
QDict *opts, Error **errp)
733726
{
727+
ERRP_GUARD();
734728
const char *params = qdict_get_try_str(opts, "params");
735729
const char *mode = qdict_get_try_str(opts, "mode");
736730
const char *direct_io_safe = qdict_get_try_str(opts, "direct-io-safe");
737731
const char *discard_enable = qdict_get_try_str(opts, "discard-enable");
738732
char *driver = NULL;
739733
char *filename = NULL;
740734
XenBlockDrive *drive = NULL;
741-
Error *local_err = NULL;
742735
QDict *file_layer;
743736
QDict *driver_layer;
744737

@@ -817,13 +810,12 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
817810

818811
g_assert(!drive->node_name);
819812
drive->node_name = xen_block_blockdev_add(drive->id, driver_layer,
820-
&local_err);
813+
errp);
821814

822815
qobject_unref(driver_layer);
823816

824817
done:
825-
if (local_err) {
826-
error_propagate(errp, local_err);
818+
if (*errp) {
827819
xen_block_drive_destroy(drive, NULL);
828820
return NULL;
829821
}
@@ -848,8 +840,8 @@ static void xen_block_iothread_destroy(XenBlockIOThread *iothread,
848840
static XenBlockIOThread *xen_block_iothread_create(const char *id,
849841
Error **errp)
850842
{
843+
ERRP_GUARD();
851844
XenBlockIOThread *iothread = g_new(XenBlockIOThread, 1);
852-
Error *local_err = NULL;
853845
QDict *opts;
854846
QObject *ret_data = NULL;
855847

@@ -858,13 +850,11 @@ static XenBlockIOThread *xen_block_iothread_create(const char *id,
858850
opts = qdict_new();
859851
qdict_put_str(opts, "qom-type", TYPE_IOTHREAD);
860852
qdict_put_str(opts, "id", id);
861-
qmp_object_add(opts, &ret_data, &local_err);
853+
qmp_object_add(opts, &ret_data, errp);
862854
qobject_unref(opts);
863855
qobject_unref(ret_data);
864856

865-
if (local_err) {
866-
error_propagate(errp, local_err);
867-
857+
if (*errp) {
868858
g_free(iothread->id);
869859
g_free(iothread);
870860
return NULL;
@@ -876,14 +866,14 @@ static XenBlockIOThread *xen_block_iothread_create(const char *id,
876866
static void xen_block_device_create(XenBackendInstance *backend,
877867
QDict *opts, Error **errp)
878868
{
869+
ERRP_GUARD();
879870
XenBus *xenbus = xen_backend_get_bus(backend);
880871
const char *name = xen_backend_get_name(backend);
881872
unsigned long number;
882873
const char *vdev, *device_type;
883874
XenBlockDrive *drive = NULL;
884875
XenBlockIOThread *iothread = NULL;
885876
XenDevice *xendev = NULL;
886-
Error *local_err = NULL;
887877
const char *type;
888878
XenBlockDevice *blockdev;
889879

@@ -915,49 +905,45 @@ static void xen_block_device_create(XenBackendInstance *backend,
915905
goto fail;
916906
}
917907

918-
drive = xen_block_drive_create(vdev, device_type, opts, &local_err);
908+
drive = xen_block_drive_create(vdev, device_type, opts, errp);
919909
if (!drive) {
920-
error_propagate_prepend(errp, local_err, "failed to create drive: ");
910+
error_prepend(errp, "failed to create drive: ");
921911
goto fail;
922912
}
923913

924-
iothread = xen_block_iothread_create(vdev, &local_err);
925-
if (local_err) {
926-
error_propagate_prepend(errp, local_err,
927-
"failed to create iothread: ");
914+
iothread = xen_block_iothread_create(vdev, errp);
915+
if (*errp) {
916+
error_prepend(errp, "failed to create iothread: ");
928917
goto fail;
929918
}
930919

931920
xendev = XEN_DEVICE(qdev_new(type));
932921
blockdev = XEN_BLOCK_DEVICE(xendev);
933922

934923
if (!object_property_set_str(OBJECT(xendev), "vdev", vdev,
935-
&local_err)) {
936-
error_propagate_prepend(errp, local_err, "failed to set 'vdev': ");
924+
errp)) {
925+
error_prepend(errp, "failed to set 'vdev': ");
937926
goto fail;
938927
}
939928

940929
if (!object_property_set_str(OBJECT(xendev), "drive",
941930
xen_block_drive_get_node_name(drive),
942-
&local_err)) {
943-
error_propagate_prepend(errp, local_err, "failed to set 'drive': ");
931+
errp)) {
932+
error_prepend(errp, "failed to set 'drive': ");
944933
goto fail;
945934
}
946935

947936
if (!object_property_set_str(OBJECT(xendev), "iothread", iothread->id,
948-
&local_err)) {
949-
error_propagate_prepend(errp, local_err,
950-
"failed to set 'iothread': ");
937+
errp)) {
938+
error_prepend(errp, "failed to set 'iothread': ");
951939
goto fail;
952940
}
953941

954942
blockdev->iothread = iothread;
955943
blockdev->drive = drive;
956944

957-
if (!qdev_realize_and_unref(DEVICE(xendev), BUS(xenbus), &local_err)) {
958-
error_propagate_prepend(errp, local_err,
959-
"realization of device %s failed: ",
960-
type);
945+
if (!qdev_realize_and_unref(DEVICE(xendev), BUS(xenbus), errp)) {
946+
error_prepend(errp, "realization of device %s failed: ", type);
961947
goto fail;
962948
}
963949

@@ -981,31 +967,29 @@ static void xen_block_device_create(XenBackendInstance *backend,
981967
static void xen_block_device_destroy(XenBackendInstance *backend,
982968
Error **errp)
983969
{
970+
ERRP_GUARD();
984971
XenDevice *xendev = xen_backend_get_device(backend);
985972
XenBlockDevice *blockdev = XEN_BLOCK_DEVICE(xendev);
986973
XenBlockVdev *vdev = &blockdev->props.vdev;
987974
XenBlockDrive *drive = blockdev->drive;
988975
XenBlockIOThread *iothread = blockdev->iothread;
989-
Error *local_err = NULL;
990976

991977
trace_xen_block_device_destroy(vdev->number);
992978

993979
object_unparent(OBJECT(xendev));
994980

995981
if (iothread) {
996-
xen_block_iothread_destroy(iothread, &local_err);
997-
if (local_err) {
998-
error_propagate_prepend(errp, local_err,
999-
"failed to destroy iothread: ");
982+
xen_block_iothread_destroy(iothread, errp);
983+
if (*errp) {
984+
error_prepend(errp, "failed to destroy iothread: ");
1000985
return;
1001986
}
1002987
}
1003988

1004989
if (drive) {
1005-
xen_block_drive_destroy(drive, &local_err);
1006-
if (local_err) {
1007-
error_propagate_prepend(errp, local_err,
1008-
"failed to destroy drive: ");
990+
xen_block_drive_destroy(drive, errp);
991+
if (*errp) {
992+
error_prepend(errp, "failed to destroy drive: ");
1009993
return;
1010994
}
1011995
}

hw/pci-host/xen_igd_pt.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,16 @@ static void host_pci_config_read(int pos, int len, uint32_t *val, Error **errp)
7979

8080
static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp)
8181
{
82+
ERRP_GUARD();
8283
uint32_t val = 0;
8384
size_t i;
8485
int pos, len;
85-
Error *local_err = NULL;
8686

8787
for (i = 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) {
8888
pos = igd_host_bridge_infos[i].offset;
8989
len = igd_host_bridge_infos[i].len;
90-
host_pci_config_read(pos, len, &val, &local_err);
91-
if (local_err) {
92-
error_propagate(errp, local_err);
90+
host_pci_config_read(pos, len, &val, errp);
91+
if (*errp) {
9392
return;
9493
}
9594
pci_default_write_config(pci_dev, pos, val, len);

hw/xen/xen-backend.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ static void xen_backend_list_remove(XenBackendInstance *backend)
9898
void xen_backend_device_create(XenBus *xenbus, const char *type,
9999
const char *name, QDict *opts, Error **errp)
100100
{
101+
ERRP_GUARD();
101102
const XenBackendImpl *impl = xen_backend_table_lookup(type);
102103
XenBackendInstance *backend;
103-
Error *local_error = NULL;
104104

105105
if (!impl) {
106106
return;
@@ -110,9 +110,8 @@ void xen_backend_device_create(XenBus *xenbus, const char *type,
110110
backend->xenbus = xenbus;
111111
backend->name = g_strdup(name);
112112

113-
impl->create(backend, opts, &local_error);
114-
if (local_error) {
115-
error_propagate(errp, local_error);
113+
impl->create(backend, opts, errp);
114+
if (*errp) {
116115
g_free(backend->name);
117116
g_free(backend);
118117
return;

0 commit comments

Comments
 (0)