[PATCH] fix BUG_ON(!PageSlab) from fallback_alloc
pdflush hit the BUG_ON(!PageSlab(page)) in kmem_freepages called from fallback_alloc: cache_grow already freed those pages when alloc_slabmgmt failed. But it wouldn't have freed them if __GFP_NO_GROW, so make sure fallback_alloc doesn't waste its time on that case. Signed-off-by: Hugh Dickins <hugh@veritas.com> Acked-by: Christoph Lameter <clameter@sgi.com> Acked-by: Pekka J Enberg <penberg@cs.helsinki.fi> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
be6aab0e9f
commit
b6a6045181
1 changed files with 2 additions and 2 deletions
|
@ -3281,7 +3281,7 @@ void *fallback_alloc(struct kmem_cache *cache, gfp_t flags)
|
|||
flags | GFP_THISNODE, nid);
|
||||
}
|
||||
|
||||
if (!obj) {
|
||||
if (!obj && !(flags & __GFP_NO_GROW)) {
|
||||
/*
|
||||
* This allocation will be performed within the constraints
|
||||
* of the current cpuset / memory policy requirements.
|
||||
|
@ -3310,7 +3310,7 @@ void *fallback_alloc(struct kmem_cache *cache, gfp_t flags)
|
|||
*/
|
||||
goto retry;
|
||||
} else {
|
||||
kmem_freepages(cache, obj);
|
||||
/* cache_grow already freed obj */
|
||||
obj = NULL;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue