mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
memcg: use a folio in get_mctgt_type
Replace seven calls to compound_head() with one. We still use the page as page_mapped() is different from folio_mapped(). Link: https://lkml.kernel.org/r/20240111181219.3462852-4-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev> Reviewed-by: Muchun Song <muchun.song@linux.dev> Acked-by: Shakeel Butt <shakeelb@google.com> Acked-by: Michal Hocko <mhocko@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
b46777da7d
commit
b67fa6e47b
@ -6109,6 +6109,7 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t ptent, union mc_target *target)
|
||||
{
|
||||
struct page *page = NULL;
|
||||
struct folio *folio;
|
||||
enum mc_target_type ret = MC_TARGET_NONE;
|
||||
swp_entry_t ent = { .val = 0 };
|
||||
|
||||
@ -6123,9 +6124,11 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
|
||||
else if (is_swap_pte(ptent))
|
||||
page = mc_handle_swap_pte(vma, ptent, &ent);
|
||||
|
||||
if (page)
|
||||
folio = page_folio(page);
|
||||
if (target && page) {
|
||||
if (!trylock_page(page)) {
|
||||
put_page(page);
|
||||
if (!folio_trylock(folio)) {
|
||||
folio_put(folio);
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
@ -6140,8 +6143,8 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
|
||||
* Alas, skip moving the page in this case.
|
||||
*/
|
||||
if (!pte_present(ptent) && page_mapped(page)) {
|
||||
unlock_page(page);
|
||||
put_page(page);
|
||||
folio_unlock(folio);
|
||||
folio_put(folio);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@ -6154,18 +6157,18 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
|
||||
* mem_cgroup_move_account() checks the page is valid or
|
||||
* not under LRU exclusion.
|
||||
*/
|
||||
if (page_memcg(page) == mc.from) {
|
||||
if (folio_memcg(folio) == mc.from) {
|
||||
ret = MC_TARGET_PAGE;
|
||||
if (is_device_private_page(page) ||
|
||||
is_device_coherent_page(page))
|
||||
if (folio_is_device_private(folio) ||
|
||||
folio_is_device_coherent(folio))
|
||||
ret = MC_TARGET_DEVICE;
|
||||
if (target)
|
||||
target->folio = page_folio(page);
|
||||
target->folio = folio;
|
||||
}
|
||||
if (!ret || !target) {
|
||||
if (target)
|
||||
unlock_page(page);
|
||||
put_page(page);
|
||||
folio_unlock(folio);
|
||||
folio_put(folio);
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user