|
|
52b84b |
From a016ef4ab29ed62da547db008866624f75ed6407 Mon Sep 17 00:00:00 2001
|
|
|
52b84b |
From: Chris Down <chris@chrisdown.name>
|
|
|
52b84b |
Date: Tue, 16 Apr 2019 18:14:09 +0100
|
|
|
52b84b |
Subject: [PATCH] cgroup: Create UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP
|
|
|
52b84b |
|
|
|
52b84b |
This is in preparation for creating unit_get_ancestor_memory_min.
|
|
|
52b84b |
|
|
|
52b84b |
(cherry picked from commit 6264b85e92aeddb74b8d8808a08c9eae8390a6a5)
|
|
|
52b84b |
|
|
|
52b84b |
Related: #1763435
|
|
|
52b84b |
---
|
|
|
52b84b |
src/core/cgroup.c | 55 ++++++++++++++++++++++++++---------------------
|
|
|
52b84b |
1 file changed, 30 insertions(+), 25 deletions(-)
|
|
|
52b84b |
|
|
|
52b84b |
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
|
|
|
52b84b |
index f804bf4727..46a89ff5e1 100644
|
|
|
52b84b |
--- a/src/core/cgroup.c
|
|
|
52b84b |
+++ b/src/core/cgroup.c
|
|
|
52b84b |
@@ -372,31 +372,36 @@ int cgroup_add_device_allow(CGroupContext *c, const char *dev, const char *mode)
|
|
|
52b84b |
return 0;
|
|
|
52b84b |
}
|
|
|
52b84b |
|
|
|
52b84b |
-uint64_t unit_get_ancestor_memory_low(Unit *u) {
|
|
|
52b84b |
- CGroupContext *c;
|
|
|
52b84b |
-
|
|
|
52b84b |
- /* 1. Is MemoryLow set in this unit? If so, use that.
|
|
|
52b84b |
- * 2. Is DefaultMemoryLow set in any ancestor? If so, use that.
|
|
|
52b84b |
- * 3. Otherwise, return CGROUP_LIMIT_MIN. */
|
|
|
52b84b |
-
|
|
|
52b84b |
- assert(u);
|
|
|
52b84b |
-
|
|
|
52b84b |
- c = unit_get_cgroup_context(u);
|
|
|
52b84b |
-
|
|
|
52b84b |
- if (c->memory_low_set)
|
|
|
52b84b |
- return c->memory_low;
|
|
|
52b84b |
-
|
|
|
52b84b |
- while (UNIT_ISSET(u->slice)) {
|
|
|
52b84b |
- u = UNIT_DEREF(u->slice);
|
|
|
52b84b |
- c = unit_get_cgroup_context(u);
|
|
|
52b84b |
-
|
|
|
52b84b |
- if (c->default_memory_low_set)
|
|
|
52b84b |
- return c->default_memory_low;
|
|
|
52b84b |
- }
|
|
|
52b84b |
-
|
|
|
52b84b |
- /* We've reached the root, but nobody had DefaultMemoryLow set, so set it to the kernel default. */
|
|
|
52b84b |
- return CGROUP_LIMIT_MIN;
|
|
|
52b84b |
-}
|
|
|
52b84b |
+#define UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(entry) \
|
|
|
52b84b |
+ uint64_t unit_get_ancestor_##entry(Unit *u) { \
|
|
|
52b84b |
+ CGroupContext *c; \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ /* 1. Is entry set in this unit? If so, use that. \
|
|
|
52b84b |
+ * 2. Is the default for this entry set in any \
|
|
|
52b84b |
+ * ancestor? If so, use that. \
|
|
|
52b84b |
+ * 3. Otherwise, return CGROUP_LIMIT_MIN. */ \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ assert(u); \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ c = unit_get_cgroup_context(u); \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ if (c->entry##_set) \
|
|
|
52b84b |
+ return c->entry; \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ while (UNIT_ISSET(u->slice)) { \
|
|
|
52b84b |
+ u = UNIT_DEREF(u->slice); \
|
|
|
52b84b |
+ c = unit_get_cgroup_context(u); \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ if (c->default_##entry##_set) \
|
|
|
52b84b |
+ return c->default_##entry; \
|
|
|
52b84b |
+ } \
|
|
|
52b84b |
+ \
|
|
|
52b84b |
+ /* We've reached the root, but nobody had default for \
|
|
|
52b84b |
+ * this entry set, so set it to the kernel default. */ \
|
|
|
52b84b |
+ return CGROUP_LIMIT_MIN; \
|
|
|
52b84b |
+}
|
|
|
52b84b |
+
|
|
|
52b84b |
+UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_low);
|
|
|
52b84b |
|
|
|
52b84b |
static int lookup_block_device(const char *p, dev_t *ret) {
|
|
|
52b84b |
struct stat st;
|