From 03eec42b488d103d559de75f639272971225cbc3 Mon Sep 17 00:00:00 2001 From: Fengguang Wu Date: Tue, 18 Dec 2012 14:23:31 -0800 Subject: [PATCH] --- yaml --- r: 347039 b: refs/heads/master c: 3cf23841b4b76eb94d3f8d0fb3627690e4431413 h: refs/heads/master i: 347037: 52545e9fb6b21dbbe441b8e1c331c36cd689e556 347035: 5d3f54bde57b434df4db3fdcdb6d9c47d7e62f3f 347031: aa1d1939996c9a62f2454e623b1d05a86e88c7f3 347023: e4e9568d5739057f45d7f874f90fefe26b5b3a6b 347007: d8abd798b26a9c7bc5c27b90c0b544e01c0250f9 v: v3 --- [refs] | 2 +- trunk/mm/vmscan.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index ebfbc1e0b2d7..0a039baad39b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d37dd5dcb955dd8c2cdd4eaef1f15d1b7ecbc379 +refs/heads/master: 3cf23841b4b76eb94d3f8d0fb3627690e4431413 diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index e73d0206dddd..828530e2794a 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -1202,6 +1202,14 @@ static int too_many_isolated(struct zone *zone, int file, isolated = zone_page_state(zone, NR_ISOLATED_ANON); } + /* + * GFP_NOIO/GFP_NOFS callers are allowed to isolate more pages, so they + * won't get blocked by normal direct-reclaimers, forming a circular + * deadlock. + */ + if ((sc->gfp_mask & GFP_IOFS) == GFP_IOFS) + inactive >>= 3; + return isolated > inactive; }