On Sun, 31 Jan 2016 13:15:06 +1100
Stephen Rothwell <sfr(a)canb.auug.org.au> wrote:
Hi Jesper,
On Sat, 30 Jan 2016 18:46:46 +0100 Jesper Dangaard Brouer <brouer(a)redhat.com>
wrote:
>
> Let me know, if the linux-next tree need's an explicit fix?
It would be a good idea if you could send a fix against linux-next to
me as Andrew is currently travelling.
My analysis before was wrong, the fix was much simpler. No need to
revert my FAILSLAB patch. Just forgot to mask flags with gfp_allowed_mask.
I expect AKPM can pickup these two small fixes to my patches.
Below is a patch for linux-next.
- -
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
Author of
http://www.iptv-analyzer.org
LinkedIn:
http://www.linkedin.com/in/brouer
[PATCH] mm: temporary fix for SLAB in linux-next
From: Jesper Dangaard Brouer <brouer(a)redhat.com>
This is only for linux-next, until AKPM pickup fixes two patches:
base url:
http://ozlabs.org/~akpm/mmots/broken-out/
[1] mm-fault-inject-take-over-bootstrap-kmem_cache-check.patch
[2] slab-use-slab_pre_alloc_hook-in-slab-allocator-shared-with-slub.patch
First fix is for compiling with CONFIG_FAILSLAB. The linux-next commit
needing this fix is 074b6f53c320 ("mm: fault-inject take over
bootstrap kmem_cache check").
Second fix is for correct masking of allowed GFP flags (gfp_allowed_mask),
in SLAB allocator. This triggered a WARN, by percpu_init_late ->
pcpu_mem_zalloc invoking kzalloc with GFP_KERNEL flags. The linux-next
commit needing this fix is a1fd55538cae ("slab: use
slab_pre_alloc_hook in SLAB allocator shared with SLUB").
Signed-off-by: Jesper Dangaard Brouer <brouer(a)redhat.com>
---
mm/failslab.c | 1 +
mm/slab.c | 2 ++
2 files changed, 3 insertions(+)
diff --git a/mm/failslab.c b/mm/failslab.c
index 0c5b3f31f310..b0fac98cd938 100644
--- a/mm/failslab.c
+++ b/mm/failslab.c
@@ -1,5 +1,6 @@
#include <linux/fault-inject.h>
#include <linux/slab.h>
+#include <linux/mm.h>
#include "slab.h"
static struct {
diff --git a/mm/slab.c b/mm/slab.c
index e90d259b3242..ddd974e6b3bb 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3190,6 +3190,7 @@ slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
void *ptr;
int slab_node = numa_mem_id();
+ flags &= gfp_allowed_mask;
cachep = slab_pre_alloc_hook(cachep, flags);
if (unlikely(!cachep))
return NULL;
@@ -3268,6 +3269,7 @@ slab_alloc(struct kmem_cache *cachep, gfp_t flags, unsigned long
caller)
unsigned long save_flags;
void *objp;
+ flags &= gfp_allowed_mask;
cachep = slab_pre_alloc_hook(cachep, flags);
if (unlikely(!cachep))
return NULL;