aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/cpuset.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index 7326d51eefe1..6eae6639e851 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -1851,6 +1851,7 @@ static void scan_for_empty_cpusets(const struct cpuset *root)
1851 struct cpuset *child; /* scans child cpusets of cp */ 1851 struct cpuset *child; /* scans child cpusets of cp */
1852 struct list_head queue; 1852 struct list_head queue;
1853 struct cgroup *cont; 1853 struct cgroup *cont;
1854 nodemask_t oldmems;
1854 1855
1855 INIT_LIST_HEAD(&queue); 1856 INIT_LIST_HEAD(&queue);
1856 1857
@@ -1870,6 +1871,8 @@ static void scan_for_empty_cpusets(const struct cpuset *root)
1870 nodes_subset(cp->mems_allowed, node_states[N_HIGH_MEMORY])) 1871 nodes_subset(cp->mems_allowed, node_states[N_HIGH_MEMORY]))
1871 continue; 1872 continue;
1872 1873
1874 oldmems = cp->mems_allowed;
1875
1873 /* Remove offline cpus and mems from this cpuset. */ 1876 /* Remove offline cpus and mems from this cpuset. */
1874 mutex_lock(&callback_mutex); 1877 mutex_lock(&callback_mutex);
1875 cpus_and(cp->cpus_allowed, cp->cpus_allowed, cpu_online_map); 1878 cpus_and(cp->cpus_allowed, cp->cpus_allowed, cpu_online_map);
@@ -1881,6 +1884,10 @@ static void scan_for_empty_cpusets(const struct cpuset *root)
1881 if (cpus_empty(cp->cpus_allowed) || 1884 if (cpus_empty(cp->cpus_allowed) ||
1882 nodes_empty(cp->mems_allowed)) 1885 nodes_empty(cp->mems_allowed))
1883 remove_tasks_in_empty_cpuset(cp); 1886 remove_tasks_in_empty_cpuset(cp);
1887 else {
1888 update_tasks_cpumask(cp);
1889 update_tasks_nodemask(cp, &oldmems);
1890 }
1884 } 1891 }
1885} 1892}
1886 1893