Re: [PATCH -V3 7/8] memcg: move HugeTLB resource count to parent cgroup on memcg removal
From: Andrew Morton <hidden>
Date: 2012-03-13 21:47:11
Also in:
linux-mm, lkml
From: Andrew Morton <hidden>
Date: 2012-03-13 21:47:11
Also in:
linux-mm, lkml
On Tue, 13 Mar 2012 12:37:11 +0530 "Aneesh Kumar K.V" [off-list ref] wrote:
From: "Aneesh Kumar K.V" <redacted> This add support for memcg removal with HugeTLB resource usage. ... +int hugetlb_force_memcg_empty(struct cgroup *cgroup)
It's useful to document things, you know. For a major function like this, a nice little description of why it exists, what its role is, etc. Programming is not just an act of telling a computer what to do: it is also an act of telling other programmers what you wished the computer to do. Both are important, and the latter deserves care.
+{
+ struct hstate *h;
+ struct page *page;
+ int ret = 0, idx = 0;
+
+ do {
+ if (cgroup_task_count(cgroup) || !list_empty(&cgroup->children))
+ goto out;
+ if (signal_pending(current)) {
+ ret = -EINTR;
+ goto out;
+ }Why is its behaviour altered by signal_pending()? This seems broken.
+ for_each_hstate(h) {
+ spin_lock(&hugetlb_lock);
+ list_for_each_entry(page, &h->hugepage_activelist, lru) {
+ ret = mem_cgroup_move_hugetlb_parent(idx, cgroup, page);
+ if (ret) {
+ spin_unlock(&hugetlb_lock);
+ goto out;
+ }
+ }
+ spin_unlock(&hugetlb_lock);
+ idx++;
+ }
+ cond_resched();
+ } while (mem_cgroup_hugetlb_usage(cgroup) > 0);
+out:
+ return ret;
+}