Change-Id: I5821dc8a44f724e59cee65e356dfae4fbae04f76 Signed-off-by: LiFeng <lifeng68@huawei.com>
100 lines
2.9 KiB
Diff
100 lines
2.9 KiB
Diff
From 21741c37e812d677d3adf3c721c4343e04a81c65 Mon Sep 17 00:00:00 2001
|
|
From: tanyifeng <tanyifeng1@huawei.com>
|
|
Date: Mon, 14 Jan 2019 11:03:03 +0800
|
|
Subject: [PATCH 017/138] isulad: check cgroup cpu.shares after setted
|
|
|
|
Signed-off-by: LiFeng <lifeng68@huawei.com>
|
|
---
|
|
src/lxc/cgroups/cgfsng.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 61 insertions(+)
|
|
|
|
diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
|
|
index 3e702b3..ab5732b 100644
|
|
--- a/src/lxc/cgroups/cgfsng.c
|
|
+++ b/src/lxc/cgroups/cgfsng.c
|
|
@@ -2204,6 +2204,42 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename,
|
|
return ret;
|
|
}
|
|
|
|
+/* Called from setup_limits - here we have the container's cgroup_data because
|
|
+ * we created the cgroups.
|
|
+ */
|
|
+static int cg_legacy_get_data(struct cgroup_ops *ops, const char *filename,
|
|
+ char *value, size_t len)
|
|
+{
|
|
+ char *fullpath, *p;
|
|
+ struct hierarchy *h;
|
|
+ int ret = 0;
|
|
+ char *controller = NULL;
|
|
+
|
|
+ len = strlen(filename);
|
|
+ controller = alloca(len + 1);
|
|
+ (void)strlcpy(controller, filename, len + 1);
|
|
+
|
|
+ p = strchr(controller, '.');
|
|
+ if (p)
|
|
+ *p = '\0';
|
|
+
|
|
+
|
|
+ h = get_hierarchy(ops, controller);
|
|
+ if (!h) {
|
|
+ ERROR("Failed to setup limits for the \"%s\" controller. "
|
|
+ "The controller seems to be unused by \"cgfsng\" cgroup "
|
|
+ "driver or not enabled on the cgroup hierarchy",
|
|
+ controller);
|
|
+ errno = ENOENT;
|
|
+ return -ENOENT;
|
|
+ }
|
|
+
|
|
+ fullpath = must_make_path(h->container_full_path, filename, NULL);
|
|
+ ret = lxc_read_from_file(fullpath, value, len);
|
|
+ free(fullpath);
|
|
+ return ret;
|
|
+}
|
|
+
|
|
static bool __cg_legacy_setup_limits(struct cgroup_ops *ops,
|
|
struct lxc_list *cgroup_settings,
|
|
bool do_devices)
|
|
@@ -2211,6 +2247,8 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops,
|
|
struct lxc_list *iterator, *next, *sorted_cgroup_settings;
|
|
struct lxc_cgroup *cg;
|
|
bool ret = false;
|
|
+ char value[21];
|
|
+ long long int readvalue, setvalue;
|
|
|
|
if (lxc_list_empty(cgroup_settings))
|
|
return true;
|
|
@@ -2236,6 +2274,29 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops,
|
|
DEBUG("Set controller \"%s\" set to \"%s\"",
|
|
cg->subsystem, cg->value);
|
|
}
|
|
+ // isulad: check cpu shares
|
|
+ if (strcmp(cg->subsystem, "cpu.shares") == 0) {
|
|
+ if (cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value)) < 0) {
|
|
+ SYSERROR("Error get %s", cg->subsystem);
|
|
+ goto out;
|
|
+ }
|
|
+ trim(value);
|
|
+ if (lxc_safe_long_long(cg->value, &setvalue) != 0) {
|
|
+ SYSERROR("Invalid value %s", cg->value);
|
|
+ goto out;
|
|
+ }
|
|
+ if (lxc_safe_long_long(value, &readvalue) != 0) {
|
|
+ SYSERROR("Invalid value %s", value);
|
|
+ goto out;
|
|
+ }
|
|
+ if (setvalue > readvalue) {
|
|
+ ERROR("The maximum allowed cpu-shares is %s", value);
|
|
+ goto out;
|
|
+ } else if (setvalue < readvalue) {
|
|
+ ERROR("The minimum allowed cpu-shares is %s", value);
|
|
+ goto out;
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
ret = true;
|
|
--
|
|
1.8.3.1
|
|
|