aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-core.c
diff options
context:
space:
mode:
authorMel Gorman <mgorman@techsingularity.net>2015-11-06 19:28:21 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-11-06 20:50:42 -0500
commitd0164adc89f6bb374d304ffcc375c6d2652fe67d (patch)
treede1cbe09c86dcd24a4a476f7e0b41af239bbdc29 /block/blk-core.c
parent016c13daa5c9e4827eca703e2f0621c131f2cca3 (diff)
mm, page_alloc: distinguish between being unable to sleep, unwilling to sleep and avoiding waking kswapd
__GFP_WAIT has been used to identify atomic context in callers that hold spinlocks or are in interrupts. They are expected to be high priority and have access one of two watermarks lower than "min" which can be referred to as the "atomic reserve". __GFP_HIGH users get access to the first lower watermark and can be called the "high priority reserve". Over time, callers had a requirement to not block when fallback options were available. Some have abused __GFP_WAIT leading to a situation where an optimisitic allocation with a fallback option can access atomic reserves. This patch uses __GFP_ATOMIC to identify callers that are truely atomic, cannot sleep and have no alternative. High priority users continue to use __GFP_HIGH. __GFP_DIRECT_RECLAIM identifies callers that can sleep and are willing to enter direct reclaim. __GFP_KSWAPD_RECLAIM to identify callers that want to wake kswapd for background reclaim. __GFP_WAIT is redefined as a caller that is willing to enter direct reclaim and wake kswapd for background reclaim. This patch then converts a number of sites o __GFP_ATOMIC is used by callers that are high priority and have memory pools for those requests. GFP_ATOMIC uses this flag. o Callers that have a limited mempool to guarantee forward progress clear __GFP_DIRECT_RECLAIM but keep __GFP_KSWAPD_RECLAIM. bio allocations fall into this category where kswapd will still be woken but atomic reserves are not used as there is a one-entry mempool to guarantee progress. o Callers that are checking if they are non-blocking should use the helper gfpflags_allow_blocking() where possible. This is because checking for __GFP_WAIT as was done historically now can trigger false positives. Some exceptions like dm-crypt.c exist where the code intent is clearer if __GFP_DIRECT_RECLAIM is used instead of the helper due to flag manipulations. o Callers that built their own GFP flags instead of starting with GFP_KERNEL and friends now also need to specify __GFP_KSWAPD_RECLAIM. The first key hazard to watch out for is callers that removed __GFP_WAIT and was depending on access to atomic reserves for inconspicuous reasons. In some cases it may be appropriate for them to use __GFP_HIGH. The second key hazard is callers that assembled their own combination of GFP flags instead of starting with something like GFP_KERNEL. They may now wish to specify __GFP_KSWAPD_RECLAIM. It's almost certainly harmless if it's missed in most cases as other activity will wake kswapd. Signed-off-by: Mel Gorman <mgorman@techsingularity.net> Acked-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Christoph Lameter <cl@linux.com> Cc: David Rientjes <rientjes@google.com> Cc: Vitaly Wool <vitalywool@gmail.com> Cc: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'block/blk-core.c')
-rw-r--r--block/blk-core.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index 89eec7965870..9e32f0868e36 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1206,8 +1206,8 @@ rq_starved:
1206 * @bio: bio to allocate request for (can be %NULL) 1206 * @bio: bio to allocate request for (can be %NULL)
1207 * @gfp_mask: allocation mask 1207 * @gfp_mask: allocation mask
1208 * 1208 *
1209 * Get a free request from @q. If %__GFP_WAIT is set in @gfp_mask, this 1209 * Get a free request from @q. If %__GFP_DIRECT_RECLAIM is set in @gfp_mask,
1210 * function keeps retrying under memory pressure and fails iff @q is dead. 1210 * this function keeps retrying under memory pressure and fails iff @q is dead.
1211 * 1211 *
1212 * Must be called with @q->queue_lock held and, 1212 * Must be called with @q->queue_lock held and,
1213 * Returns ERR_PTR on failure, with @q->queue_lock held. 1213 * Returns ERR_PTR on failure, with @q->queue_lock held.
@@ -1227,7 +1227,7 @@ retry:
1227 if (!IS_ERR(rq)) 1227 if (!IS_ERR(rq))
1228 return rq; 1228 return rq;
1229 1229
1230 if (!(gfp_mask & __GFP_WAIT) || unlikely(blk_queue_dying(q))) { 1230 if (!gfpflags_allow_blocking(gfp_mask) || unlikely(blk_queue_dying(q))) {
1231 blk_put_rl(rl); 1231 blk_put_rl(rl);
1232 return rq; 1232 return rq;
1233 } 1233 }
@@ -1305,11 +1305,11 @@ EXPORT_SYMBOL(blk_get_request);
1305 * BUG. 1305 * BUG.
1306 * 1306 *
1307 * WARNING: When allocating/cloning a bio-chain, careful consideration should be 1307 * WARNING: When allocating/cloning a bio-chain, careful consideration should be
1308 * given to how you allocate bios. In particular, you cannot use __GFP_WAIT for 1308 * given to how you allocate bios. In particular, you cannot use
1309 * anything but the first bio in the chain. Otherwise you risk waiting for IO 1309 * __GFP_DIRECT_RECLAIM for anything but the first bio in the chain. Otherwise
1310 * completion of a bio that hasn't been submitted yet, thus resulting in a 1310 * you risk waiting for IO completion of a bio that hasn't been submitted yet,
1311 * deadlock. Alternatively bios should be allocated using bio_kmalloc() instead 1311 * thus resulting in a deadlock. Alternatively bios should be allocated using
1312 * of bio_alloc(), as that avoids the mempool deadlock. 1312 * bio_kmalloc() instead of bio_alloc(), as that avoids the mempool deadlock.
1313 * If possible a big IO should be split into smaller parts when allocation 1313 * If possible a big IO should be split into smaller parts when allocation
1314 * fails. Partial allocation should not be an error, or you risk a live-lock. 1314 * fails. Partial allocation should not be an error, or you risk a live-lock.
1315 */ 1315 */