266 lines
8.0 KiB
Diff
266 lines
8.0 KiB
Diff
From 705578c3b9d794097233aa66010cf67b2a444716 Mon Sep 17 00:00:00 2001
|
|
From: Michal Sekletar <msekleta@redhat.com>
|
|
Date: Mon, 4 Oct 2021 17:51:52 +0200
|
|
Subject: [PATCH] core: rename/generalize UNIT(u)->test_start_limit() hook
|
|
|
|
Up until now the main reason why we didn't proceed with starting the
|
|
unit was exceed start limit burst. However, for unit types like mounts
|
|
the other reason could be effective ratelimit on /proc/self/mountinfo
|
|
event source. That means our mount unit state may not reflect current
|
|
kernel state. Hence, we need to attempt to re-run the start job again
|
|
after ratelimit on event source expires.
|
|
|
|
As we will be introducing another reason than start limit let's rename
|
|
the virtual function that implements the check.
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd-stable/commit/705578c3b9d794097233aa66010cf67b2a444716
|
|
---
|
|
src/core/automount.c | 6 +++---
|
|
src/core/mount.c | 6 +++---
|
|
src/core/path.c | 6 +++---
|
|
src/core/service.c | 6 +++---
|
|
src/core/socket.c | 6 +++---
|
|
src/core/swap.c | 6 +++---
|
|
src/core/timer.c | 6 +++---
|
|
src/core/unit.c | 6 +++---
|
|
src/core/unit.h | 2 +-
|
|
9 files changed, 25 insertions(+), 25 deletions(-)
|
|
|
|
diff --git a/src/core/automount.c b/src/core/automount.c
|
|
index de470935c7..1fc3fc0f82 100644
|
|
--- a/src/core/automount.c
|
|
+++ b/src/core/automount.c
|
|
@@ -1063,7 +1063,7 @@ static bool automount_supported(void) {
|
|
return supported;
|
|
}
|
|
|
|
-static int automount_test_start_limit(Unit *u) {
|
|
+static int automount_can_start(Unit *u) {
|
|
Automount *a = AUTOMOUNT(u);
|
|
int r;
|
|
|
|
@@ -1075,7 +1075,7 @@ static int automount_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const automount_result_table[_AUTOMOUNT_RESULT_MAX] = {
|
|
@@ -1142,5 +1142,5 @@ const UnitVTable automount_vtable = {
|
|
},
|
|
},
|
|
|
|
- .test_start_limit = automount_test_start_limit,
|
|
+ .can_start = automount_can_start,
|
|
};
|
|
diff --git a/src/core/mount.c b/src/core/mount.c
|
|
index 321c7986b3..2ebae752b6 100644
|
|
--- a/src/core/mount.c
|
|
+++ b/src/core/mount.c
|
|
@@ -2135,7 +2135,7 @@ static int mount_can_clean(Unit *u, ExecCleanMask *ret) {
|
|
return exec_context_get_clean_mask(&m->exec_context, ret);
|
|
}
|
|
|
|
-static int mount_test_start_limit(Unit *u) {
|
|
+static int mount_can_start(Unit *u) {
|
|
Mount *m = MOUNT(u);
|
|
int r;
|
|
|
|
@@ -2147,7 +2147,7 @@ static int mount_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const mount_exec_command_table[_MOUNT_EXEC_COMMAND_MAX] = {
|
|
@@ -2248,5 +2248,5 @@ const UnitVTable mount_vtable = {
|
|
},
|
|
},
|
|
|
|
- .test_start_limit = mount_test_start_limit,
|
|
+ .can_start = mount_can_start,
|
|
};
|
|
diff --git a/src/core/path.c b/src/core/path.c
|
|
index 0a3d86e9db..cdab9dcf8c 100644
|
|
--- a/src/core/path.c
|
|
+++ b/src/core/path.c
|
|
@@ -811,7 +811,7 @@ static void path_reset_failed(Unit *u) {
|
|
p->result = PATH_SUCCESS;
|
|
}
|
|
|
|
-static int path_test_start_limit(Unit *u) {
|
|
+static int path_can_start(Unit *u) {
|
|
Path *p = PATH(u);
|
|
int r;
|
|
|
|
@@ -823,7 +823,7 @@ static int path_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const path_type_table[_PATH_TYPE_MAX] = {
|
|
@@ -882,5 +882,5 @@ const UnitVTable path_vtable = {
|
|
|
|
.bus_set_property = bus_path_set_property,
|
|
|
|
- .test_start_limit = path_test_start_limit,
|
|
+ .can_start = path_can_start,
|
|
};
|
|
diff --git a/src/core/service.c b/src/core/service.c
|
|
index 83cbc9f489..17c19a2c4a 100644
|
|
--- a/src/core/service.c
|
|
+++ b/src/core/service.c
|
|
@@ -4482,7 +4482,7 @@ static const char *service_finished_job(Unit *u, JobType t, JobResult result) {
|
|
return NULL;
|
|
}
|
|
|
|
-static int service_test_start_limit(Unit *u) {
|
|
+static int service_can_start(Unit *u) {
|
|
Service *s = SERVICE(u);
|
|
int r;
|
|
|
|
@@ -4495,7 +4495,7 @@ static int service_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
|
|
@@ -4669,5 +4669,5 @@ const UnitVTable service_vtable = {
|
|
.finished_job = service_finished_job,
|
|
},
|
|
|
|
- .test_start_limit = service_test_start_limit,
|
|
+ .can_start = service_can_start,
|
|
};
|
|
diff --git a/src/core/socket.c b/src/core/socket.c
|
|
index 6534311bef..f265aab594 100644
|
|
--- a/src/core/socket.c
|
|
+++ b/src/core/socket.c
|
|
@@ -3427,7 +3427,7 @@ static int socket_can_clean(Unit *u, ExecCleanMask *ret) {
|
|
return exec_context_get_clean_mask(&s->exec_context, ret);
|
|
}
|
|
|
|
-static int socket_test_start_limit(Unit *u) {
|
|
+static int socket_can_start(Unit *u) {
|
|
Socket *s = SOCKET(u);
|
|
int r;
|
|
|
|
@@ -3439,7 +3439,7 @@ static int socket_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const socket_exec_command_table[_SOCKET_EXEC_COMMAND_MAX] = {
|
|
@@ -3570,5 +3570,5 @@ const UnitVTable socket_vtable = {
|
|
},
|
|
},
|
|
|
|
- .test_start_limit = socket_test_start_limit,
|
|
+ .can_start = socket_can_start,
|
|
};
|
|
diff --git a/src/core/swap.c b/src/core/swap.c
|
|
index de72ac9232..3b28235194 100644
|
|
--- a/src/core/swap.c
|
|
+++ b/src/core/swap.c
|
|
@@ -1581,7 +1581,7 @@ static int swap_can_clean(Unit *u, ExecCleanMask *ret) {
|
|
return exec_context_get_clean_mask(&s->exec_context, ret);
|
|
}
|
|
|
|
-static int swap_test_start_limit(Unit *u) {
|
|
+static int swap_can_start(Unit *u) {
|
|
Swap *s = SWAP(u);
|
|
int r;
|
|
|
|
@@ -1593,7 +1593,7 @@ static int swap_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const swap_exec_command_table[_SWAP_EXEC_COMMAND_MAX] = {
|
|
@@ -1692,5 +1692,5 @@ const UnitVTable swap_vtable = {
|
|
},
|
|
},
|
|
|
|
- .test_start_limit = swap_test_start_limit,
|
|
+ .can_start = swap_can_start,
|
|
};
|
|
diff --git a/src/core/timer.c b/src/core/timer.c
|
|
index 240a2f473b..b22168fad5 100644
|
|
--- a/src/core/timer.c
|
|
+++ b/src/core/timer.c
|
|
@@ -889,7 +889,7 @@ static int timer_can_clean(Unit *u, ExecCleanMask *ret) {
|
|
return 0;
|
|
}
|
|
|
|
-static int timer_test_start_limit(Unit *u) {
|
|
+static int timer_can_start(Unit *u) {
|
|
Timer *t = TIMER(u);
|
|
int r;
|
|
|
|
@@ -901,7 +901,7 @@ static int timer_test_start_limit(Unit *u) {
|
|
return r;
|
|
}
|
|
|
|
- return 0;
|
|
+ return 1;
|
|
}
|
|
|
|
static const char* const timer_base_table[_TIMER_BASE_MAX] = {
|
|
@@ -965,5 +965,5 @@ const UnitVTable timer_vtable = {
|
|
|
|
.bus_set_property = bus_timer_set_property,
|
|
|
|
- .test_start_limit = timer_test_start_limit,
|
|
+ .can_start = timer_can_start,
|
|
};
|
|
diff --git a/src/core/unit.c b/src/core/unit.c
|
|
index 77d4ceaf24..929cc85e13 100644
|
|
--- a/src/core/unit.c
|
|
+++ b/src/core/unit.c
|
|
@@ -1904,9 +1904,9 @@ int unit_start(Unit *u) {
|
|
return unit_start(following);
|
|
}
|
|
|
|
- /* Check start rate limiting early so that failure conditions don't cause us to enter a busy loop. */
|
|
- if (UNIT_VTABLE(u)->test_start_limit) {
|
|
- r = UNIT_VTABLE(u)->test_start_limit(u);
|
|
+ /* Check our ability to start early so that failure conditions don't cause us to enter a busy loop. */
|
|
+ if (UNIT_VTABLE(u)->can_start) {
|
|
+ r = UNIT_VTABLE(u)->can_start(u);
|
|
if (r < 0)
|
|
return r;
|
|
}
|
|
diff --git a/src/core/unit.h b/src/core/unit.h
|
|
index 3f3a75d33b..76701519c2 100644
|
|
--- a/src/core/unit.h
|
|
+++ b/src/core/unit.h
|
|
@@ -665,7 +665,7 @@ typedef struct UnitVTable {
|
|
|
|
/* If this function is set, it's invoked first as part of starting a unit to allow start rate
|
|
* limiting checks to occur before we do anything else. */
|
|
- int (*test_start_limit)(Unit *u);
|
|
+ int (*can_start)(Unit *u);
|
|
|
|
/* The strings to print in status messages */
|
|
UnitStatusMessageFormats status_message_formats;
|
|
--
|
|
2.33.0
|
|
|