diff options
| -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 e73d0206ddd..828530e2794 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 | ||
