diff options
author | Ying Han <yinghan@google.com> | 2011-05-24 20:12:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-25 11:39:26 -0400 |
commit | 1495f230fa7750479c79e3656286b9183d662077 (patch) | |
tree | e5e233bb9fe1916ccc7281e7dcc71b1572fb22c5 /include/linux/mm.h | |
parent | a09ed5e00084448453c8bada4dcd31e5fbfc2f21 (diff) |
vmscan: change shrinker API by passing shrink_control struct
Change each shrinker's API by consolidating the existing parameters into
shrink_control struct. This will simplify any further features added w/o
touching each file of shrinker.
[akpm@linux-foundation.org: fix build]
[akpm@linux-foundation.org: fix warning]
[kosaki.motohiro@jp.fujitsu.com: fix up new shrinker API]
[akpm@linux-foundation.org: fix xfs warning]
[akpm@linux-foundation.org: update gfs2]
Signed-off-by: Ying Han <yinghan@google.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Minchan Kim <minchan.kim@gmail.com>
Acked-by: Pavel Emelyanov <xemul@openvz.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Acked-by: Rik van Riel <riel@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: Dave Hansen <dave@linux.vnet.ibm.com>
Cc: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/mm.h')
-rw-r--r-- | include/linux/mm.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index 32cfa9602d00..5cbbf78eaac7 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1166,18 +1166,20 @@ static inline void sync_mm_rss(struct task_struct *task, struct mm_struct *mm) | |||
1166 | * We consolidate the values for easier extention later. | 1166 | * We consolidate the values for easier extention later. |
1167 | */ | 1167 | */ |
1168 | struct shrink_control { | 1168 | struct shrink_control { |
1169 | unsigned long nr_scanned; | ||
1170 | gfp_t gfp_mask; | 1169 | gfp_t gfp_mask; |
1170 | |||
1171 | /* How many slab objects shrinker() should scan and try to reclaim */ | ||
1172 | unsigned long nr_to_scan; | ||
1171 | }; | 1173 | }; |
1172 | 1174 | ||
1173 | /* | 1175 | /* |
1174 | * A callback you can register to apply pressure to ageable caches. | 1176 | * A callback you can register to apply pressure to ageable caches. |
1175 | * | 1177 | * |
1176 | * 'shrink' is passed a count 'nr_to_scan' and a 'gfpmask'. It should | 1178 | * 'sc' is passed shrink_control which includes a count 'nr_to_scan' |
1177 | * look through the least-recently-used 'nr_to_scan' entries and | 1179 | * and a 'gfpmask'. It should look through the least-recently-used |
1178 | * attempt to free them up. It should return the number of objects | 1180 | * 'nr_to_scan' entries and attempt to free them up. It should return |
1179 | * which remain in the cache. If it returns -1, it means it cannot do | 1181 | * the number of objects which remain in the cache. If it returns -1, it means |
1180 | * any scanning at this time (eg. there is a risk of deadlock). | 1182 | * it cannot do any scanning at this time (eg. there is a risk of deadlock). |
1181 | * | 1183 | * |
1182 | * The 'gfpmask' refers to the allocation we are currently trying to | 1184 | * The 'gfpmask' refers to the allocation we are currently trying to |
1183 | * fulfil. | 1185 | * fulfil. |
@@ -1186,7 +1188,7 @@ struct shrink_control { | |||
1186 | * querying the cache size, so a fastpath for that case is appropriate. | 1188 | * querying the cache size, so a fastpath for that case is appropriate. |
1187 | */ | 1189 | */ |
1188 | struct shrinker { | 1190 | struct shrinker { |
1189 | int (*shrink)(struct shrinker *, int nr_to_scan, gfp_t gfp_mask); | 1191 | int (*shrink)(struct shrinker *, struct shrink_control *sc); |
1190 | int seeks; /* seeks to recreate an obj */ | 1192 | int seeks; /* seeks to recreate an obj */ |
1191 | 1193 | ||
1192 | /* These are for internal use */ | 1194 | /* These are for internal use */ |
@@ -1640,7 +1642,8 @@ int in_gate_area_no_mm(unsigned long addr); | |||
1640 | int drop_caches_sysctl_handler(struct ctl_table *, int, | 1642 | int drop_caches_sysctl_handler(struct ctl_table *, int, |
1641 | void __user *, size_t *, loff_t *); | 1643 | void __user *, size_t *, loff_t *); |
1642 | unsigned long shrink_slab(struct shrink_control *shrink, | 1644 | unsigned long shrink_slab(struct shrink_control *shrink, |
1643 | unsigned long lru_pages); | 1645 | unsigned long nr_pages_scanned, |
1646 | unsigned long lru_pages); | ||
1644 | 1647 | ||
1645 | #ifndef CONFIG_MMU | 1648 | #ifndef CONFIG_MMU |
1646 | #define randomize_va_space 0 | 1649 | #define randomize_va_space 0 |