slub page alloc fallback: Enable interrupts for GFP_WAIT.
The fallback path needs to enable interrupts like done for the other page allocator calls. This was not necessary with the alternate fast path since we handled irq enable/disable in the slow path. The regular fastpath handles irq enable/disable around calls to the slow path so we need to restore the proper status before calling the page allocator from the slowpath. Signed-off-by: Christoph Lameter <clameter@sgi.com>
This commit is contained in:
parent
bde4f8fa8d
commit
caeab084de
12
mm/slub.c
12
mm/slub.c
@ -1536,9 +1536,15 @@ new_slab:
|
|||||||
* That is only possible if certain conditions are met that are being
|
* That is only possible if certain conditions are met that are being
|
||||||
* checked when a slab is created.
|
* checked when a slab is created.
|
||||||
*/
|
*/
|
||||||
if (!(gfpflags & __GFP_NORETRY) && (s->flags & __PAGE_ALLOC_FALLBACK))
|
if (!(gfpflags & __GFP_NORETRY) &&
|
||||||
return kmalloc_large(s->objsize, gfpflags);
|
(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;
|
return NULL;
|
||||||
debug:
|
debug:
|
||||||
if (!alloc_debug_processing(s, c->page, object, addr))
|
if (!alloc_debug_processing(s, c->page, object, addr))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user