On Mon, 8 Mar 2010, Miao Xie wrote: > Changes from V1 to V2: > - cleanup two unnecessary smp_wmb() at cpuset_migrate_mm() > This patch is already in -mm without this update, so it's probably better to make this an incremental series basedo n mmotm-2010-03-04-18-05 or later. > @@ -2090,15 +2086,19 @@ static int cpuset_track_online_cpus(struct notifier_block *unused_nb, > static int cpuset_track_online_nodes(struct notifier_block *self, > unsigned long action, void *arg) > { > + nodemask_t oldmems; > + > cgroup_lock(); > switch (action) { > case MEM_ONLINE: > - case MEM_OFFLINE: > + oldmems = top_cpuset.mems_allowed; > mutex_lock(&callback_mutex); > top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; > mutex_unlock(&callback_mutex); > - if (action == MEM_OFFLINE) > - scan_for_empty_cpusets(&top_cpuset); > + update_tasks_nodemask(&top_cpuset, &oldmems, NULL); > + break; > + case MEM_OFFLINE: > + scan_for_empty_cpusets(&top_cpuset); > break; > default: > break; This looks wrong, why isn't top_cpuset.mems_allowed updated for MEM_OFFLINE? If you're going to update it when a new node comes online for (struct memory_notify *)arg->status_change_nid is >= 0, then it should be removed from the nodemask when offlined as well. You'd be calling scan_for_empty_cpusets() needlessly in this code since it'll never change under your hotplug code. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>