]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - mm/hugetlb_cgroup.c
UBUNTU: Ubuntu-5.11.0-19.20
[mirror_ubuntu-hirsute-kernel.git] / mm / hugetlb_cgroup.c
index 9182848dda3e06bca5fc2d12744ad37578ac9b3d..1348819f546cbd4ec5fbecb0d469562998309a7c 100644 (file)
@@ -391,7 +391,8 @@ void hugetlb_cgroup_uncharge_counter(struct resv_map *resv, unsigned long start,
 
 void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
                                         struct file_region *rg,
-                                        unsigned long nr_pages)
+                                        unsigned long nr_pages,
+                                        bool region_del)
 {
        if (hugetlb_cgroup_disabled() || !resv || !rg || !nr_pages)
                return;
@@ -400,7 +401,12 @@ void hugetlb_cgroup_uncharge_file_region(struct resv_map *resv,
            !resv->reservation_counter) {
                page_counter_uncharge(rg->reservation_counter,
                                      nr_pages * resv->pages_per_hpage);
-               css_put(rg->css);
+               /*
+                * Only do css_put(rg->css) when we delete the entire region
+                * because one file_region must hold exactly one css reference.
+                */
+               if (region_del)
+                       css_put(rg->css);
        }
 }