mirror of
https://github.com/torvalds/linux.git
synced 2024-11-29 15:41:36 +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)
|
unsigned long addr, pte_t ptent, union mc_target *target)
|
||||||
{
|
{
|
||||||
struct page *page = NULL;
|
struct page *page = NULL;
|
||||||
|
struct folio *folio;
|
||||||
enum mc_target_type ret = MC_TARGET_NONE;
|
enum mc_target_type ret = MC_TARGET_NONE;
|
||||||
swp_entry_t ent = { .val = 0 };
|
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))
|
else if (is_swap_pte(ptent))
|
||||||
page = mc_handle_swap_pte(vma, ptent, &ent);
|
page = mc_handle_swap_pte(vma, ptent, &ent);
|
||||||
|
|
||||||
|
if (page)
|
||||||
|
folio = page_folio(page);
|
||||||
if (target && page) {
|
if (target && page) {
|
||||||
if (!trylock_page(page)) {
|
if (!folio_trylock(folio)) {
|
||||||
put_page(page);
|
folio_put(folio);
|
||||||
return ret;
|
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.
|
* Alas, skip moving the page in this case.
|
||||||
*/
|
*/
|
||||||
if (!pte_present(ptent) && page_mapped(page)) {
|
if (!pte_present(ptent) && page_mapped(page)) {
|
||||||
unlock_page(page);
|
folio_unlock(folio);
|
||||||
put_page(page);
|
folio_put(folio);
|
||||||
return ret;
|
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
|
* mem_cgroup_move_account() checks the page is valid or
|
||||||
* not under LRU exclusion.
|
* not under LRU exclusion.
|
||||||
*/
|
*/
|
||||||
if (page_memcg(page) == mc.from) {
|
if (folio_memcg(folio) == mc.from) {
|
||||||
ret = MC_TARGET_PAGE;
|
ret = MC_TARGET_PAGE;
|
||||||
if (is_device_private_page(page) ||
|
if (folio_is_device_private(folio) ||
|
||||||
is_device_coherent_page(page))
|
folio_is_device_coherent(folio))
|
||||||
ret = MC_TARGET_DEVICE;
|
ret = MC_TARGET_DEVICE;
|
||||||
if (target)
|
if (target)
|
||||||
target->folio = page_folio(page);
|
target->folio = folio;
|
||||||
}
|
}
|
||||||
if (!ret || !target) {
|
if (!ret || !target) {
|
||||||
if (target)
|
if (target)
|
||||||
unlock_page(page);
|
folio_unlock(folio);
|
||||||
put_page(page);
|
folio_put(folio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user