You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
hugetlb/cgroup: migrate hugetlb cgroup info from oldpage to new page during migration
With HugeTLB pages, hugetlb cgroup is uncharged in compound page destructor. Since we are holding a hugepage reference, we can be sure that old page won't get uncharged till the last put_page(). Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: David Rientjes <rientjes@google.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Hillf Danton <dhillf@gmail.com> Cc: Michal Hocko <mhocko@suse.cz> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
abb8206cb0
commit
8e6ac7fab3
@@ -386,6 +386,26 @@ int __init hugetlb_cgroup_file_init(int idx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hugetlb_cgroup_migrate(struct page *oldhpage, struct page *newhpage)
|
||||
{
|
||||
struct hugetlb_cgroup *h_cg;
|
||||
|
||||
if (hugetlb_cgroup_disabled())
|
||||
return;
|
||||
|
||||
VM_BUG_ON(!PageHuge(oldhpage));
|
||||
spin_lock(&hugetlb_lock);
|
||||
h_cg = hugetlb_cgroup_from_page(oldhpage);
|
||||
set_hugetlb_cgroup(oldhpage, NULL);
|
||||
cgroup_exclude_rmdir(&h_cg->css);
|
||||
|
||||
/* move the h_cg details to new cgroup */
|
||||
set_hugetlb_cgroup(newhpage, h_cg);
|
||||
spin_unlock(&hugetlb_lock);
|
||||
cgroup_release_and_wakeup_rmdir(&h_cg->css);
|
||||
return;
|
||||
}
|
||||
|
||||
struct cgroup_subsys hugetlb_subsys = {
|
||||
.name = "hugetlb",
|
||||
.create = hugetlb_cgroup_create,
|
||||
|
||||
Reference in New Issue
Block a user