aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorGlauber Costa <glommer@openvz.org>2013-08-27 20:18:02 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2013-09-10 18:56:30 -0400
commit6a4f496fd2fc74fa036732ae52c184952d6e3e37 (patch)
treef0d68cd73062f87b54f070756775fd022fdf865e /mm
parent5cedf721a7cdb54e9222133516c916210d836470 (diff)
list_lru: per-node API
This patch adapts the list_lru API to accept an optional node argument, to be used by NUMA aware shrinking functions. Code that does not care about the NUMA placement of objects can still call into the very same functions as before. They will simply iterate over all nodes. Signed-off-by: Glauber Costa <glommer@openvz.org> Cc: Dave Chinner <dchinner@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Cc: "Theodore Ts'o" <tytso@mit.edu> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Cc: Arve Hjønnevåg <arve@android.com> Cc: Carlos Maiolino <cmaiolino@redhat.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Chuck Lever <chuck.lever@oracle.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: David Rientjes <rientjes@google.com> Cc: Gleb Natapov <gleb@redhat.com> Cc: Greg Thelen <gthelen@google.com> Cc: J. Bruce Fields <bfields@redhat.com> Cc: Jan Kara <jack@suse.cz> Cc: Jerome Glisse <jglisse@redhat.com> Cc: John Stultz <john.stultz@linaro.org> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Kent Overstreet <koverstreet@google.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Steven Whitehouse <swhiteho@redhat.com> Cc: Thomas Hellstrom <thellstrom@vmware.com> Cc: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'mm')
-rw-r--r--mm/list_lru.c37
1 files changed, 9 insertions, 28 deletions
diff --git a/mm/list_lru.c b/mm/list_lru.c
index e77c29f4c243..86cb55464f71 100644
--- a/mm/list_lru.c
+++ b/mm/list_lru.c
@@ -47,25 +47,22 @@ bool list_lru_del(struct list_lru *lru, struct list_head *item)
47} 47}
48EXPORT_SYMBOL_GPL(list_lru_del); 48EXPORT_SYMBOL_GPL(list_lru_del);
49 49
50unsigned long list_lru_count(struct list_lru *lru) 50unsigned long
51list_lru_count_node(struct list_lru *lru, int nid)
51{ 52{
52 unsigned long count = 0; 53 unsigned long count = 0;
53 int nid; 54 struct list_lru_node *nlru = &lru->node[nid];
54
55 for_each_node_mask(nid, lru->active_nodes) {
56 struct list_lru_node *nlru = &lru->node[nid];
57 55
58 spin_lock(&nlru->lock); 56 spin_lock(&nlru->lock);
59 WARN_ON_ONCE(nlru->nr_items < 0); 57 WARN_ON_ONCE(nlru->nr_items < 0);
60 count += nlru->nr_items; 58 count += nlru->nr_items;
61 spin_unlock(&nlru->lock); 59 spin_unlock(&nlru->lock);
62 }
63 60
64 return count; 61 return count;
65} 62}
66EXPORT_SYMBOL_GPL(list_lru_count); 63EXPORT_SYMBOL_GPL(list_lru_count_node);
67 64
68static unsigned long 65unsigned long
69list_lru_walk_node(struct list_lru *lru, int nid, list_lru_walk_cb isolate, 66list_lru_walk_node(struct list_lru *lru, int nid, list_lru_walk_cb isolate,
70 void *cb_arg, unsigned long *nr_to_walk) 67 void *cb_arg, unsigned long *nr_to_walk)
71{ 68{
@@ -115,22 +112,6 @@ restart:
115} 112}
116EXPORT_SYMBOL_GPL(list_lru_walk_node); 113EXPORT_SYMBOL_GPL(list_lru_walk_node);
117 114
118unsigned long list_lru_walk(struct list_lru *lru, list_lru_walk_cb isolate,
119 void *cb_arg, unsigned long nr_to_walk)
120{
121 unsigned long isolated = 0;
122 int nid;
123
124 for_each_node_mask(nid, lru->active_nodes) {
125 isolated += list_lru_walk_node(lru, nid, isolate,
126 cb_arg, &nr_to_walk);
127 if (nr_to_walk <= 0)
128 break;
129 }
130 return isolated;
131}
132EXPORT_SYMBOL_GPL(list_lru_walk);
133
134static unsigned long list_lru_dispose_all_node(struct list_lru *lru, int nid, 115static unsigned long list_lru_dispose_all_node(struct list_lru *lru, int nid,
135 list_lru_dispose_cb dispose) 116 list_lru_dispose_cb dispose)
136{ 117{