Skip to content

Commit 325efb1

Browse files
Barry Songakpm00
authored andcommitted
mm: add nr argument in mem_cgroup_swapin_uncharge_swap() helper to support large folios
With large folios swap-in, we might need to uncharge multiple entries all together, add nr argument in mem_cgroup_swapin_uncharge_swap(). For the existing two users, just pass nr=1. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Barry Song <[email protected]> Acked-by: Chris Li <[email protected]> Reviewed-by: Yosry Ahmed <[email protected]> Cc: Shakeel Butt <[email protected]> Cc: Baolin Wang <[email protected]> Cc: Christoph Hellwig <[email protected]> Cc: David Hildenbrand <[email protected]> Cc: Gao Xiang <[email protected]> Cc: "Huang, Ying" <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Kairui Song <[email protected]> Cc: Kairui Song <[email protected]> Cc: Kalesh Singh <[email protected]> Cc: Matthew Wilcox (Oracle) <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Minchan Kim <[email protected]> Cc: Nhat Pham <[email protected]> Cc: Ryan Roberts <[email protected]> Cc: Sergey Senozhatsky <[email protected]> Cc: Suren Baghdasaryan <[email protected]> Cc: Yang Shi <[email protected]> Cc: Chuanhua Han <[email protected]> Cc: Kanchana P Sridhar <[email protected]> Cc: Usama Arif <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 9d57090 commit 325efb1

File tree

4 files changed

+9
-7
lines changed

4 files changed

+9
-7
lines changed

include/linux/memcontrol.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,8 @@ int mem_cgroup_hugetlb_try_charge(struct mem_cgroup *memcg, gfp_t gfp,
699699

700700
int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm,
701701
gfp_t gfp, swp_entry_t entry);
702-
void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry);
702+
703+
void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr_pages);
703704

704705
void __mem_cgroup_uncharge(struct folio *folio);
705706

@@ -1206,7 +1207,7 @@ static inline int mem_cgroup_swapin_charge_folio(struct folio *folio,
12061207
return 0;
12071208
}
12081209

1209-
static inline void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry)
1210+
static inline void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr)
12101211
{
12111212
}
12121213

mm/memcontrol.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4559,14 +4559,15 @@ int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm,
45594559

45604560
/*
45614561
* mem_cgroup_swapin_uncharge_swap - uncharge swap slot
4562-
* @entry: swap entry for which the page is charged
4562+
* @entry: the first swap entry for which the pages are charged
4563+
* @nr_pages: number of pages which will be uncharged
45634564
*
45644565
* Call this function after successfully adding the charged page to swapcache.
45654566
*
45664567
* Note: This function assumes the page for which swap slot is being uncharged
45674568
* is order 0 page.
45684569
*/
4569-
void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry)
4570+
void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)
45704571
{
45714572
/*
45724573
* Cgroup1's unified memory+swap counter has been charged with the
@@ -4586,7 +4587,7 @@ void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry)
45864587
* let's not wait for it. The page already received a
45874588
* memory+swap charge, drop the swap entry duplicate.
45884589
*/
4589-
mem_cgroup_uncharge_swap(entry, 1);
4590+
mem_cgroup_uncharge_swap(entry, nr_pages);
45904591
}
45914592
}
45924593

mm/memory.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4104,7 +4104,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
41044104
ret = VM_FAULT_OOM;
41054105
goto out_page;
41064106
}
4107-
mem_cgroup_swapin_uncharge_swap(entry);
4107+
mem_cgroup_swapin_uncharge_swap(entry, 1);
41084108

41094109
shadow = get_shadow_from_swap_cache(entry);
41104110
if (shadow)

mm/swap_state.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ struct folio *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
522522
if (add_to_swap_cache(new_folio, entry, gfp_mask & GFP_RECLAIM_MASK, &shadow))
523523
goto fail_unlock;
524524

525-
mem_cgroup_swapin_uncharge_swap(entry);
525+
mem_cgroup_swapin_uncharge_swap(entry, 1);
526526

527527
if (shadow)
528528
workingset_refault(new_folio, shadow);

0 commit comments

Comments
 (0)