|
@@ -2069,6 +2069,20 @@ static void cpuset_bind(struct cgroup_subsys_state *root_css)
|
|
|
mutex_unlock(&cpuset_mutex);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Make sure the new task conform to the current state of its parent,
|
|
|
+ * which could have been changed by cpuset just after it inherits the
|
|
|
+ * state from the parent and before it sits on the cgroup's task list.
|
|
|
+ */
|
|
|
+void cpuset_fork(struct task_struct *task)
|
|
|
+{
|
|
|
+ if (task_css_is_root(task, cpuset_cgrp_id))
|
|
|
+ return;
|
|
|
+
|
|
|
+ set_cpus_allowed_ptr(task, ¤t->cpus_allowed);
|
|
|
+ task->mems_allowed = current->mems_allowed;
|
|
|
+}
|
|
|
+
|
|
|
struct cgroup_subsys cpuset_cgrp_subsys = {
|
|
|
.css_alloc = cpuset_css_alloc,
|
|
|
.css_online = cpuset_css_online,
|
|
@@ -2079,6 +2093,7 @@ struct cgroup_subsys cpuset_cgrp_subsys = {
|
|
|
.attach = cpuset_attach,
|
|
|
.post_attach = cpuset_post_attach,
|
|
|
.bind = cpuset_bind,
|
|
|
+ .fork = cpuset_fork,
|
|
|
.legacy_cftypes = files,
|
|
|
.early_init = true,
|
|
|
};
|