Commit b9138559 by Stéphane Graber

Merge pull request #829 from hallyn/2016-02-19/devices

cgroups: do not fail if setting devices cgroup fails due to EPERM
parents ef95dc01 4f875f70
...@@ -1285,10 +1285,13 @@ static int lxc_cgroup_set_data(const char *filename, const char *value, struct c ...@@ -1285,10 +1285,13 @@ static int lxc_cgroup_set_data(const char *filename, const char *value, struct c
if ((p = strchr(subsystem, '.')) != NULL) if ((p = strchr(subsystem, '.')) != NULL)
*p = '\0'; *p = '\0';
errno = ENOENT;
path = lxc_cgroup_get_hierarchy_abs_path_data(subsystem, d); path = lxc_cgroup_get_hierarchy_abs_path_data(subsystem, d);
if (path) { if (path) {
ret = do_cgroup_set(path, filename, value); ret = do_cgroup_set(path, filename, value);
int saved_errno = errno;
free(path); free(path);
errno = saved_errno;
} }
return ret; return ret;
} }
...@@ -1915,6 +1918,11 @@ static int do_setup_cgroup_limits(struct cgfs_data *d, ...@@ -1915,6 +1918,11 @@ static int do_setup_cgroup_limits(struct cgfs_data *d,
cgroup_devices_has_allow_or_deny(d, cg->value, true)) cgroup_devices_has_allow_or_deny(d, cg->value, true))
continue; continue;
if (lxc_cgroup_set_data(cg->subsystem, cg->value, d)) { if (lxc_cgroup_set_data(cg->subsystem, cg->value, d)) {
if (do_devices && errno == EPERM) {
WARN("Error setting %s to %s for %s",
cg->subsystem, cg->value, d->name);
continue;
}
ERROR("Error setting %s to %s for %s", ERROR("Error setting %s to %s for %s",
cg->subsystem, cg->value, d->name); cg->subsystem, cg->value, d->name);
goto out; goto out;
......
...@@ -1523,6 +1523,14 @@ static bool cgm_setup_limits(void *hdata, struct lxc_list *cgroup_settings, bool ...@@ -1523,6 +1523,14 @@ static bool cgm_setup_limits(void *hdata, struct lxc_list *cgroup_settings, bool
d->cgroup_path, cg->subsystem, cg->value) != 0) { d->cgroup_path, cg->subsystem, cg->value) != 0) {
NihError *nerr; NihError *nerr;
nerr = nih_error_get(); nerr = nih_error_get();
if (do_devices) {
WARN("call to cgmanager_set_value_sync failed: %s", nerr->message);
nih_free(nerr);
WARN("Error setting cgroup %s:%s limit type %s", controller,
d->cgroup_path, cg->subsystem);
continue;
}
ERROR("call to cgmanager_set_value_sync failed: %s", nerr->message); ERROR("call to cgmanager_set_value_sync failed: %s", nerr->message);
nih_free(nerr); nih_free(nerr);
ERROR("Error setting cgroup %s:%s limit type %s", controller, ERROR("Error setting cgroup %s:%s limit type %s", controller,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment