]> git.pld-linux.org Git - packages/kernel.git/commitdiff
- one more mm fix
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sat, 6 Feb 2016 00:14:17 +0000 (01:14 +0100)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Sat, 6 Feb 2016 00:14:17 +0000 (01:14 +0100)
kernel-small_fixes.patch

index 92cfb5ef0bfdfff8c5c8b1c55626715dcc0407ca..c13521f1251d8d526ccadb6b6f75990b20dfe770 100644 (file)
@@ -398,3 +398,50 @@ index aa67339..4f18fd9 100644
                if (tout && tout <= 20)
 -- 
 2.5.0
+From: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
+Subject: mm, vmstat: fix wrong WQ sleep when memory reclaim doesn't make any progress
+
+Jan Stancek has reported that system occasionally hanging after "oom01"
+testcase from LTP triggers OOM.  Guessing from a result that there is a
+kworker thread doing memory allocation and the values between "Node 0
+Normal free:" and "Node 0 Normal:" differs when hanging, vmstat is not
+up-to-date for some reason.
+
+According to commit 373ccbe59270 ("mm, vmstat: allow WQ concurrency to
+discover memory reclaim doesn't make any progress"), it meant to force the
+kworker thread to take a short sleep, but it by error used
+schedule_timeout(1).  We missed that schedule_timeout() in state
+TASK_RUNNING doesn't do anything.
+
+Fix it by using schedule_timeout_uninterruptible(1) which forces the
+kworker thread to take a short sleep in order to make sure that vmstat is
+up-to-date.
+
+Fixes: 373ccbe59270 ("mm, vmstat: allow WQ concurrency to discover memory reclaim doesn't make any progress")
+Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Reported-by: Jan Stancek <jstancek@redhat.com>
+Acked-by: Michal Hocko <mhocko@suse.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Cristopher Lameter <clameter@sgi.com>
+Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
+Cc: Arkadiusz Miskiewicz <arekm@maven.pl>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+---
+
+ mm/backing-dev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff -puN mm/backing-dev.c~mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesnt-make-any-progress mm/backing-dev.c
+--- a/mm/backing-dev.c~mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesnt-make-any-progress
++++ a/mm/backing-dev.c
+@@ -989,7 +989,7 @@ long wait_iff_congested(struct zone *zon
+                * here rather than calling cond_resched().
+                */
+               if (current->flags & PF_WQ_WORKER)
+-                      schedule_timeout(1);
++                      schedule_timeout_uninterruptible(1);
+               else
+                       cond_resched();
+_
This page took 0.060692 seconds and 4 git commands to generate.