Skip to content

Commit 97ff3bd

Browse files
vikasbrcmdavem330
authored andcommitted
devlink: add devink notification when reporter update health state
add a devlink notification when reporter update the health state. Signed-off-by: Vikas Gupta <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 6181e5c commit 97ff3bd

File tree

1 file changed

+42
-17
lines changed

1 file changed

+42
-17
lines changed

net/core/devlink.c

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4843,23 +4843,6 @@ devlink_health_reporter_destroy(struct devlink_health_reporter *reporter)
48434843
}
48444844
EXPORT_SYMBOL_GPL(devlink_health_reporter_destroy);
48454845

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-
48634846
void
48644847
devlink_health_reporter_recovery_done(struct devlink_health_reporter *reporter)
48654848
{
@@ -5097,6 +5080,48 @@ devlink_nl_health_reporter_fill(struct sk_buff *msg,
50975080
return -EMSGSIZE;
50985081
}
50995082

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+
51005125
static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb,
51015126
struct genl_info *info)
51025127
{

0 commit comments

Comments
 (0)