From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Mon, 3 Dec 2007 18:38:09 +0900 From: KAMEZAWA Hiroyuki Subject: [RFC][for -mm] memory controller enhancements for reclaiming take2 [4/8] possible race fix in res_counter Message-Id: <20071203183809.4b83397c.kamezawa.hiroyu@jp.fujitsu.com> In-Reply-To: <20071203183355.0061ddeb.kamezawa.hiroyu@jp.fujitsu.com> References: <20071203183355.0061ddeb.kamezawa.hiroyu@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org Return-Path: To: KAMEZAWA Hiroyuki Cc: "linux-mm@kvack.org" , "containers@lists.osdl.org" , Andrew Morton , "balbir@linux.vnet.ibm.com" , "yamamoto@valinux.co.jp" , "riel@redhat.com" , xemul@openvz.org List-ID: spinlock is necessary when someone changes res->counter value. splited out from YAMAMOTO's background page reclaim for memory cgroup set. Changelog v1 -> v2: - fixed type of "flags". Signed-off-by: KAMEZAWA Hiroyuki From: YAMAMOTO Takashi kernel/res_counter.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) Index: linux-2.6.24-rc3-mm2/kernel/res_counter.c =================================================================== --- linux-2.6.24-rc3-mm2.orig/kernel/res_counter.c +++ linux-2.6.24-rc3-mm2/kernel/res_counter.c @@ -98,6 +98,7 @@ ssize_t res_counter_write(struct res_cou { int ret; char *buf, *end; + unsigned long flags; unsigned long long tmp, *val; buf = kmalloc(nbytes + 1, GFP_KERNEL); @@ -121,9 +122,10 @@ ssize_t res_counter_write(struct res_cou if (*end != '\0') goto out_free; } - + spin_lock_irqsave(&counter->lock, flags); val = res_counter_member(counter, member); *val = tmp; + spin_unlock_irqrestore(&counter->lock, flags); ret = nbytes; out_free: kfree(buf); -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org