diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/vmscan.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index e73d0206dddd..828530e2794a 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1202,6 +1202,14 @@ static int too_many_isolated(struct zone *zone, int file, | |||
1202 | isolated = zone_page_state(zone, NR_ISOLATED_ANON); | 1202 | isolated = zone_page_state(zone, NR_ISOLATED_ANON); |
1203 | } | 1203 | } |
1204 | 1204 | ||
1205 | /* | ||
1206 | * GFP_NOIO/GFP_NOFS callers are allowed to isolate more pages, so they | ||
1207 | * won't get blocked by normal direct-reclaimers, forming a circular | ||
1208 | * deadlock. | ||
1209 | */ | ||
1210 | if ((sc->gfp_mask & GFP_IOFS) == GFP_IOFS) | ||
1211 | inactive >>= 3; | ||
1212 | |||
1205 | return isolated > inactive; | 1213 | return isolated > inactive; |
1206 | } | 1214 | } |
1207 | 1215 | ||