on 2010-3-9 5:22, David Rientjes wrote: > 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. ok, I'll do it. > >> @@ -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. scan_for_empty_cpusets() will update top_cpuset.mems_allowed when doing MEM_OFFLINE. The comment of this source is necessary. I'll add it. Thanks! Miao > > -- 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>