mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
devlink: Move health reporter recovery abort logic to a separate function
Extract the health reporter recovery abort logic into a separate function devlink_health_recover_abort(). The function encapsulates the conditions for aborting recovery: - When auto-recovery is disabled - When previous error wasn't recovered - When within the grace period after last recovery Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com> Reviewed-by: Carolina Jubran <cjubran@nvidia.com> Signed-off-by: Mark Bloch <mbloch@nvidia.com> Link: https://patch.msgid.link/20250824084354.533182-3-mbloch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
d2b0073745
commit
20597fb943
@ -586,12 +586,33 @@ dump_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool
|
||||
devlink_health_recover_abort(struct devlink_health_reporter *reporter,
|
||||
enum devlink_health_reporter_state prev_state)
|
||||
{
|
||||
unsigned long recover_ts_threshold;
|
||||
|
||||
if (!reporter->auto_recover)
|
||||
return false;
|
||||
|
||||
/* abort if the previous error wasn't recovered */
|
||||
if (prev_state != DEVLINK_HEALTH_REPORTER_STATE_HEALTHY)
|
||||
return true;
|
||||
|
||||
recover_ts_threshold = reporter->last_recovery_ts +
|
||||
msecs_to_jiffies(reporter->graceful_period);
|
||||
if (reporter->last_recovery_ts && reporter->recovery_count &&
|
||||
time_is_after_jiffies(recover_ts_threshold))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int devlink_health_report(struct devlink_health_reporter *reporter,
|
||||
const char *msg, void *priv_ctx)
|
||||
{
|
||||
enum devlink_health_reporter_state prev_health_state;
|
||||
struct devlink *devlink = reporter->devlink;
|
||||
unsigned long recover_ts_threshold;
|
||||
int ret;
|
||||
|
||||
/* write a log message of the current error */
|
||||
@ -602,13 +623,7 @@ int devlink_health_report(struct devlink_health_reporter *reporter,
|
||||
reporter->health_state = DEVLINK_HEALTH_REPORTER_STATE_ERROR;
|
||||
devlink_recover_notify(reporter, DEVLINK_CMD_HEALTH_REPORTER_RECOVER);
|
||||
|
||||
/* abort if the previous error wasn't recovered */
|
||||
recover_ts_threshold = reporter->last_recovery_ts +
|
||||
msecs_to_jiffies(reporter->graceful_period);
|
||||
if (reporter->auto_recover &&
|
||||
(prev_health_state != DEVLINK_HEALTH_REPORTER_STATE_HEALTHY ||
|
||||
(reporter->last_recovery_ts && reporter->recovery_count &&
|
||||
time_is_after_jiffies(recover_ts_threshold)))) {
|
||||
if (devlink_health_recover_abort(reporter, prev_health_state)) {
|
||||
trace_devlink_health_recover_aborted(devlink,
|
||||
reporter->ops->name,
|
||||
reporter->health_state,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user