Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 308921
b: refs/heads/master
c: 2f3479b
h: refs/heads/master
i:
  308919: d01eb31
v: v3
  • Loading branch information
KAMEZAWA Hiroyuki authored and Linus Torvalds committed May 29, 2012
1 parent 08766a6 commit 42cf7d9
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cc926f78420705817b807dbec0c5d3643827eba3
refs/heads/master: 2f3479b1478e223f142fe9cd27a2d2a4c3573c53
20 changes: 6 additions & 14 deletions trunk/mm/memcontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -2592,23 +2592,19 @@ void mem_cgroup_split_huge_fixup(struct page *head)
* @pc: page_cgroup of the page.
* @from: mem_cgroup which the page is moved from.
* @to: mem_cgroup which the page is moved to. @from != @to.
* @uncharge: whether we should call uncharge and css_put against @from.
*
* The caller must confirm following.
* - page is not on LRU (isolate_page() is useful.)
* - compound_lock is held when nr_pages > 1
*
* This function doesn't do "charge" nor css_get to new cgroup. It should be
* done by a caller(__mem_cgroup_try_charge would be useful). If @uncharge is
* true, this function does "uncharge" from old cgroup, but it doesn't if
* @uncharge is false, so a caller should do "uncharge".
* This function doesn't do "charge" to new cgroup and doesn't do "uncharge"
* from old cgroup.
*/
static int mem_cgroup_move_account(struct page *page,
unsigned int nr_pages,
struct page_cgroup *pc,
struct mem_cgroup *from,
struct mem_cgroup *to,
bool uncharge)
struct mem_cgroup *to)
{
unsigned long flags;
int ret;
Expand Down Expand Up @@ -2642,9 +2638,6 @@ static int mem_cgroup_move_account(struct page *page,
preempt_enable();
}
mem_cgroup_charge_statistics(from, anon, -nr_pages);
if (uncharge)
/* This is not "cancel", but cancel_charge does all we need. */
__mem_cgroup_cancel_charge(from, nr_pages);

/* caller should have done css_get */
pc->mem_cgroup = to;
Expand Down Expand Up @@ -2706,7 +2699,7 @@ static int mem_cgroup_move_parent(struct page *page,
flags = compound_lock_irqsave(page);

ret = mem_cgroup_move_account(page, nr_pages,
pc, child, parent, false);
pc, child, parent);
if (!ret)
__mem_cgroup_cancel_local_charge(child, nr_pages);

Expand Down Expand Up @@ -5474,8 +5467,7 @@ static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
if (!isolate_lru_page(page)) {
pc = lookup_page_cgroup(page);
if (!mem_cgroup_move_account(page, HPAGE_PMD_NR,
pc, mc.from, mc.to,
false)) {
pc, mc.from, mc.to)) {
mc.precharge -= HPAGE_PMD_NR;
mc.moved_charge += HPAGE_PMD_NR;
}
Expand Down Expand Up @@ -5505,7 +5497,7 @@ static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
goto put;
pc = lookup_page_cgroup(page);
if (!mem_cgroup_move_account(page, 1, pc,
mc.from, mc.to, false)) {
mc.from, mc.to)) {
mc.precharge--;
/* we uncharge from mc.from later. */
mc.moved_charge++;
Expand Down

0 comments on commit 42cf7d9

Please sign in to comment.