diff options
author | Tejun Heo <tj@kernel.org> | 2013-03-13 21:59:49 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-13 22:21:49 (GMT) |
commit | 59bfbcf01967d4d3370a2b8294673dd709e732cc (patch) | |
tree | e868c63aadb6cb943e457ed2e16fcefc151243aa /drivers/infiniband/hw/mlx4/cm.c | |
parent | 415586c9e6d35ca116af714d7d0bea9c9f998ce5 (diff) | |
download | linux-fsl-qoriq-59bfbcf01967d4d3370a2b8294673dd709e732cc.tar.xz |
idr: idr_alloc() shouldn't trigger lowmem warning when preloaded
GFP_NOIO is often used for idr_alloc() inside preloaded section as the
allocation mask doesn't really matter. If the idr tree needs to be
expanded, idr_alloc() first tries to allocate using the specified
allocation mask and if it fails falls back to the preloaded buffer. This
order prevent non-preloading idr_alloc() users from taking advantage of
preloading ones by using preload buffer without filling it shifting the
burden of allocation to the preload users.
Unfortunately, this allowed/expected-to-fail kmem_cache allocation ends up
generating spurious slab lowmem warning before succeeding the request from
the preload buffer.
This patch makes idr_layer_alloc() add __GFP_NOWARN to the first
kmem_cache attempt and try kmem_cache again w/o __GFP_NOWARN after
allocation from preload_buffer fails so that lowmem warning is generated
if not suppressed by the original @gfp_mask.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: David Teigland <teigland@redhat.com>
Tested-by: David Teigland <teigland@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/infiniband/hw/mlx4/cm.c')
0 files changed, 0 insertions, 0 deletions