@@ -4843,23 +4843,6 @@ devlink_health_reporter_destroy(struct devlink_health_reporter *reporter)
4843
4843
}
4844
4844
EXPORT_SYMBOL_GPL (devlink_health_reporter_destroy );
4845
4845
4846
- void
4847
- devlink_health_reporter_state_update (struct devlink_health_reporter * reporter ,
4848
- enum devlink_health_reporter_state state )
4849
- {
4850
- if (WARN_ON (state != DEVLINK_HEALTH_REPORTER_STATE_HEALTHY &&
4851
- state != DEVLINK_HEALTH_REPORTER_STATE_ERROR ))
4852
- return ;
4853
-
4854
- if (reporter -> health_state == state )
4855
- return ;
4856
-
4857
- reporter -> health_state = state ;
4858
- trace_devlink_health_reporter_state_update (reporter -> devlink ,
4859
- reporter -> ops -> name , state );
4860
- }
4861
- EXPORT_SYMBOL_GPL (devlink_health_reporter_state_update );
4862
-
4863
4846
void
4864
4847
devlink_health_reporter_recovery_done (struct devlink_health_reporter * reporter )
4865
4848
{
@@ -5097,6 +5080,48 @@ devlink_nl_health_reporter_fill(struct sk_buff *msg,
5097
5080
return - EMSGSIZE ;
5098
5081
}
5099
5082
5083
+ static void devlink_recover_notify (struct devlink_health_reporter * reporter ,
5084
+ enum devlink_command cmd )
5085
+ {
5086
+ struct sk_buff * msg ;
5087
+ int err ;
5088
+
5089
+ WARN_ON (cmd != DEVLINK_CMD_HEALTH_REPORTER_RECOVER );
5090
+
5091
+ msg = nlmsg_new (NLMSG_DEFAULT_SIZE , GFP_KERNEL );
5092
+ if (!msg )
5093
+ return ;
5094
+
5095
+ err = devlink_nl_health_reporter_fill (msg , reporter -> devlink ,
5096
+ reporter , cmd , 0 , 0 , 0 );
5097
+ if (err ) {
5098
+ nlmsg_free (msg );
5099
+ return ;
5100
+ }
5101
+
5102
+ genlmsg_multicast_netns (& devlink_nl_family ,
5103
+ devlink_net (reporter -> devlink ),
5104
+ msg , 0 , DEVLINK_MCGRP_CONFIG , GFP_KERNEL );
5105
+ }
5106
+
5107
+ void
5108
+ devlink_health_reporter_state_update (struct devlink_health_reporter * reporter ,
5109
+ enum devlink_health_reporter_state state )
5110
+ {
5111
+ if (WARN_ON (state != DEVLINK_HEALTH_REPORTER_STATE_HEALTHY &&
5112
+ state != DEVLINK_HEALTH_REPORTER_STATE_ERROR ))
5113
+ return ;
5114
+
5115
+ if (reporter -> health_state == state )
5116
+ return ;
5117
+
5118
+ reporter -> health_state = state ;
5119
+ trace_devlink_health_reporter_state_update (reporter -> devlink ,
5120
+ reporter -> ops -> name , state );
5121
+ devlink_recover_notify (reporter , DEVLINK_CMD_HEALTH_REPORTER_RECOVER );
5122
+ }
5123
+ EXPORT_SYMBOL_GPL (devlink_health_reporter_state_update );
5124
+
5100
5125
static int devlink_nl_cmd_health_reporter_get_doit (struct sk_buff * skb ,
5101
5126
struct genl_info * info )
5102
5127
{
0 commit comments