From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756081AbZBCWRU (ORCPT ); Tue, 3 Feb 2009 17:17:20 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751655AbZBCWRM (ORCPT ); Tue, 3 Feb 2009 17:17:12 -0500 Received: from smtp1.linux-foundation.org ([140.211.169.13]:49519 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751302AbZBCWRK (ORCPT ); Tue, 3 Feb 2009 17:17:10 -0500 Date: Tue, 3 Feb 2009 14:16:45 -0800 From: Andrew Morton To: miaox@cn.fujitsu.com Cc: mingo@elte.hu, menage@google.com, linux-kernel@vger.kernel.org, cl@linux-foundation.org, nickpiggin@yahoo.com.au Subject: Re: [PATCH] cpuset: fix allocating page cache/slab object on the unallowed node when memory spread is set Message-Id: <20090203141645.91c7ea18.akpm@linux-foundation.org> In-Reply-To: <4987B925.1010405@cn.fujitsu.com> References: <4976D77C.3020107@cn.fujitsu.com> <20090127144233.18cf9b3f.akpm@linux-foundation.org> <4987B925.1010405@cn.fujitsu.com> X-Mailer: Sylpheed version 2.2.4 (GTK+ 2.8.20; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 03 Feb 2009 11:25:25 +0800 Miao Xie wrote: > on 2009-1-28 6:42 Andrew Morton wrote: > > On Wed, 21 Jan 2009 16:06:20 +0800 > > Miao Xie wrote: > > > >> The task still allocated the page caches on old node after modifying its > >> cpuset's mems when 'memory_spread_page' was set, it is caused by the old > >> mem_allowed_list of the task, the current kernel doesn't updates it unless some > >> function invokes cpuset_update_task_memory_state(), it is too late sometimes. > >> We must update the mem_allowed_list of the tasks in time. > >> > >> Slab has the same problem. > >> > >> We fixes the bug by updating tasks' mem_allowed_list and spread flag after > >> its cpuset's mems or spread flag is changed. > >> > >> > >> ... > >> > >> --- a/kernel/kthread.c > >> +++ b/kernel/kthread.c > >> @@ -242,6 +242,7 @@ int kthreadd(void *unused) > >> set_user_nice(tsk, KTHREAD_NICE_LEVEL); > >> set_cpus_allowed_ptr(tsk, CPU_MASK_ALL_PTR); > >> > >> + current->mems_allowed = node_possible_map; > >> current->flags |= PF_NOFREEZE | PF_FREEZER_NOSIG; > > > > Why this change? kthreadd() is called from rest_init(), before anyone > > has had a chance to alter ->mems_allowed? > > I found that after mems_allowed of kthreadd was not initialized applying this patch, > every bit of it is 1, so... > Maybe it is redundant. I think it is redundant. kthreadd's mems_allowed _should_ be all-ones. Or at least, all-nodes-allowed. I wasn't able to find out where the setting of init'smems_allowed happens, after a bit of grepping and hunting. It should be done within INIT_TASK, but isn't. Still, kthreadd is reliably parented by swapper, and there shold be no need to alter its mems_allowed. Similarly, what was the reason for setting current->mems_allowed in kernel_init()? That also should be unneeded. Finally, I've somewhat lost track of where we are with this patch. Paul, do you see any other remaining issues?