From: Greg Kroah-Hartman Date: Tue, 29 Nov 2016 16:43:08 +0000 (+0100) Subject: 4.8-stable patches X-Git-Tag: v4.4.36~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9d50ea32fab5c78f618286624a94e4f6bb8e6878;p=thirdparty%2Fkernel%2Fstable-queue.git 4.8-stable patches added patches: mm-oom-stop-pre-mature-high-order-oom-killer-invocations.patch --- diff --git a/queue-4.8/mm-oom-stop-pre-mature-high-order-oom-killer-invocations.patch b/queue-4.8/mm-oom-stop-pre-mature-high-order-oom-killer-invocations.patch new file mode 100644 index 00000000000..9bed636f3ce --- /dev/null +++ b/queue-4.8/mm-oom-stop-pre-mature-high-order-oom-killer-invocations.patch @@ -0,0 +1,49 @@ +From mhocko@kernel.org Tue Nov 29 17:42:17 2016 +From: Michal Hocko +Date: Tue, 29 Nov 2016 17:25:15 +0100 +Subject: mm, oom: stop pre-mature high-order OOM killer invocations +To: Greg Kroah-Hartman , Stable tree +Cc: Vlastimil Babka , Marc MERLIN , linux-mm@kvack.org, Linus Torvalds , LKML , Joonsoo Kim , Tejun Heo +Message-ID: <20161129162515.GD9796@dhcp22.suse.cz> +Content-Disposition: inline + +From: Michal Hocko + +31e49bfda184 ("mm, oom: protect !costly allocations some more for +!CONFIG_COMPACTION") was an attempt to reduce chances of pre-mature OOM +killer invocation for high order requests. It seemed to work for most +users just fine but it is far from bullet proof and obviously not +sufficient for Marc who has reported pre-mature OOM killer invocations +with 4.8 based kernels. 4.9 will all the compaction improvements seems +to be behaving much better but that would be too intrusive to backport +to 4.8 stable kernels. Instead this patch simply never declares OOM for +!costly high order requests. We rely on order-0 requests to do that in +case we are really out of memory. Order-0 requests are much more common +and so a risk of a livelock without any way forward is highly unlikely. + +Reported-by: Marc MERLIN +Tested-by: Marc MERLIN +Signed-off-by: Michal Hocko +--- + mm/page_alloc.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -3161,6 +3161,16 @@ should_compact_retry(struct alloc_contex + if (!order || order > PAGE_ALLOC_COSTLY_ORDER) + return false; + ++#ifdef CONFIG_COMPACTION ++ /* ++ * This is a gross workaround to compensate a lack of reliable compaction ++ * operation. We cannot simply go OOM with the current state of the compaction ++ * code because this can lead to pre mature OOM declaration. ++ */ ++ if (order <= PAGE_ALLOC_COSTLY_ORDER) ++ return true; ++#endif ++ + /* + * There are setups with compaction disabled which would prefer to loop + * inside the allocator rather than hit the oom killer prematurely. diff --git a/queue-4.8/series b/queue-4.8/series index 5e0617eb421..2ae243f705c 100644 --- a/queue-4.8/series +++ b/queue-4.8/series @@ -34,3 +34,4 @@ powerpc-set-missing-wakeup-bit-in-lpcr-on-power9.patch powerpc-mm-fixup-kernel-read-only-mapping.patch powerpc-boot-fix-the-early-opal-console-wrappers.patch can-bcm-fix-support-for-can-fd-frames.patch +mm-oom-stop-pre-mature-high-order-oom-killer-invocations.patch