diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cpuset.c | 7 |
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 | ||