Commit e42d9d5d47961fb5db0be65b56dd52fe7b2421f1

Authored by Wu Fengguang
Committed by Andi Kleen
1 parent 478c5ffc0b

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).

[AK: Merged with latest git tree]

CC: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Hugh Dickins <hugh.dickins@tiscali.co.uk>
CC: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
CC: Balbir Singh <balbir@linux.vnet.ibm.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>

Showing 2 changed files with 10 additions and 7 deletions Side-by-side Diff

include/linux/memcontrol.h
... ... @@ -68,6 +68,7 @@
68 68 extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
69 69 int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
70 70  
  71 +extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
71 72 extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
72 73  
73 74 static inline
... ... @@ -187,6 +188,11 @@
187 188 static inline void
188 189 mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
189 190 {
  191 +}
  192 +
  193 +static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
  194 +{
  195 + return NULL;
190 196 }
191 197  
192 198 static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
... ... @@ -1379,25 +1379,22 @@
1379 1379 return container_of(css, struct mem_cgroup, css);
1380 1380 }
1381 1381  
1382   -static struct mem_cgroup *try_get_mem_cgroup_from_swapcache(struct page *page)
  1382 +struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
1383 1383 {
1384   - struct mem_cgroup *mem;
  1384 + struct mem_cgroup *mem = NULL;
1385 1385 struct page_cgroup *pc;
1386 1386 unsigned short id;
1387 1387 swp_entry_t ent;
1388 1388  
1389 1389 VM_BUG_ON(!PageLocked(page));
1390 1390  
1391   - if (!PageSwapCache(page))
1392   - return NULL;
1393   -
1394 1391 pc = lookup_page_cgroup(page);
1395 1392 lock_page_cgroup(pc);
1396 1393 if (PageCgroupUsed(pc)) {
1397 1394 mem = pc->mem_cgroup;
1398 1395 if (mem && !css_tryget(&mem->css))
1399 1396 mem = NULL;
1400   - } else {
  1397 + } else if (PageSwapCache(page)) {
1401 1398 ent.val = page_private(page);
1402 1399 id = lookup_swap_cgroup(ent);
1403 1400 rcu_read_lock();
... ... @@ -1743,7 +1740,7 @@
1743 1740 */
1744 1741 if (!PageSwapCache(page))
1745 1742 goto charge_cur_mm;
1746   - mem = try_get_mem_cgroup_from_swapcache(page);
  1743 + mem = try_get_mem_cgroup_from_page(page);
1747 1744 if (!mem)
1748 1745 goto charge_cur_mm;
1749 1746 *ptr = mem;