2009-12-02 04:41:38

by Fengguang Wu

[permalink] [raw]
Subject: [PATCH 19/24] memcg: rename and export try_get_mem_cgroup_from_page()

So that the hwpoison injector can get mem_cgroup for arbitrary page
and thus know whether it is owned by some mem_cgroup task(s).

CC: KOSAKI Motohiro <[email protected]>
CC: Hugh Dickins <[email protected]>
CC: Daisuke Nishimura <[email protected]>
CC: Balbir Singh <[email protected]>
Acked-by: KAMEZAWA Hiroyuki <[email protected]>
Signed-off-by: Wu Fengguang <[email protected]>
---
include/linux/memcontrol.h | 6 ++++++
mm/memcontrol.c | 11 ++++-------
2 files changed, 10 insertions(+), 7 deletions(-)

--- linux-mm.orig/mm/memcontrol.c 2009-11-02 10:18:42.000000000 +0800
+++ linux-mm/mm/memcontrol.c 2009-11-02 10:26:21.000000000 +0800
@@ -1379,25 +1379,22 @@ static struct mem_cgroup *mem_cgroup_loo
return container_of(css, struct mem_cgroup, css);
}

-static struct mem_cgroup *try_get_mem_cgroup_from_swapcache(struct page *page)
+struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
{
- struct mem_cgroup *mem;
+ struct mem_cgroup *mem = NULL;
struct page_cgroup *pc;
unsigned short id;
swp_entry_t ent;

VM_BUG_ON(!PageLocked(page));

- if (!PageSwapCache(page))
- return NULL;
-
pc = lookup_page_cgroup(page);
lock_page_cgroup(pc);
if (PageCgroupUsed(pc)) {
mem = pc->mem_cgroup;
if (mem && !css_tryget(&mem->css))
mem = NULL;
- } else {
+ } else if (PageSwapCache(page)) {
ent.val = page_private(page);
id = lookup_swap_cgroup(ent);
rcu_read_lock();
@@ -1742,7 +1739,7 @@ int mem_cgroup_try_charge_swapin(struct
*/
if (!PageSwapCache(page))
return 0;
- mem = try_get_mem_cgroup_from_swapcache(page);
+ mem = try_get_mem_cgroup_from_page(page);
if (!mem)
goto charge_cur_mm;
*ptr = mem;
--- linux-mm.orig/include/linux/memcontrol.h 2009-11-02 10:18:42.000000000 +0800
+++ linux-mm/include/linux/memcontrol.h 2009-11-02 10:26:21.000000000 +0800
@@ -68,6 +68,7 @@ extern unsigned long mem_cgroup_isolate_
extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);

+extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);

static inline
@@ -189,6 +190,11 @@ mem_cgroup_move_lists(struct page *page,
{
}

+static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
+{
+ return NULL;
+}
+
static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
{
return 1;


2009-12-03 01:58:27

by Balbir Singh

[permalink] [raw]
Subject: Re: [PATCH 19/24] memcg: rename and export try_get_mem_cgroup_from_page()

* Wu Fengguang <[email protected]> [2009-12-02 11:12:50]:

> So that the hwpoison injector can get mem_cgroup for arbitrary page
> and thus know whether it is owned by some mem_cgroup task(s).
>
> CC: KOSAKI Motohiro <[email protected]>
> CC: Hugh Dickins <[email protected]>
> CC: Daisuke Nishimura <[email protected]>
> CC: Balbir Singh <[email protected]>
> Acked-by: KAMEZAWA Hiroyuki <[email protected]>
> Signed-off-by: Wu Fengguang <[email protected]>

Sorry for the delay in reviewing, I am attending a conference this
week. I'll try and get to them soon.

--
Balbir