git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
pandora: update defconfig
[pandora-kernel.git]
/
mm
/
vmscan.c
diff --git
a/mm/vmscan.c
b/mm/vmscan.c
index
915dceb
..
9c7e57c
100644
(file)
--- a/
mm/vmscan.c
+++ b/
mm/vmscan.c
@@
-1724,13
+1724,13
@@
static void shrink_zone(int priority, struct zone *zone,
* If a zone is deemed to be full of pinned pages then just give it a light
* scan then give up on it.
*/
* If a zone is deemed to be full of pinned pages then just give it a light
* scan then give up on it.
*/
-static
int
shrink_zones(int priority, struct zonelist *zonelist,
+static
bool
shrink_zones(int priority, struct zonelist *zonelist,
struct scan_control *sc)
{
enum zone_type high_zoneidx = gfp_zone(sc->gfp_mask);
struct zoneref *z;
struct zone *zone;
struct scan_control *sc)
{
enum zone_type high_zoneidx = gfp_zone(sc->gfp_mask);
struct zoneref *z;
struct zone *zone;
-
int progress = 0
;
+
bool all_unreclaimable = true
;
for_each_zone_zonelist_nodemask(zone, z, zonelist, high_zoneidx,
sc->nodemask) {
for_each_zone_zonelist_nodemask(zone, z, zonelist, high_zoneidx,
sc->nodemask) {
@@
-1757,9
+1757,9
@@
static int shrink_zones(int priority, struct zonelist *zonelist,
}
shrink_zone(priority, zone, sc);
}
shrink_zone(priority, zone, sc);
-
progress = 1
;
+
all_unreclaimable = false
;
}
}
- return
progress
;
+ return
all_unreclaimable
;
}
/*
}
/*
@@
-1782,7
+1782,7
@@
static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
struct scan_control *sc)
{
int priority;
struct scan_control *sc)
{
int priority;
-
unsigned long ret = 0
;
+
bool all_unreclaimable
;
unsigned long total_scanned = 0;
struct reclaim_state *reclaim_state = current->reclaim_state;
unsigned long lru_pages = 0;
unsigned long total_scanned = 0;
struct reclaim_state *reclaim_state = current->reclaim_state;
unsigned long lru_pages = 0;
@@
-1813,7
+1813,7
@@
static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
sc->nr_scanned = 0;
if (!priority)
disable_swap_token();
sc->nr_scanned = 0;
if (!priority)
disable_swap_token();
-
ret
= shrink_zones(priority, zonelist, sc);
+
all_unreclaimable
= shrink_zones(priority, zonelist, sc);
/*
* Don't shrink slabs when reclaiming memory from
* over limit cgroups
/*
* Don't shrink slabs when reclaiming memory from
* over limit cgroups
@@
-1826,10
+1826,8
@@
static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
}
}
total_scanned += sc->nr_scanned;
}
}
total_scanned += sc->nr_scanned;
- if (sc->nr_reclaimed >= sc->nr_to_reclaim) {
- ret = sc->nr_reclaimed;
+ if (sc->nr_reclaimed >= sc->nr_to_reclaim)
goto out;
goto out;
- }
/*
* Try to write back as many pages as we just scanned. This
/*
* Try to write back as many pages as we just scanned. This
@@
-1849,9
+1847,7
@@
static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
priority < DEF_PRIORITY - 2)
congestion_wait(BLK_RW_ASYNC, HZ/10);
}
priority < DEF_PRIORITY - 2)
congestion_wait(BLK_RW_ASYNC, HZ/10);
}
- /* top priority shrink_zones still had more to do? don't OOM, then */
- if (ret && scanning_global_lru(sc))
- ret = sc->nr_reclaimed;
+
out:
/*
* Now that we've scanned all the zones at this priority level, note
out:
/*
* Now that we've scanned all the zones at this priority level, note
@@
-1877,7
+1873,14
@@
out:
delayacct_freepages_end();
put_mems_allowed();
delayacct_freepages_end();
put_mems_allowed();
- return ret;
+ if (sc->nr_reclaimed)
+ return sc->nr_reclaimed;
+
+ /* top priority shrink_zones still had more to do? don't OOM, then */
+ if (scanning_global_lru(sc) && !all_unreclaimable)
+ return 1;
+
+ return 0;
}
unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
}
unsigned long try_to_free_pages(struct zonelist *zonelist, int order,