@@ -195,14 +195,14 @@ static const BlockDevOps xen_block_dev_ops = {
195
195
196
196
static void xen_block_realize (XenDevice * xendev , Error * * errp )
197
197
{
198
+ ERRP_GUARD ();
198
199
XenBlockDevice * blockdev = XEN_BLOCK_DEVICE (xendev );
199
200
XenBlockDeviceClass * blockdev_class =
200
201
XEN_BLOCK_DEVICE_GET_CLASS (xendev );
201
202
const char * type = object_get_typename (OBJECT (blockdev ));
202
203
XenBlockVdev * vdev = & blockdev -> props .vdev ;
203
204
BlockConf * conf = & blockdev -> props .conf ;
204
205
BlockBackend * blk = conf -> blk ;
205
- Error * local_err = NULL ;
206
206
207
207
if (vdev -> type == XEN_BLOCK_VDEV_TYPE_INVALID ) {
208
208
error_setg (errp , "vdev property not set" );
@@ -212,9 +212,8 @@ static void xen_block_realize(XenDevice *xendev, Error **errp)
212
212
trace_xen_block_realize (type , vdev -> disk , vdev -> partition );
213
213
214
214
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 ) {
218
217
return ;
219
218
}
220
219
}
@@ -280,8 +279,8 @@ static void xen_block_frontend_changed(XenDevice *xendev,
280
279
enum xenbus_state frontend_state ,
281
280
Error * * errp )
282
281
{
282
+ ERRP_GUARD ();
283
283
enum xenbus_state backend_state = xen_device_backend_get_state (xendev );
284
- Error * local_err = NULL ;
285
284
286
285
switch (frontend_state ) {
287
286
case XenbusStateInitialised :
@@ -290,15 +289,13 @@ static void xen_block_frontend_changed(XenDevice *xendev,
290
289
break ;
291
290
}
292
291
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 ) {
296
294
break ;
297
295
}
298
296
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 ) {
302
299
break ;
303
300
}
304
301
@@ -311,9 +308,8 @@ static void xen_block_frontend_changed(XenDevice *xendev,
311
308
312
309
case XenbusStateClosed :
313
310
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 ) {
317
313
break ;
318
314
}
319
315
@@ -665,9 +661,9 @@ static void xen_block_blockdev_del(const char *node_name, Error **errp)
665
661
static char * xen_block_blockdev_add (const char * id , QDict * qdict ,
666
662
Error * * errp )
667
663
{
664
+ ERRP_GUARD ();
668
665
const char * driver = qdict_get_try_str (qdict , "driver" );
669
666
BlockdevOptions * options = NULL ;
670
- Error * local_err = NULL ;
671
667
char * node_name ;
672
668
Visitor * v ;
673
669
@@ -688,10 +684,9 @@ static char *xen_block_blockdev_add(const char *id, QDict *qdict,
688
684
goto fail ;
689
685
}
690
686
691
- qmp_blockdev_add (options , & local_err );
687
+ qmp_blockdev_add (options , errp );
692
688
693
- if (local_err ) {
694
- error_propagate (errp , local_err );
689
+ if (* errp ) {
695
690
goto fail ;
696
691
}
697
692
@@ -710,14 +705,12 @@ static char *xen_block_blockdev_add(const char *id, QDict *qdict,
710
705
711
706
static void xen_block_drive_destroy (XenBlockDrive * drive , Error * * errp )
712
707
{
708
+ ERRP_GUARD ();
713
709
char * node_name = drive -> node_name ;
714
710
715
711
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 ) {
721
714
return ;
722
715
}
723
716
g_free (node_name );
@@ -731,14 +724,14 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
731
724
const char * device_type ,
732
725
QDict * opts , Error * * errp )
733
726
{
727
+ ERRP_GUARD ();
734
728
const char * params = qdict_get_try_str (opts , "params" );
735
729
const char * mode = qdict_get_try_str (opts , "mode" );
736
730
const char * direct_io_safe = qdict_get_try_str (opts , "direct-io-safe" );
737
731
const char * discard_enable = qdict_get_try_str (opts , "discard-enable" );
738
732
char * driver = NULL ;
739
733
char * filename = NULL ;
740
734
XenBlockDrive * drive = NULL ;
741
- Error * local_err = NULL ;
742
735
QDict * file_layer ;
743
736
QDict * driver_layer ;
744
737
@@ -817,13 +810,12 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
817
810
818
811
g_assert (!drive -> node_name );
819
812
drive -> node_name = xen_block_blockdev_add (drive -> id , driver_layer ,
820
- & local_err );
813
+ errp );
821
814
822
815
qobject_unref (driver_layer );
823
816
824
817
done :
825
- if (local_err ) {
826
- error_propagate (errp , local_err );
818
+ if (* errp ) {
827
819
xen_block_drive_destroy (drive , NULL );
828
820
return NULL ;
829
821
}
@@ -848,8 +840,8 @@ static void xen_block_iothread_destroy(XenBlockIOThread *iothread,
848
840
static XenBlockIOThread * xen_block_iothread_create (const char * id ,
849
841
Error * * errp )
850
842
{
843
+ ERRP_GUARD ();
851
844
XenBlockIOThread * iothread = g_new (XenBlockIOThread , 1 );
852
- Error * local_err = NULL ;
853
845
QDict * opts ;
854
846
QObject * ret_data = NULL ;
855
847
@@ -858,13 +850,11 @@ static XenBlockIOThread *xen_block_iothread_create(const char *id,
858
850
opts = qdict_new ();
859
851
qdict_put_str (opts , "qom-type" , TYPE_IOTHREAD );
860
852
qdict_put_str (opts , "id" , id );
861
- qmp_object_add (opts , & ret_data , & local_err );
853
+ qmp_object_add (opts , & ret_data , errp );
862
854
qobject_unref (opts );
863
855
qobject_unref (ret_data );
864
856
865
- if (local_err ) {
866
- error_propagate (errp , local_err );
867
-
857
+ if (* errp ) {
868
858
g_free (iothread -> id );
869
859
g_free (iothread );
870
860
return NULL ;
@@ -876,14 +866,14 @@ static XenBlockIOThread *xen_block_iothread_create(const char *id,
876
866
static void xen_block_device_create (XenBackendInstance * backend ,
877
867
QDict * opts , Error * * errp )
878
868
{
869
+ ERRP_GUARD ();
879
870
XenBus * xenbus = xen_backend_get_bus (backend );
880
871
const char * name = xen_backend_get_name (backend );
881
872
unsigned long number ;
882
873
const char * vdev , * device_type ;
883
874
XenBlockDrive * drive = NULL ;
884
875
XenBlockIOThread * iothread = NULL ;
885
876
XenDevice * xendev = NULL ;
886
- Error * local_err = NULL ;
887
877
const char * type ;
888
878
XenBlockDevice * blockdev ;
889
879
@@ -915,49 +905,45 @@ static void xen_block_device_create(XenBackendInstance *backend,
915
905
goto fail ;
916
906
}
917
907
918
- drive = xen_block_drive_create (vdev , device_type , opts , & local_err );
908
+ drive = xen_block_drive_create (vdev , device_type , opts , errp );
919
909
if (!drive ) {
920
- error_propagate_prepend (errp , local_err , "failed to create drive: " );
910
+ error_prepend (errp , "failed to create drive: " );
921
911
goto fail ;
922
912
}
923
913
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: " );
928
917
goto fail ;
929
918
}
930
919
931
920
xendev = XEN_DEVICE (qdev_new (type ));
932
921
blockdev = XEN_BLOCK_DEVICE (xendev );
933
922
934
923
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': " );
937
926
goto fail ;
938
927
}
939
928
940
929
if (!object_property_set_str (OBJECT (xendev ), "drive" ,
941
930
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': " );
944
933
goto fail ;
945
934
}
946
935
947
936
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': " );
951
939
goto fail ;
952
940
}
953
941
954
942
blockdev -> iothread = iothread ;
955
943
blockdev -> drive = drive ;
956
944
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 );
961
947
goto fail ;
962
948
}
963
949
@@ -981,31 +967,29 @@ static void xen_block_device_create(XenBackendInstance *backend,
981
967
static void xen_block_device_destroy (XenBackendInstance * backend ,
982
968
Error * * errp )
983
969
{
970
+ ERRP_GUARD ();
984
971
XenDevice * xendev = xen_backend_get_device (backend );
985
972
XenBlockDevice * blockdev = XEN_BLOCK_DEVICE (xendev );
986
973
XenBlockVdev * vdev = & blockdev -> props .vdev ;
987
974
XenBlockDrive * drive = blockdev -> drive ;
988
975
XenBlockIOThread * iothread = blockdev -> iothread ;
989
- Error * local_err = NULL ;
990
976
991
977
trace_xen_block_device_destroy (vdev -> number );
992
978
993
979
object_unparent (OBJECT (xendev ));
994
980
995
981
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: " );
1000
985
return ;
1001
986
}
1002
987
}
1003
988
1004
989
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: " );
1009
993
return ;
1010
994
}
1011
995
}
0 commit comments