From 215e24fc44a6d7ace4bc97a6370af79f22e1146a Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro Date: Wed, 7 Jan 2009 18:08:23 -0800 Subject: [PATCH] --- yaml --- r: 127591 b: refs/heads/master c: 2733c06ac864ed40b9dfbbd5270f3f16949bd4a1 h: refs/heads/master i: 127589: f94b28305b4f4be0e68ea2442962054a9567d3b9 127587: cd22988cede1415d148a6e23e919841d989e2b89 127583: 9b29fff0a8cbd95b45d82c5aa83731472849841d v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ad0ed7bef97d..d3defa4e4254 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e72e2bd6747c7a5c432197b6614cf3a387e61a0e +refs/heads/master: 2733c06ac864ed40b9dfbbd5270f3f16949bd4a1 diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index af28e128b749..027c0dd7a83e 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -144,6 +144,11 @@ struct mem_cgroup { */ struct mem_cgroup_lru_info info; + /* + protect against reclaim related member. + */ + spinlock_t reclaim_param_lock; + int prev_priority; /* for recording reclaim priority */ /* @@ -400,18 +405,28 @@ int mem_cgroup_calc_mapped_ratio(struct mem_cgroup *mem) */ int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem) { - return mem->prev_priority; + int prev_priority; + + spin_lock(&mem->reclaim_param_lock); + prev_priority = mem->prev_priority; + spin_unlock(&mem->reclaim_param_lock); + + return prev_priority; } void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem, int priority) { + spin_lock(&mem->reclaim_param_lock); if (priority < mem->prev_priority) mem->prev_priority = priority; + spin_unlock(&mem->reclaim_param_lock); } void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem, int priority) { + spin_lock(&mem->reclaim_param_lock); mem->prev_priority = priority; + spin_unlock(&mem->reclaim_param_lock); } int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *zone) @@ -2076,6 +2091,7 @@ mem_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cont) } mem_cgroup_set_inactive_ratio(mem); mem->last_scanned_child = NULL; + spin_lock_init(&mem->reclaim_param_lock); return &mem->css; free_out: