From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: Pavel Emelianov <xemul@sw.ru>
Cc: Andrew Morton <akpm@osdl.org>, Paul Menage <menage@google.com>,
Srivatsa Vaddagiri <vatsa@in.ibm.com>,
Balbir Singh <balbir@in.ibm.com>,
devel@openvz.org,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Kirill Korotaev <dev@sw.ru>,
Chandra Seetharaman <sekharan@us.ibm.com>,
Cedric Le Goater <clg@fr.ibm.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Rohit Seth <rohitseth@google.com>,
Linux Containers <containers@lists.osdl.org>,
Linux Memory Management List <linux-mm@kvack.org>
Subject: Re: [PATCH 8/8] Per-container pages reclamation
Date: Thu, 24 May 2007 13:29:55 +0530 [thread overview]
Message-ID: <465545FB.2080801@linux.vnet.ibm.com> (raw)
In-Reply-To: <4651B794.4040302@sw.ru>
[-- Attachment #1: Type: text/plain, Size: 1048 bytes --]
Pavel Emelianov wrote:
>> Index: linux-2.6.20/mm/rss_container.c
>> ===================================================================
>> --- linux-2.6.20.orig/mm/rss_container.c 2007-05-15 05:13:46.000000000 -0700
>> +++ linux-2.6.20/mm/rss_container.c 2007-05-16 20:45:45.000000000 -0700
>> @@ -212,6 +212,7 @@ void container_rss_del(struct page_conta
>>
>> css_put(&rss->css);
>> kfree(pc);
>> + init_page_container(page);
>
> This hunk is bad.
> See, when the page drops its mapcount to 0 it may be reused right
> after this if it belongs to a file map - another CPU can touch it.
> Thus you're risking to reset the wrong container.
>
> The main idea if the accounting is that you cannot trust the
> page_container(page) value after the page's mapcount became 0.
>
Good catch, I'll move the initialization to free_hot_cold_page().
I'm attaching a new patch. I've also gotten rid of the unused
variable page in container_rss_del().
I've compile and boot tested the fix
--
Thanks,
Balbir Singh
Linux Technology Center
IBM, ISTL
[-- Attachment #2: rss-fix-lru-race.patch --]
[-- Type: text/x-patch, Size: 2617 bytes --]
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
---
Index: linux-2.6.20/mm/page_alloc.c
===================================================================
--- linux-2.6.20.orig/mm/page_alloc.c 2007-05-16 10:30:10.000000000 -0700
+++ linux-2.6.20/mm/page_alloc.c 2007-05-24 00:41:00.000000000 -0700
@@ -41,6 +41,7 @@
#include <linux/pfn.h>
#include <linux/backing-dev.h>
#include <linux/fault-inject.h>
+#include <linux/rss_container.h>
#include <asm/tlbflush.h>
#include <asm/div64.h>
@@ -791,6 +792,7 @@ static void fastcall free_hot_cold_page(
if (!PageHighMem(page))
debug_check_no_locks_freed(page_address(page), PAGE_SIZE);
+ init_page_container(page);
arch_free_page(page, 0);
kernel_map_pages(page, 1, 0);
@@ -1977,6 +1979,7 @@ void __meminit memmap_init_zone(unsigned
set_page_links(page, zone, nid, pfn);
init_page_count(page);
reset_page_mapcount(page);
+ init_page_container(page);
SetPageReserved(page);
INIT_LIST_HEAD(&page->lru);
#ifdef WANT_PAGE_VIRTUAL
Index: linux-2.6.20/include/linux/rss_container.h
===================================================================
--- linux-2.6.20.orig/include/linux/rss_container.h 2007-05-16 10:31:04.000000000 -0700
+++ linux-2.6.20/include/linux/rss_container.h 2007-05-16 10:32:14.000000000 -0700
@@ -28,6 +28,11 @@ void container_rss_move_lists(struct pag
unsigned long isolate_pages_in_container(unsigned long nr_to_scan,
struct list_head *dst, unsigned long *scanned,
struct zone *zone, struct rss_container *, int active);
+static inline void init_page_container(struct page *page)
+{
+ page_container(page) = NULL;
+}
+
#else
static inline int container_rss_prepare(struct page *pg,
struct vm_area_struct *vma, struct page_container **pc)
@@ -56,6 +61,10 @@ static inline void mm_free_container(str
{
}
+static inline void init_page_container(struct page *page)
+{
+}
+
#define isolate_container_pages(nr, dst, scanned, rss, act, zone) ({ BUG(); 0;})
#define container_rss_move_lists(pg, active) do { } while (0)
#endif
Index: linux-2.6.20/mm/rss_container.c
===================================================================
--- linux-2.6.20.orig/mm/rss_container.c 2007-05-15 05:13:46.000000000 -0700
+++ linux-2.6.20/mm/rss_container.c 2007-05-24 00:58:43.000000000 -0700
@@ -199,12 +199,9 @@ void container_rss_add(struct page_conta
void container_rss_del(struct page_container *pc)
{
- struct page *page;
struct rss_container *rss;
- page = pc->page;
rss = pc->cnt;
-
spin_lock_irq(&rss->res.lock);
list_del(&pc->list);
res_counter_uncharge_locked(&rss->res, 1);
next prev parent reply other threads:[~2007-05-24 8:01 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-09 12:22 [PATCH 0/8] RSS controller based on process containers (v2) Pavel Emelianov
2007-04-09 12:35 ` [PATCH 1/8] Resource counters Pavel Emelianov
2007-04-09 12:41 ` [PATCH 2/8] Add container pointer on struct page Pavel Emelianov
2007-04-13 13:56 ` Jean-Pierre Dion
2007-04-13 14:52 ` Pavel Emelianov
2007-04-09 12:46 ` [PATCH 3/8] Add container pointer on mm_struct Pavel Emelianov
2007-04-09 12:49 ` [PATCH 4/8] RSS container core Pavel Emelianov
2007-04-09 12:54 ` [PATCH 5/8] RSS accounting hooks over the code Pavel Emelianov
2007-04-09 12:56 ` [PATCH 6/8] Per container OOM killer Pavel Emelianov
2007-04-09 13:00 ` [PATCH 7/8] Page scanner changes needed to implement per-container scanner Pavel Emelianov
2007-04-09 13:02 ` [PATCH 8/8] Per-container pages reclamation Pavel Emelianov
2007-04-24 9:47 ` Balbir Singh
2007-04-24 10:34 ` Pavel Emelianov
2007-04-24 11:01 ` Balbir Singh
2007-04-24 11:37 ` Pavel Emelianov
2007-05-02 9:51 ` Balbir Singh
2007-05-17 11:31 ` Balbir Singh
2007-05-21 15:15 ` Pavel Emelianov
2007-05-21 15:15 ` Pavel Emelianov
2007-05-24 7:59 ` Balbir Singh [this message]
2007-04-09 15:54 ` [PATCH 0/8] RSS controller based on process containers (v2) Peter Zijlstra
2007-04-10 8:30 ` Pavel Emelianov
2007-04-19 5:37 ` Vaidyanathan Srinivasan
-- strict thread matches above, loose matches on Subject: below --
2007-05-30 15:24 [PATCH 0/8] RSS controller based on process containers (v3) Pavel Emelianov
2007-05-30 15:42 ` [PATCH 8/8] Per-container pages reclamation Pavel Emelianov
2007-05-30 21:47 ` Andrew Morton
2007-05-31 8:22 ` Vaidyanathan Srinivasan
2007-05-31 9:22 ` Balbir Singh
2007-06-01 9:27 ` Pavel Emelianov
2007-06-01 9:23 ` Balbir Singh
2007-05-31 10:35 ` Pavel Emelianov
2007-05-31 17:58 ` Andrew Morton
2007-06-01 7:44 ` Pavel Emelianov
2007-06-01 7:49 ` Andrew Morton
2007-06-01 7:02 ` Balbir Singh
2007-06-01 7:50 ` Pavel Emelianov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=465545FB.2080801@linux.vnet.ibm.com \
--to=balbir@linux.vnet.ibm.com \
--cc=akpm@osdl.org \
--cc=balbir@in.ibm.com \
--cc=clg@fr.ibm.com \
--cc=containers@lists.osdl.org \
--cc=dev@sw.ru \
--cc=devel@openvz.org \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=menage@google.com \
--cc=rohitseth@google.com \
--cc=sekharan@us.ibm.com \
--cc=vatsa@in.ibm.com \
--cc=xemul@sw.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.