hugetlb_cgroup: pass around @hugetlb_cgroup instead of @cgroup
cgroup controller API will be converted to primarily use struct cgroup_subsys_state instead of struct cgroup. In preparation, make hugetlb_cgroup functions pass around struct hugetlb_cgroup instead of struct cgroup. This patch shouldn't cause any behavior differences. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com> Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Reviewed-by: Michal Hocko <mhocko@suse.cz> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Johannes Weiner <hannes@cmpxchg.org>
This commit is contained in:
Родитель
6d37b97428
Коммит
3f79851831
|
@ -56,17 +56,19 @@ static inline bool hugetlb_cgroup_is_root(struct hugetlb_cgroup *h_cg)
|
|||
return (h_cg == root_h_cgroup);
|
||||
}
|
||||
|
||||
static inline struct hugetlb_cgroup *parent_hugetlb_cgroup(struct cgroup *cg)
|
||||
static inline struct hugetlb_cgroup *
|
||||
parent_hugetlb_cgroup(struct hugetlb_cgroup *h_cg)
|
||||
{
|
||||
if (!cg->parent)
|
||||
struct cgroup *parent = h_cg->css.cgroup->parent;
|
||||
|
||||
if (!parent)
|
||||
return NULL;
|
||||
return hugetlb_cgroup_from_cgroup(cg->parent);
|
||||
return hugetlb_cgroup_from_cgroup(parent);
|
||||
}
|
||||
|
||||
static inline bool hugetlb_cgroup_have_usage(struct cgroup *cg)
|
||||
static inline bool hugetlb_cgroup_have_usage(struct hugetlb_cgroup *h_cg)
|
||||
{
|
||||
int idx;
|
||||
struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_cgroup(cg);
|
||||
|
||||
for (idx = 0; idx < hugetlb_max_hstate; idx++) {
|
||||
if ((res_counter_read_u64(&h_cg->hugepage[idx], RES_USAGE)) > 0)
|
||||
|
@ -115,15 +117,14 @@ static void hugetlb_cgroup_css_free(struct cgroup *cgroup)
|
|||
* page reference and test for page active here. This function
|
||||
* cannot fail.
|
||||
*/
|
||||
static void hugetlb_cgroup_move_parent(int idx, struct cgroup *cgroup,
|
||||
static void hugetlb_cgroup_move_parent(int idx, struct hugetlb_cgroup *h_cg,
|
||||
struct page *page)
|
||||
{
|
||||
int csize;
|
||||
struct res_counter *counter;
|
||||
struct res_counter *fail_res;
|
||||
struct hugetlb_cgroup *page_hcg;
|
||||
struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_cgroup(cgroup);
|
||||
struct hugetlb_cgroup *parent = parent_hugetlb_cgroup(cgroup);
|
||||
struct hugetlb_cgroup *parent = parent_hugetlb_cgroup(h_cg);
|
||||
|
||||
page_hcg = hugetlb_cgroup_from_page(page);
|
||||
/*
|
||||
|
@ -155,6 +156,7 @@ out:
|
|||
*/
|
||||
static void hugetlb_cgroup_css_offline(struct cgroup *cgroup)
|
||||
{
|
||||
struct hugetlb_cgroup *h_cg = hugetlb_cgroup_from_cgroup(cgroup);
|
||||
struct hstate *h;
|
||||
struct page *page;
|
||||
int idx = 0;
|
||||
|
@ -163,13 +165,13 @@ static void hugetlb_cgroup_css_offline(struct cgroup *cgroup)
|
|||
for_each_hstate(h) {
|
||||
spin_lock(&hugetlb_lock);
|
||||
list_for_each_entry(page, &h->hugepage_activelist, lru)
|
||||
hugetlb_cgroup_move_parent(idx, cgroup, page);
|
||||
hugetlb_cgroup_move_parent(idx, h_cg, page);
|
||||
|
||||
spin_unlock(&hugetlb_lock);
|
||||
idx++;
|
||||
}
|
||||
cond_resched();
|
||||
} while (hugetlb_cgroup_have_usage(cgroup));
|
||||
} while (hugetlb_cgroup_have_usage(h_cg));
|
||||
}
|
||||
|
||||
int hugetlb_cgroup_charge_cgroup(int idx, unsigned long nr_pages,
|
||||
|
|
Загрузка…
Ссылка в новой задаче