summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-03-19 07:13:19 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2008-03-19 07:13:19 +0300
commitd5eee405723eedbd621275e045ac9b36f668c39f (patch)
tree9fca605820972343ba1b13a7e81feda37b7e28be
parentf920bb6f5fe21047e669381fe4dd346f6a9d3562 (diff)
parentcaeab084deb61cd2d51cb8facc0e894a5b406aa4 (diff)
downloadlinux-d5eee405723eedbd621275e045ac9b36f668c39f.tar.xz
Merge branch 'slab-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/christoph/vm
* 'slab-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/christoph/vm: slub page alloc fallback: Enable interrupts for GFP_WAIT.
-rw-r--r--mm/slub.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 96d63eb3ab17..ca71d5b81e4a 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1536,9 +1536,15 @@ new_slab:
* That is only possible if certain conditions are met that are being
* checked when a slab is created.
*/
- if (!(gfpflags & __GFP_NORETRY) && (s->flags & __PAGE_ALLOC_FALLBACK))
- return kmalloc_large(s->objsize, gfpflags);
-
+ if (!(gfpflags & __GFP_NORETRY) &&
+ (s->flags & __PAGE_ALLOC_FALLBACK)) {
+ if (gfpflags & __GFP_WAIT)
+ local_irq_enable();
+ object = kmalloc_large(s->objsize, gfpflags);
+ if (gfpflags & __GFP_WAIT)
+ local_irq_disable();
+ return object;
+ }
return NULL;
debug:
if (!alloc_debug_processing(s, c->page, object, addr))