Skip to content

Commit

Permalink
mm: memcontrol: replace the loop with a list_for_each_entry()
Browse files Browse the repository at this point in the history
The rule of list walk has gone since commit a9d5ade
("mm/memcontrol: allow to uncharge page without using page->lru field")

So remove the strange comment and replace the loop with a
list_for_each_entry().

There is only one caller of the uncharge_list().  So just fold it into
mem_cgroup_uncharge_list() and remove it.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Muchun Song <[email protected]>
Acked-by: Johannes Weiner <[email protected]>
Acked-by: Roman Gushchin <[email protected]>
Reviewed-by: Miaohe Lin <[email protected]>
Acked-by: Michal Hocko <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Muchun Song authored and torvalds committed Feb 24, 2021
1 parent 8a26016 commit c41a40b
Showing 1 changed file with 8 additions and 27 deletions.
35 changes: 8 additions & 27 deletions mm/memcontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -6862,31 +6862,6 @@ static void uncharge_page(struct page *page, struct uncharge_gather *ug)
css_put(&ug->memcg->css);
}

static void uncharge_list(struct list_head *page_list)
{
struct uncharge_gather ug;
struct list_head *next;

uncharge_gather_clear(&ug);

/*
* Note that the list can be a single page->lru; hence the
* do-while loop instead of a simple list_for_each_entry().
*/
next = page_list->next;
do {
struct page *page;

page = list_entry(next, struct page, lru);
next = page->lru.next;

uncharge_page(page, &ug);
} while (next != page_list);

if (ug.memcg)
uncharge_batch(&ug);
}

/**
* mem_cgroup_uncharge - uncharge a page
* @page: page to uncharge
Expand Down Expand Up @@ -6918,11 +6893,17 @@ void mem_cgroup_uncharge(struct page *page)
*/
void mem_cgroup_uncharge_list(struct list_head *page_list)
{
struct uncharge_gather ug;
struct page *page;

if (mem_cgroup_disabled())
return;

if (!list_empty(page_list))
uncharge_list(page_list);
uncharge_gather_clear(&ug);
list_for_each_entry(page, page_list, lru)
uncharge_page(page, &ug);
if (ug.memcg)
uncharge_batch(&ug);
}

/**
Expand Down

0 comments on commit c41a40b

Please sign in to comment.