Gentoo Archives: gentoo-commits

From: Mike Gilbert <floppym@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-apps/systemd/files/, sys-apps/systemd/
Date: Tue, 26 Oct 2021 15:00:56
Message-Id: 1635260414.52fa44e7f51d4a4d23f8929a789ab391360e2833.floppym@gentoo
1 commit: 52fa44e7f51d4a4d23f8929a789ab391360e2833
2 Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
3 AuthorDate: Tue Oct 26 14:59:55 2021 +0000
4 Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
5 CommitDate: Tue Oct 26 15:00:14 2021 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=52fa44e7
7
8 sys-apps/systemd: backport some patches
9
10 Closes: https://bugs.gentoo.org/820113
11 Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>
12
13 sys-apps/systemd/files/249.5-coredumpctl.patch | 31 ++
14 .../249.5-revert-unit-start-rate-limiting.patch | 483 +++++++++++++++++++++
15 ...ystemd-249.5.ebuild => systemd-249.5-r1.ebuild} | 2 +
16 3 files changed, 516 insertions(+)
17
18 diff --git a/sys-apps/systemd/files/249.5-coredumpctl.patch b/sys-apps/systemd/files/249.5-coredumpctl.patch
19 new file mode 100644
20 index 00000000000..2892f347713
21 --- /dev/null
22 +++ b/sys-apps/systemd/files/249.5-coredumpctl.patch
23 @@ -0,0 +1,31 @@
24 +From 473627e1c9fcdf8f819ced2bb79cb7e9ff598b0c Mon Sep 17 00:00:00 2001
25 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@××××××.pl>
26 +Date: Tue, 12 Oct 2021 19:46:25 +0200
27 +Subject: [PATCH] coredumpctl: stop truncating information about coredump
28 +MIME-Version: 1.0
29 +Content-Type: text/plain; charset=UTF-8
30 +Content-Transfer-Encoding: 8bit
31 +
32 +With the changes to limit that print 'Found module …' over and over, we were
33 +hitting the journal field message limit, effectively truncating the info output.
34 +
35 +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1998488.
36 +
37 +(cherry picked from commit 384c6207669eb0d92aa0043dbc01957c6c7ff41e)
38 +---
39 + src/coredump/coredumpctl.c | 2 ++
40 + 1 file changed, 2 insertions(+)
41 +
42 +diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c
43 +index 3d44e51e32..7eba8330d7 100644
44 +--- a/src/coredump/coredumpctl.c
45 ++++ b/src/coredump/coredumpctl.c
46 +@@ -555,6 +555,8 @@ static int print_info(FILE *file, sd_journal *j, bool need_space) {
47 + assert(file);
48 + assert(j);
49 +
50 ++ (void) sd_journal_set_data_threshold(j, 0);
51 ++
52 + SD_JOURNAL_FOREACH_DATA(j, d, l) {
53 + RETRIEVE(d, l, "MESSAGE_ID", mid);
54 + RETRIEVE(d, l, "COREDUMP_PID", pid);
55
56 diff --git a/sys-apps/systemd/files/249.5-revert-unit-start-rate-limiting.patch b/sys-apps/systemd/files/249.5-revert-unit-start-rate-limiting.patch
57 new file mode 100644
58 index 00000000000..6d070e8d30d
59 --- /dev/null
60 +++ b/sys-apps/systemd/files/249.5-revert-unit-start-rate-limiting.patch
61 @@ -0,0 +1,483 @@
62 +From 4fa9d8f14523982482386d398d2b2669902f2098 Mon Sep 17 00:00:00 2001
63 +From: Yu Watanabe <watanabe.yu+github@×××××.com>
64 +Date: Mon, 18 Oct 2021 14:11:53 +0900
65 +Subject: [PATCH] Revert "core: Check unit start rate limiting earlier"
66 +
67 +This reverts commit ed8fbbf1745c6a2dc0b8cd560ac8a3353f72e979.
68 +
69 +This was causing problems during boot, see
70 +https://bodhi.fedoraproject.org/updates/FEDORA-2021-a1a52487e6,
71 +https://bugzilla.redhat.com/show_bug.cgi?id=2013386.
72 +https://github.com/systemd/systemd/issues/21025
73 +---
74 + src/core/automount.c | 23 ++++++-----------------
75 + src/core/mount.c | 23 ++++++-----------------
76 + src/core/path.c | 23 ++++++-----------------
77 + src/core/service.c | 25 +++++++------------------
78 + src/core/socket.c | 23 ++++++-----------------
79 + src/core/swap.c | 23 ++++++-----------------
80 + src/core/timer.c | 23 ++++++-----------------
81 + src/core/unit.c | 7 -------
82 + src/core/unit.h | 4 ----
83 + test/TEST-63-ISSUE-17433/Makefile | 1 -
84 + test/TEST-63-ISSUE-17433/test.sh | 9 ---------
85 + test/meson.build | 2 --
86 + test/testsuite-10.units/test10.service | 3 ---
87 + test/testsuite-63.units/test63.path | 2 --
88 + test/testsuite-63.units/test63.service | 5 -----
89 + test/units/testsuite-63.service | 16 ----------------
90 + 16 files changed, 43 insertions(+), 169 deletions(-)
91 + delete mode 120000 test/TEST-63-ISSUE-17433/Makefile
92 + delete mode 100755 test/TEST-63-ISSUE-17433/test.sh
93 + delete mode 100644 test/testsuite-63.units/test63.path
94 + delete mode 100644 test/testsuite-63.units/test63.service
95 + delete mode 100644 test/units/testsuite-63.service
96 +
97 +diff --git a/src/core/automount.c b/src/core/automount.c
98 +index 0722abef23..edc9588165 100644
99 +--- a/src/core/automount.c
100 ++++ b/src/core/automount.c
101 +@@ -814,6 +814,12 @@ static int automount_start(Unit *u) {
102 + if (r < 0)
103 + return r;
104 +
105 ++ r = unit_test_start_limit(u);
106 ++ if (r < 0) {
107 ++ automount_enter_dead(a, AUTOMOUNT_FAILURE_START_LIMIT_HIT);
108 ++ return r;
109 ++ }
110 ++
111 + r = unit_acquire_invocation_id(u);
112 + if (r < 0)
113 + return r;
114 +@@ -1059,21 +1065,6 @@ static bool automount_supported(void) {
115 + return supported;
116 + }
117 +
118 +-static int automount_test_start_limit(Unit *u) {
119 +- Automount *a = AUTOMOUNT(u);
120 +- int r;
121 +-
122 +- assert(a);
123 +-
124 +- r = unit_test_start_limit(u);
125 +- if (r < 0) {
126 +- automount_enter_dead(a, AUTOMOUNT_FAILURE_START_LIMIT_HIT);
127 +- return r;
128 +- }
129 +-
130 +- return 0;
131 +-}
132 +-
133 + static const char* const automount_result_table[_AUTOMOUNT_RESULT_MAX] = {
134 + [AUTOMOUNT_SUCCESS] = "success",
135 + [AUTOMOUNT_FAILURE_RESOURCES] = "resources",
136 +@@ -1136,6 +1127,4 @@ const UnitVTable automount_vtable = {
137 + [JOB_FAILED] = "Failed to unset automount %s.",
138 + },
139 + },
140 +-
141 +- .test_start_limit = automount_test_start_limit,
142 + };
143 +diff --git a/src/core/mount.c b/src/core/mount.c
144 +index 9bec190cb6..af39db214b 100644
145 +--- a/src/core/mount.c
146 ++++ b/src/core/mount.c
147 +@@ -1168,6 +1168,12 @@ static int mount_start(Unit *u) {
148 +
149 + assert(IN_SET(m->state, MOUNT_DEAD, MOUNT_FAILED));
150 +
151 ++ r = unit_test_start_limit(u);
152 ++ if (r < 0) {
153 ++ mount_enter_dead(m, MOUNT_FAILURE_START_LIMIT_HIT);
154 ++ return r;
155 ++ }
156 ++
157 + r = unit_acquire_invocation_id(u);
158 + if (r < 0)
159 + return r;
160 +@@ -2137,21 +2143,6 @@ static int mount_can_clean(Unit *u, ExecCleanMask *ret) {
161 + return exec_context_get_clean_mask(&m->exec_context, ret);
162 + }
163 +
164 +-static int mount_test_start_limit(Unit *u) {
165 +- Mount *m = MOUNT(u);
166 +- int r;
167 +-
168 +- assert(m);
169 +-
170 +- r = unit_test_start_limit(u);
171 +- if (r < 0) {
172 +- mount_enter_dead(m, MOUNT_FAILURE_START_LIMIT_HIT);
173 +- return r;
174 +- }
175 +-
176 +- return 0;
177 +-}
178 +-
179 + static const char* const mount_exec_command_table[_MOUNT_EXEC_COMMAND_MAX] = {
180 + [MOUNT_EXEC_MOUNT] = "ExecMount",
181 + [MOUNT_EXEC_UNMOUNT] = "ExecUnmount",
182 +@@ -2249,6 +2240,4 @@ const UnitVTable mount_vtable = {
183 + [JOB_TIMEOUT] = "Timed out unmounting %s.",
184 + },
185 + },
186 +-
187 +- .test_start_limit = mount_test_start_limit,
188 + };
189 +diff --git a/src/core/path.c b/src/core/path.c
190 +index 2b659696a4..e098e83a31 100644
191 +--- a/src/core/path.c
192 ++++ b/src/core/path.c
193 +@@ -590,6 +590,12 @@ static int path_start(Unit *u) {
194 + if (r < 0)
195 + return r;
196 +
197 ++ r = unit_test_start_limit(u);
198 ++ if (r < 0) {
199 ++ path_enter_dead(p, PATH_FAILURE_START_LIMIT_HIT);
200 ++ return r;
201 ++ }
202 ++
203 + r = unit_acquire_invocation_id(u);
204 + if (r < 0)
205 + return r;
206 +@@ -805,21 +811,6 @@ static void path_reset_failed(Unit *u) {
207 + p->result = PATH_SUCCESS;
208 + }
209 +
210 +-static int path_test_start_limit(Unit *u) {
211 +- Path *p = PATH(u);
212 +- int r;
213 +-
214 +- assert(p);
215 +-
216 +- r = unit_test_start_limit(u);
217 +- if (r < 0) {
218 +- path_enter_dead(p, PATH_FAILURE_START_LIMIT_HIT);
219 +- return r;
220 +- }
221 +-
222 +- return 0;
223 +-}
224 +-
225 + static const char* const path_type_table[_PATH_TYPE_MAX] = {
226 + [PATH_EXISTS] = "PathExists",
227 + [PATH_EXISTS_GLOB] = "PathExistsGlob",
228 +@@ -874,6 +865,4 @@ const UnitVTable path_vtable = {
229 + .reset_failed = path_reset_failed,
230 +
231 + .bus_set_property = bus_path_set_property,
232 +-
233 +- .test_start_limit = path_test_start_limit,
234 + };
235 +diff --git a/src/core/service.c b/src/core/service.c
236 +index 701c145565..7b90822f68 100644
237 +--- a/src/core/service.c
238 ++++ b/src/core/service.c
239 +@@ -2456,6 +2456,13 @@ static int service_start(Unit *u) {
240 +
241 + assert(IN_SET(s->state, SERVICE_DEAD, SERVICE_FAILED));
242 +
243 ++ /* Make sure we don't enter a busy loop of some kind. */
244 ++ r = unit_test_start_limit(u);
245 ++ if (r < 0) {
246 ++ service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
247 ++ return r;
248 ++ }
249 ++
250 + r = unit_acquire_invocation_id(u);
251 + if (r < 0)
252 + return r;
253 +@@ -4451,22 +4458,6 @@ static const char *service_finished_job(Unit *u, JobType t, JobResult result) {
254 + return NULL;
255 + }
256 +
257 +-static int service_test_start_limit(Unit *u) {
258 +- Service *s = SERVICE(u);
259 +- int r;
260 +-
261 +- assert(s);
262 +-
263 +- /* Make sure we don't enter a busy loop of some kind. */
264 +- r = unit_test_start_limit(u);
265 +- if (r < 0) {
266 +- service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
267 +- return r;
268 +- }
269 +-
270 +- return 0;
271 +-}
272 +-
273 + static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
274 + [SERVICE_RESTART_NO] = "no",
275 + [SERVICE_RESTART_ON_SUCCESS] = "on-success",
276 +@@ -4629,6 +4620,4 @@ const UnitVTable service_vtable = {
277 + },
278 + .finished_job = service_finished_job,
279 + },
280 +-
281 +- .test_start_limit = service_test_start_limit,
282 + };
283 +diff --git a/src/core/socket.c b/src/core/socket.c
284 +index 31d88b71ff..f362a5baa8 100644
285 +--- a/src/core/socket.c
286 ++++ b/src/core/socket.c
287 +@@ -2515,6 +2515,12 @@ static int socket_start(Unit *u) {
288 +
289 + assert(IN_SET(s->state, SOCKET_DEAD, SOCKET_FAILED));
290 +
291 ++ r = unit_test_start_limit(u);
292 ++ if (r < 0) {
293 ++ socket_enter_dead(s, SOCKET_FAILURE_START_LIMIT_HIT);
294 ++ return r;
295 ++ }
296 ++
297 + r = unit_acquire_invocation_id(u);
298 + if (r < 0)
299 + return r;
300 +@@ -3423,21 +3429,6 @@ static int socket_can_clean(Unit *u, ExecCleanMask *ret) {
301 + return exec_context_get_clean_mask(&s->exec_context, ret);
302 + }
303 +
304 +-static int socket_test_start_limit(Unit *u) {
305 +- Socket *s = SOCKET(u);
306 +- int r;
307 +-
308 +- assert(s);
309 +-
310 +- r = unit_test_start_limit(u);
311 +- if (r < 0) {
312 +- socket_enter_dead(s, SOCKET_FAILURE_START_LIMIT_HIT);
313 +- return r;
314 +- }
315 +-
316 +- return 0;
317 +-}
318 +-
319 + static const char* const socket_exec_command_table[_SOCKET_EXEC_COMMAND_MAX] = {
320 + [SOCKET_EXEC_START_PRE] = "ExecStartPre",
321 + [SOCKET_EXEC_START_CHOWN] = "ExecStartChown",
322 +@@ -3564,6 +3555,4 @@ const UnitVTable socket_vtable = {
323 + [JOB_TIMEOUT] = "Timed out stopping %s.",
324 + },
325 + },
326 +-
327 +- .test_start_limit = socket_test_start_limit,
328 + };
329 +diff --git a/src/core/swap.c b/src/core/swap.c
330 +index b25f68fb7d..3843b19500 100644
331 +--- a/src/core/swap.c
332 ++++ b/src/core/swap.c
333 +@@ -933,6 +933,12 @@ static int swap_start(Unit *u) {
334 + if (UNIT(other)->job && UNIT(other)->job->state == JOB_RUNNING)
335 + return -EAGAIN;
336 +
337 ++ r = unit_test_start_limit(u);
338 ++ if (r < 0) {
339 ++ swap_enter_dead(s, SWAP_FAILURE_START_LIMIT_HIT);
340 ++ return r;
341 ++ }
342 ++
343 + r = unit_acquire_invocation_id(u);
344 + if (r < 0)
345 + return r;
346 +@@ -1582,21 +1588,6 @@ static int swap_can_clean(Unit *u, ExecCleanMask *ret) {
347 + return exec_context_get_clean_mask(&s->exec_context, ret);
348 + }
349 +
350 +-static int swap_test_start_limit(Unit *u) {
351 +- Swap *s = SWAP(u);
352 +- int r;
353 +-
354 +- assert(s);
355 +-
356 +- r = unit_test_start_limit(u);
357 +- if (r < 0) {
358 +- swap_enter_dead(s, SWAP_FAILURE_START_LIMIT_HIT);
359 +- return r;
360 +- }
361 +-
362 +- return 0;
363 +-}
364 +-
365 + static const char* const swap_exec_command_table[_SWAP_EXEC_COMMAND_MAX] = {
366 + [SWAP_EXEC_ACTIVATE] = "ExecActivate",
367 + [SWAP_EXEC_DEACTIVATE] = "ExecDeactivate",
368 +@@ -1692,6 +1683,4 @@ const UnitVTable swap_vtable = {
369 + [JOB_TIMEOUT] = "Timed out deactivating swap %s.",
370 + },
371 + },
372 +-
373 +- .test_start_limit = swap_test_start_limit,
374 + };
375 +diff --git a/src/core/timer.c b/src/core/timer.c
376 +index 5ecc9f35cf..e064ad9a2d 100644
377 +--- a/src/core/timer.c
378 ++++ b/src/core/timer.c
379 +@@ -635,6 +635,12 @@ static int timer_start(Unit *u) {
380 + if (r < 0)
381 + return r;
382 +
383 ++ r = unit_test_start_limit(u);
384 ++ if (r < 0) {
385 ++ timer_enter_dead(t, TIMER_FAILURE_START_LIMIT_HIT);
386 ++ return r;
387 ++ }
388 ++
389 + r = unit_acquire_invocation_id(u);
390 + if (r < 0)
391 + return r;
392 +@@ -895,21 +901,6 @@ static int timer_can_clean(Unit *u, ExecCleanMask *ret) {
393 + return 0;
394 + }
395 +
396 +-static int timer_test_start_limit(Unit *u) {
397 +- Timer *t = TIMER(u);
398 +- int r;
399 +-
400 +- assert(t);
401 +-
402 +- r = unit_test_start_limit(u);
403 +- if (r < 0) {
404 +- timer_enter_dead(t, TIMER_FAILURE_START_LIMIT_HIT);
405 +- return r;
406 +- }
407 +-
408 +- return 0;
409 +-}
410 +-
411 + static const char* const timer_base_table[_TIMER_BASE_MAX] = {
412 + [TIMER_ACTIVE] = "OnActiveSec",
413 + [TIMER_BOOT] = "OnBootSec",
414 +@@ -969,6 +960,4 @@ const UnitVTable timer_vtable = {
415 + .timezone_change = timer_timezone_change,
416 +
417 + .bus_set_property = bus_timer_set_property,
418 +-
419 +- .test_start_limit = timer_test_start_limit,
420 + };
421 +diff --git a/src/core/unit.c b/src/core/unit.c
422 +index 69ed43578e..38d3eb703f 100644
423 +--- a/src/core/unit.c
424 ++++ b/src/core/unit.c
425 +@@ -1851,13 +1851,6 @@ int unit_start(Unit *u) {
426 +
427 + assert(u);
428 +
429 +- /* Check start rate limiting early so that failure conditions don't cause us to enter a busy loop. */
430 +- if (UNIT_VTABLE(u)->test_start_limit) {
431 +- int r = UNIT_VTABLE(u)->test_start_limit(u);
432 +- if (r < 0)
433 +- return r;
434 +- }
435 +-
436 + /* If this is already started, then this will succeed. Note that this will even succeed if this unit
437 + * is not startable by the user. This is relied on to detect when we need to wait for units and when
438 + * waiting is finished. */
439 +diff --git a/src/core/unit.h b/src/core/unit.h
440 +index 9babd07188..759104ffa7 100644
441 +--- a/src/core/unit.h
442 ++++ b/src/core/unit.h
443 +@@ -649,10 +649,6 @@ typedef struct UnitVTable {
444 + * of this type will immediately fail. */
445 + bool (*supported)(void);
446 +
447 +- /* If this function is set, it's invoked first as part of starting a unit to allow start rate
448 +- * limiting checks to occur before we do anything else. */
449 +- int (*test_start_limit)(Unit *u);
450 +-
451 + /* The strings to print in status messages */
452 + UnitStatusMessageFormats status_message_formats;
453 +
454 +diff --git a/test/TEST-63-ISSUE-17433/Makefile b/test/TEST-63-ISSUE-17433/Makefile
455 +deleted file mode 120000
456 +index e9f93b1104..0000000000
457 +--- a/test/TEST-63-ISSUE-17433/Makefile
458 ++++ /dev/null
459 +@@ -1 +0,0 @@
460 +-../TEST-01-BASIC/Makefile
461 +\ No newline at end of file
462 +diff --git a/test/TEST-63-ISSUE-17433/test.sh b/test/TEST-63-ISSUE-17433/test.sh
463 +deleted file mode 100755
464 +index c595a9f2de..0000000000
465 +--- a/test/TEST-63-ISSUE-17433/test.sh
466 ++++ /dev/null
467 +@@ -1,9 +0,0 @@
468 +-#!/usr/bin/env bash
469 +-set -e
470 +-
471 +-TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/17433"
472 +-
473 +-# shellcheck source=test/test-functions
474 +-. "${TEST_BASE_DIR:?}/test-functions"
475 +-
476 +-do_test "$@"
477 +diff --git a/test/meson.build b/test/meson.build
478 +index 6f8f257c2d..47c7f4d49a 100644
479 +--- a/test/meson.build
480 ++++ b/test/meson.build
481 +@@ -33,8 +33,6 @@ if install_tests
482 + install_dir : testdata_dir)
483 + install_subdir('testsuite-52.units',
484 + install_dir : testdata_dir)
485 +- install_subdir('testsuite-63.units',
486 +- install_dir : testdata_dir)
487 +
488 + testsuite08_dir = testdata_dir + '/testsuite-08.units'
489 + install_data('testsuite-08.units/-.mount',
490 +diff --git a/test/testsuite-10.units/test10.service b/test/testsuite-10.units/test10.service
491 +index 2fb476b986..d0be786b01 100644
492 +--- a/test/testsuite-10.units/test10.service
493 ++++ b/test/testsuite-10.units/test10.service
494 +@@ -1,9 +1,6 @@
495 + [Unit]
496 + Requires=test10.socket
497 + ConditionPathExistsGlob=/tmp/nonexistent
498 +-# Make sure we hit the socket trigger limit in the test and not the service start limit.
499 +-StartLimitInterval=1000
500 +-StartLimitBurst=1000
501 +
502 + [Service]
503 + ExecStart=true
504 +diff --git a/test/testsuite-63.units/test63.path b/test/testsuite-63.units/test63.path
505 +deleted file mode 100644
506 +index a6573bda0a..0000000000
507 +--- a/test/testsuite-63.units/test63.path
508 ++++ /dev/null
509 +@@ -1,2 +0,0 @@
510 +-[Path]
511 +-PathExists=/tmp/test63
512 +diff --git a/test/testsuite-63.units/test63.service b/test/testsuite-63.units/test63.service
513 +deleted file mode 100644
514 +index c83801874d..0000000000
515 +--- a/test/testsuite-63.units/test63.service
516 ++++ /dev/null
517 +@@ -1,5 +0,0 @@
518 +-[Unit]
519 +-ConditionPathExists=!/tmp/nonexistent
520 +-
521 +-[Service]
522 +-ExecStart=true
523 +diff --git a/test/units/testsuite-63.service b/test/units/testsuite-63.service
524 +deleted file mode 100644
525 +index 04122723d4..0000000000
526 +--- a/test/units/testsuite-63.service
527 ++++ /dev/null
528 +@@ -1,16 +0,0 @@
529 +-[Unit]
530 +-Description=TEST-63-ISSUE-17433
531 +-
532 +-[Service]
533 +-ExecStartPre=rm -f /failed /testok
534 +-Type=oneshot
535 +-ExecStart=rm -f /tmp/nonexistent
536 +-ExecStart=systemctl start test63.path
537 +-ExecStart=touch /tmp/test63
538 +-# Make sure systemd has sufficient time to hit the start limit for test63.service.
539 +-ExecStart=sleep 2
540 +-ExecStart=sh -x -c 'test "$(systemctl show test63.service -P ActiveState)" = failed'
541 +-ExecStart=sh -x -c 'test "$(systemctl show test63.service -P Result)" = start-limit-hit'
542 +-ExecStart=sh -x -c 'test "$(systemctl show test63.path -P ActiveState)" = failed'
543 +-ExecStart=sh -x -c 'test "$(systemctl show test63.path -P Result)" = unit-start-limit-hit'
544 +-ExecStart=sh -x -c 'echo OK >/testok'
545
546 diff --git a/sys-apps/systemd/systemd-249.5.ebuild b/sys-apps/systemd/systemd-249.5-r1.ebuild
547 similarity index 99%
548 rename from sys-apps/systemd/systemd-249.5.ebuild
549 rename to sys-apps/systemd/systemd-249.5-r1.ebuild
550 index 03f729a43a8..e47a7beaa3d 100644
551 --- a/sys-apps/systemd/systemd-249.5.ebuild
552 +++ b/sys-apps/systemd/systemd-249.5-r1.ebuild
553 @@ -227,6 +227,8 @@ src_prepare() {
554 # Add local patches here
555 PATCHES+=(
556 "${FILESDIR}/249-libudev-static.patch"
557 + "${FILESDIR}/249.5-coredumpctl.patch"
558 + "${FILESDIR}/249.5-revert-unit-start-rate-limiting.patch"
559 )
560
561 if ! use vanilla; then