mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 17:41:44 +00:00
devlink: add devink notification when reporter update health state
add a devlink notification when reporter update the health state. Signed-off-by: Vikas Gupta <vikas.gupta@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6181e5cb75
commit
97ff3bd37f
@ -4843,23 +4843,6 @@ devlink_health_reporter_destroy(struct devlink_health_reporter *reporter)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devlink_health_reporter_destroy);
|
EXPORT_SYMBOL_GPL(devlink_health_reporter_destroy);
|
||||||
|
|
||||||
void
|
|
||||||
devlink_health_reporter_state_update(struct devlink_health_reporter *reporter,
|
|
||||||
enum devlink_health_reporter_state state)
|
|
||||||
{
|
|
||||||
if (WARN_ON(state != DEVLINK_HEALTH_REPORTER_STATE_HEALTHY &&
|
|
||||||
state != DEVLINK_HEALTH_REPORTER_STATE_ERROR))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (reporter->health_state == state)
|
|
||||||
return;
|
|
||||||
|
|
||||||
reporter->health_state = state;
|
|
||||||
trace_devlink_health_reporter_state_update(reporter->devlink,
|
|
||||||
reporter->ops->name, state);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(devlink_health_reporter_state_update);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
devlink_health_reporter_recovery_done(struct devlink_health_reporter *reporter)
|
devlink_health_reporter_recovery_done(struct devlink_health_reporter *reporter)
|
||||||
{
|
{
|
||||||
@ -5097,6 +5080,48 @@ genlmsg_cancel:
|
|||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void devlink_recover_notify(struct devlink_health_reporter *reporter,
|
||||||
|
enum devlink_command cmd)
|
||||||
|
{
|
||||||
|
struct sk_buff *msg;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
WARN_ON(cmd != DEVLINK_CMD_HEALTH_REPORTER_RECOVER);
|
||||||
|
|
||||||
|
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||||
|
if (!msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
err = devlink_nl_health_reporter_fill(msg, reporter->devlink,
|
||||||
|
reporter, cmd, 0, 0, 0);
|
||||||
|
if (err) {
|
||||||
|
nlmsg_free(msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
genlmsg_multicast_netns(&devlink_nl_family,
|
||||||
|
devlink_net(reporter->devlink),
|
||||||
|
msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
devlink_health_reporter_state_update(struct devlink_health_reporter *reporter,
|
||||||
|
enum devlink_health_reporter_state state)
|
||||||
|
{
|
||||||
|
if (WARN_ON(state != DEVLINK_HEALTH_REPORTER_STATE_HEALTHY &&
|
||||||
|
state != DEVLINK_HEALTH_REPORTER_STATE_ERROR))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (reporter->health_state == state)
|
||||||
|
return;
|
||||||
|
|
||||||
|
reporter->health_state = state;
|
||||||
|
trace_devlink_health_reporter_state_update(reporter->devlink,
|
||||||
|
reporter->ops->name, state);
|
||||||
|
devlink_recover_notify(reporter, DEVLINK_CMD_HEALTH_REPORTER_RECOVER);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devlink_health_reporter_state_update);
|
||||||
|
|
||||||
static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb,
|
static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb,
|
||||||
struct genl_info *info)
|
struct genl_info *info)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user