3d3dc8
From 3674514b7220a136dcfd464c205d41609f0c99a7 Mon Sep 17 00:00:00 2001
3d3dc8
From: Michal Sekletar <msekleta@redhat.com>
3d3dc8
Date: Mon, 4 Oct 2021 17:51:52 +0200
3d3dc8
Subject: [PATCH] core: rename/generalize UNIT(u)->test_start_limit() hook
3d3dc8
3d3dc8
Up until now the main reason why we didn't proceed with starting the
3d3dc8
unit was exceed start limit burst. However, for unit types like mounts
3d3dc8
the other reason could be effective ratelimit on /proc/self/mountinfo
3d3dc8
event source. That means our mount unit state may not reflect current
3d3dc8
kernel state. Hence, we need to attempt to re-run the start job again
3d3dc8
after ratelimit on event source expires.
3d3dc8
3d3dc8
As we will be introducing another reason than start limit let's rename
3d3dc8
the virtual function that implements the check.
3d3dc8
3d3dc8
(cherry picked from commit 705578c3b9d794097233aa66010cf67b2a444716)
3d3dc8
3d3dc8
Related: #2036608
3d3dc8
---
3d3dc8
 src/core/automount.c | 6 +++---
3d3dc8
 src/core/mount.c     | 6 +++---
3d3dc8
 src/core/path.c      | 6 +++---
3d3dc8
 src/core/service.c   | 6 +++---
3d3dc8
 src/core/socket.c    | 6 +++---
3d3dc8
 src/core/swap.c      | 6 +++---
3d3dc8
 src/core/timer.c     | 6 +++---
3d3dc8
 src/core/unit.c      | 6 +++---
3d3dc8
 src/core/unit.h      | 2 +-
3d3dc8
 9 files changed, 25 insertions(+), 25 deletions(-)
3d3dc8
3d3dc8
diff --git a/src/core/automount.c b/src/core/automount.c
3d3dc8
index 5e16adabb5..f212620c8f 100644
3d3dc8
--- a/src/core/automount.c
3d3dc8
+++ b/src/core/automount.c
3d3dc8
@@ -1071,7 +1071,7 @@ static bool automount_supported(void) {
3d3dc8
         return supported;
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int automount_test_start_limit(Unit *u) {
3d3dc8
+static int automount_can_start(Unit *u) {
3d3dc8
         Automount *a = AUTOMOUNT(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -1083,7 +1083,7 @@ static int automount_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const automount_result_table[_AUTOMOUNT_RESULT_MAX] = {
3d3dc8
@@ -1145,5 +1145,5 @@ const UnitVTable automount_vtable = {
3d3dc8
                 },
3d3dc8
         },
3d3dc8
 
3d3dc8
-        .test_start_limit = automount_test_start_limit,
3d3dc8
+        .can_start = automount_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/mount.c b/src/core/mount.c
3d3dc8
index 22848847e5..032a2ca156 100644
3d3dc8
--- a/src/core/mount.c
3d3dc8
+++ b/src/core/mount.c
3d3dc8
@@ -1951,7 +1951,7 @@ static int mount_control_pid(Unit *u) {
3d3dc8
         return m->control_pid;
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int mount_test_start_limit(Unit *u) {
3d3dc8
+static int mount_can_start(Unit *u) {
3d3dc8
         Mount *m = MOUNT(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -1963,7 +1963,7 @@ static int mount_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const mount_exec_command_table[_MOUNT_EXEC_COMMAND_MAX] = {
3d3dc8
@@ -2058,5 +2058,5 @@ const UnitVTable mount_vtable = {
3d3dc8
                 },
3d3dc8
         },
3d3dc8
 
3d3dc8
-        .test_start_limit = mount_test_start_limit,
3d3dc8
+        .can_start = mount_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/path.c b/src/core/path.c
3d3dc8
index 1e69a1f05f..58f490589d 100644
3d3dc8
--- a/src/core/path.c
3d3dc8
+++ b/src/core/path.c
3d3dc8
@@ -724,7 +724,7 @@ static void path_reset_failed(Unit *u) {
3d3dc8
         p->result = PATH_SUCCESS;
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int path_test_start_limit(Unit *u) {
3d3dc8
+static int path_can_start(Unit *u) {
3d3dc8
         Path *p = PATH(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -736,7 +736,7 @@ static int path_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const path_type_table[_PATH_TYPE_MAX] = {
3d3dc8
@@ -792,5 +792,5 @@ const UnitVTable path_vtable = {
3d3dc8
         .bus_vtable = bus_path_vtable,
3d3dc8
         .bus_set_property = bus_path_set_property,
3d3dc8
 
3d3dc8
-        .test_start_limit = path_test_start_limit,
3d3dc8
+        .can_start = path_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/service.c b/src/core/service.c
3d3dc8
index c5f408d817..e8ae1a5772 100644
3d3dc8
--- a/src/core/service.c
3d3dc8
+++ b/src/core/service.c
3d3dc8
@@ -4074,7 +4074,7 @@ static bool service_needs_console(Unit *u) {
3d3dc8
                       SERVICE_FINAL_SIGKILL);
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int service_test_start_limit(Unit *u) {
3d3dc8
+static int service_can_start(Unit *u) {
3d3dc8
         Service *s = SERVICE(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -4087,7 +4087,7 @@ static int service_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
3d3dc8
@@ -4232,5 +4232,5 @@ const UnitVTable service_vtable = {
3d3dc8
                 },
3d3dc8
         },
3d3dc8
 
3d3dc8
-        .test_start_limit = service_test_start_limit,
3d3dc8
+        .can_start = service_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/socket.c b/src/core/socket.c
3d3dc8
index 36d2e4f823..3589300e68 100644
3d3dc8
--- a/src/core/socket.c
3d3dc8
+++ b/src/core/socket.c
3d3dc8
@@ -3261,7 +3261,7 @@ static int socket_control_pid(Unit *u) {
3d3dc8
         return s->control_pid;
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int socket_test_start_limit(Unit *u) {
3d3dc8
+static int socket_can_start(Unit *u) {
3d3dc8
         Socket *s = SOCKET(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -3273,7 +3273,7 @@ static int socket_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const socket_exec_command_table[_SOCKET_EXEC_COMMAND_MAX] = {
3d3dc8
@@ -3369,5 +3369,5 @@ const UnitVTable socket_vtable = {
3d3dc8
                 },
3d3dc8
         },
3d3dc8
 
3d3dc8
-        .test_start_limit = socket_test_start_limit,
3d3dc8
+        .can_start = socket_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/swap.c b/src/core/swap.c
3d3dc8
index 90fcd69300..498c5a6d69 100644
3d3dc8
--- a/src/core/swap.c
3d3dc8
+++ b/src/core/swap.c
3d3dc8
@@ -1452,7 +1452,7 @@ static int swap_control_pid(Unit *u) {
3d3dc8
         return s->control_pid;
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int swap_test_start_limit(Unit *u) {
3d3dc8
+static int swap_can_start(Unit *u) {
3d3dc8
         Swap *s = SWAP(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -1464,7 +1464,7 @@ static int swap_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const swap_exec_command_table[_SWAP_EXEC_COMMAND_MAX] = {
3d3dc8
@@ -1557,5 +1557,5 @@ const UnitVTable swap_vtable = {
3d3dc8
                 },
3d3dc8
         },
3d3dc8
 
3d3dc8
-        .test_start_limit = swap_test_start_limit,
3d3dc8
+        .can_start = swap_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/timer.c b/src/core/timer.c
3d3dc8
index fb9ae17990..684180bf99 100644
3d3dc8
--- a/src/core/timer.c
3d3dc8
+++ b/src/core/timer.c
3d3dc8
@@ -823,7 +823,7 @@ static void timer_timezone_change(Unit *u) {
3d3dc8
         timer_enter_waiting(t, false);
3d3dc8
 }
3d3dc8
 
3d3dc8
-static int timer_test_start_limit(Unit *u) {
3d3dc8
+static int timer_can_start(Unit *u) {
3d3dc8
         Timer *t = TIMER(u);
3d3dc8
         int r;
3d3dc8
 
3d3dc8
@@ -835,7 +835,7 @@ static int timer_test_start_limit(Unit *u) {
3d3dc8
                 return r;
3d3dc8
         }
3d3dc8
 
3d3dc8
-        return 0;
3d3dc8
+        return 1;
3d3dc8
 }
3d3dc8
 
3d3dc8
 static const char* const timer_base_table[_TIMER_BASE_MAX] = {
3d3dc8
@@ -893,5 +893,5 @@ const UnitVTable timer_vtable = {
3d3dc8
         .bus_set_property = bus_timer_set_property,
3d3dc8
 
3d3dc8
         .can_transient = true,
3d3dc8
-        .test_start_limit = timer_test_start_limit,
3d3dc8
+        .can_start = timer_can_start,
3d3dc8
 };
3d3dc8
diff --git a/src/core/unit.c b/src/core/unit.c
3d3dc8
index f0df7452fa..4de218feac 100644
3d3dc8
--- a/src/core/unit.c
3d3dc8
+++ b/src/core/unit.c
3d3dc8
@@ -1728,9 +1728,9 @@ int unit_start(Unit *u) {
3d3dc8
 
3d3dc8
         assert(u);
3d3dc8
 
3d3dc8
-        /* Check start rate limiting early so that failure conditions don't cause us to enter a busy loop. */
3d3dc8
-        if (UNIT_VTABLE(u)->test_start_limit) {
3d3dc8
-                int r = UNIT_VTABLE(u)->test_start_limit(u);
3d3dc8
+        /* Check our ability to start early so that failure conditions don't cause us to enter a busy loop. */
3d3dc8
+        if (UNIT_VTABLE(u)->can_start) {
3d3dc8
+                int r = UNIT_VTABLE(u)->can_start(u);
3d3dc8
                 if (r < 0)
3d3dc8
                         return r;
3d3dc8
         }
3d3dc8
diff --git a/src/core/unit.h b/src/core/unit.h
3d3dc8
index 9e6f1bcf81..0cd259411f 100644
3d3dc8
--- a/src/core/unit.h
3d3dc8
+++ b/src/core/unit.h
3d3dc8
@@ -569,7 +569,7 @@ typedef struct UnitVTable {
3d3dc8
 
3d3dc8
         /* If this function is set, it's invoked first as part of starting a unit to allow start rate
3d3dc8
          * limiting checks to occur before we do anything else. */
3d3dc8
-        int (*test_start_limit)(Unit *u);
3d3dc8
+        int (*can_start)(Unit *u);
3d3dc8
 
3d3dc8
         /* The strings to print in status messages */
3d3dc8
         UnitStatusMessageFormats status_message_formats;