@@ -7757,6 +7757,7 @@ int devlink_health_report(struct devlink_health_reporter *reporter,
7757
7757
enum devlink_health_reporter_state prev_health_state ;
7758
7758
struct devlink * devlink = reporter -> devlink ;
7759
7759
unsigned long recover_ts_threshold ;
7760
+ int ret ;
7760
7761
7761
7762
/* write a log message of the current error */
7762
7763
WARN_ON (!msg );
@@ -7790,11 +7791,14 @@ int devlink_health_report(struct devlink_health_reporter *reporter,
7790
7791
mutex_unlock (& reporter -> dump_lock );
7791
7792
}
7792
7793
7793
- if (reporter -> auto_recover )
7794
- return devlink_health_reporter_recover (reporter ,
7795
- priv_ctx , NULL );
7794
+ if (!reporter -> auto_recover )
7795
+ return 0 ;
7796
7796
7797
- return 0 ;
7797
+ devl_lock (devlink );
7798
+ ret = devlink_health_reporter_recover (reporter , priv_ctx , NULL );
7799
+ devl_unlock (devlink );
7800
+
7801
+ return ret ;
7798
7802
}
7799
7803
EXPORT_SYMBOL_GPL (devlink_health_report );
7800
7804
@@ -9469,33 +9473,29 @@ static const struct genl_small_ops devlink_nl_ops[] = {
9469
9473
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP ,
9470
9474
.doit = devlink_nl_cmd_health_reporter_get_doit ,
9471
9475
.dumpit = devlink_nl_cmd_health_reporter_get_dumpit ,
9472
- .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
9473
- DEVLINK_NL_FLAG_NO_LOCK ,
9476
+ .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT ,
9474
9477
/* can be retrieved by unprivileged users */
9475
9478
},
9476
9479
{
9477
9480
.cmd = DEVLINK_CMD_HEALTH_REPORTER_SET ,
9478
9481
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP ,
9479
9482
.doit = devlink_nl_cmd_health_reporter_set_doit ,
9480
9483
.flags = GENL_ADMIN_PERM ,
9481
- .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
9482
- DEVLINK_NL_FLAG_NO_LOCK ,
9484
+ .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT ,
9483
9485
},
9484
9486
{
9485
9487
.cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER ,
9486
9488
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP ,
9487
9489
.doit = devlink_nl_cmd_health_reporter_recover_doit ,
9488
9490
.flags = GENL_ADMIN_PERM ,
9489
- .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
9490
- DEVLINK_NL_FLAG_NO_LOCK ,
9491
+ .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT ,
9491
9492
},
9492
9493
{
9493
9494
.cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE ,
9494
9495
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP ,
9495
9496
.doit = devlink_nl_cmd_health_reporter_diagnose_doit ,
9496
9497
.flags = GENL_ADMIN_PERM ,
9497
- .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
9498
- DEVLINK_NL_FLAG_NO_LOCK ,
9498
+ .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT ,
9499
9499
},
9500
9500
{
9501
9501
.cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET ,
@@ -9509,16 +9509,14 @@ static const struct genl_small_ops devlink_nl_ops[] = {
9509
9509
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP ,
9510
9510
.doit = devlink_nl_cmd_health_reporter_dump_clear_doit ,
9511
9511
.flags = GENL_ADMIN_PERM ,
9512
- .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
9513
- DEVLINK_NL_FLAG_NO_LOCK ,
9512
+ .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT ,
9514
9513
},
9515
9514
{
9516
9515
.cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST ,
9517
9516
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP ,
9518
9517
.doit = devlink_nl_cmd_health_reporter_test_doit ,
9519
9518
.flags = GENL_ADMIN_PERM ,
9520
- .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
9521
- DEVLINK_NL_FLAG_NO_LOCK ,
9519
+ .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT ,
9522
9520
},
9523
9521
{
9524
9522
.cmd = DEVLINK_CMD_FLASH_UPDATE ,
0 commit comments