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

cgroups: do not fail if setting devices cgroup fails due to EPERM
This commit is contained in:
Stéphane Graber 2016-02-19 18:25:02 -05:00
commit b9138559c3
2 changed files with 16 additions and 0 deletions

View File

@ -1285,10 +1285,13 @@ static int lxc_cgroup_set_data(const char *filename, const char *value, struct c
if ((p = strchr(subsystem, '.')) != NULL)
*p = '\0';
errno = ENOENT;
path = lxc_cgroup_get_hierarchy_abs_path_data(subsystem, d);
if (path) {
ret = do_cgroup_set(path, filename, value);
int saved_errno = errno;
free(path);
errno = saved_errno;
}
return ret;
}
@ -1915,6 +1918,11 @@ static int do_setup_cgroup_limits(struct cgfs_data *d,
cgroup_devices_has_allow_or_deny(d, cg->value, true))
continue;
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",
cg->subsystem, cg->value, d->name);
goto out;

View File

@ -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) {
NihError *nerr;
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);
nih_free(nerr);
ERROR("Error setting cgroup %s:%s limit type %s", controller,