packages (LINUX_3_0): kernel/kernel.spec, kernel/kernel-small_fixes.patch -...

arekm arekm at pld-linux.org
Fri Nov 18 10:24:48 CET 2011


Author: arekm                        Date: Fri Nov 18 09:24:48 2011 GMT
Module: packages                      Tag: LINUX_3_0
---- Log message:
- rel 2; another cgroup OOM fix

---- Files affected:
packages/kernel:
   kernel.spec (1.987.2.5 -> 1.987.2.6) , kernel-small_fixes.patch (1.43.2.4 -> 1.43.2.5) 

---- Diffs:

================================================================
Index: packages/kernel/kernel.spec
diff -u packages/kernel/kernel.spec:1.987.2.5 packages/kernel/kernel.spec:1.987.2.6
--- packages/kernel/kernel.spec:1.987.2.5	Sun Nov 13 19:25:35 2011
+++ packages/kernel/kernel.spec	Fri Nov 18 10:24:42 2011
@@ -95,7 +95,7 @@
 
 %define		basever		3.0
 %define		postver		.9
-%define		rel		1
+%define		rel		2
 
 %define		_enable_debug_packages			0
 
@@ -1534,6 +1534,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.987.2.6  2011/11/18 09:24:42  arekm
+- rel 2; another cgroup OOM fix
+
 Revision 1.987.2.5  2011/11/13 18:25:35  arekm
 - grsec up to grsecurity-2.2.2-3.0.9-201111121310.patch
 

================================================================
Index: packages/kernel/kernel-small_fixes.patch
diff -u packages/kernel/kernel-small_fixes.patch:1.43.2.4 packages/kernel/kernel-small_fixes.patch:1.43.2.5
--- packages/kernel/kernel-small_fixes.patch:1.43.2.4	Thu Nov 10 08:42:59 2011
+++ packages/kernel/kernel-small_fixes.patch	Fri Nov 18 10:24:43 2011
@@ -920,3 +920,76 @@
  }
  
  static int do_linear_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+commit 23751be0094012eb6b4756fa80ca54b3eb83069f
+Author: Johannes Weiner <jweiner at redhat.com>
+Date:   Thu Aug 25 15:59:16 2011 -0700
+
+    memcg: fix hierarchical oom locking
+    
+    Commit 79dfdaccd1d5 ("memcg: make oom_lock 0 and 1 based rather than
+    counter") tried to oom lock the hierarchy and roll back upon
+    encountering an already locked memcg.
+    
+    The code is confused when it comes to detecting a locked memcg, though,
+    so it would fail and rollback after locking one memcg and encountering
+    an unlocked second one.
+    
+    The result is that oom-locking hierarchies fails unconditionally and
+    that every oom killer invocation simply goes to sleep on the oom
+    waitqueue forever.  The tasks practically hang forever without anyone
+    intervening, possibly holding locks that trip up unrelated tasks, too.
+    
+    Signed-off-by: Johannes Weiner <jweiner at redhat.com>
+    Acked-by: Michal Hocko <mhocko at suse.cz>
+    Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu at jp.fujitsu.com>
+    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+
+diff --git a/mm/memcontrol.c b/mm/memcontrol.c
+index 0e40f02..ebd1e86 100644
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -1841,29 +1841,23 @@ static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem,
+  */
+ static bool mem_cgroup_oom_lock(struct mem_cgroup *mem)
+ {
+-	int lock_count = -1;
+ 	struct mem_cgroup *iter, *failed = NULL;
+ 	bool cond = true;
+ 
+ 	for_each_mem_cgroup_tree_cond(iter, mem, cond) {
+-		bool locked = iter->oom_lock;
+-
+-		iter->oom_lock = true;
+-		if (lock_count == -1)
+-			lock_count = iter->oom_lock;
+-		else if (lock_count != locked) {
++		if (iter->oom_lock) {
+ 			/*
+ 			 * this subtree of our hierarchy is already locked
+ 			 * so we cannot give a lock.
+ 			 */
+-			lock_count = 0;
+ 			failed = iter;
+ 			cond = false;
+-		}
++		} else
++			iter->oom_lock = true;
+ 	}
+ 
+ 	if (!failed)
+-		goto done;
++		return true;
+ 
+ 	/*
+ 	 * OK, we failed to lock the whole subtree so we have to clean up
+@@ -1877,8 +1871,7 @@ static bool mem_cgroup_oom_lock(struct mem_cgroup *mem)
+ 		}
+ 		iter->oom_lock = false;
+ 	}
+-done:
+-	return lock_count;
++	return false;
+ }
+ 
+ /*
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel.spec?r1=1.987.2.5&r2=1.987.2.6&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-small_fixes.patch?r1=1.43.2.4&r2=1.43.2.5&f=u



More information about the pld-cvs-commit mailing list