diff options
| author | Takashi Iwai <tiwai@suse.de> | 2012-05-21 12:45:18 +0200 | 
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2012-05-21 12:45:18 +0200 | 
| commit | 775b2449bdba7c97dda9f274c92bf7a83dac4142 (patch) | |
| tree | b4bee45c13762ea93642b1e38c62de454e51cf5d /mm/memcontrol.c | |
| parent | 21363cf0ca5c9c62e34e37422fb1d13d70d3de3c (diff) | |
| parent | 5fb86e5d4a951ddb0474cdfd809380c8e2a8d101 (diff) | |
| download | olio-linux-3.10-775b2449bdba7c97dda9f274c92bf7a83dac4142.tar.xz olio-linux-3.10-775b2449bdba7c97dda9f274c92bf7a83dac4142.zip  | |
Merge branch 'topic/asoc' into for-linus
Diffstat (limited to 'mm/memcontrol.c')
| -rw-r--r-- | mm/memcontrol.c | 28 | 
1 files changed, 14 insertions, 14 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 7d698df4a06..b659260c56a 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2165,7 +2165,7 @@ static int __cpuinit memcg_cpu_hotplug_callback(struct notifier_block *nb,  	if (action == CPU_ONLINE)  		return NOTIFY_OK; -	if ((action != CPU_DEAD) || action != CPU_DEAD_FROZEN) +	if (action != CPU_DEAD && action != CPU_DEAD_FROZEN)  		return NOTIFY_OK;  	for_each_mem_cgroup(iter) @@ -2476,10 +2476,10 @@ struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)  static void __mem_cgroup_commit_charge(struct mem_cgroup *memcg,  				       struct page *page,  				       unsigned int nr_pages, -				       struct page_cgroup *pc,  				       enum charge_type ctype,  				       bool lrucare)  { +	struct page_cgroup *pc = lookup_page_cgroup(page);  	struct zone *uninitialized_var(zone);  	bool was_on_lru = false;  	bool anon; @@ -2716,7 +2716,6 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm,  {  	struct mem_cgroup *memcg = NULL;  	unsigned int nr_pages = 1; -	struct page_cgroup *pc;  	bool oom = true;  	int ret; @@ -2730,11 +2729,10 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm,  		oom = false;  	} -	pc = lookup_page_cgroup(page);  	ret = __mem_cgroup_try_charge(mm, gfp_mask, nr_pages, &memcg, oom);  	if (ret == -ENOMEM)  		return ret; -	__mem_cgroup_commit_charge(memcg, page, nr_pages, pc, ctype, false); +	__mem_cgroup_commit_charge(memcg, page, nr_pages, ctype, false);  	return 0;  } @@ -2831,16 +2829,13 @@ static void  __mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *memcg,  					enum charge_type ctype)  { -	struct page_cgroup *pc; -  	if (mem_cgroup_disabled())  		return;  	if (!memcg)  		return;  	cgroup_exclude_rmdir(&memcg->css); -	pc = lookup_page_cgroup(page); -	__mem_cgroup_commit_charge(memcg, page, 1, pc, ctype, true); +	__mem_cgroup_commit_charge(memcg, page, 1, ctype, true);  	/*  	 * Now swap is on-memory. This means this page may be  	 * counted both as mem and swap....double count. @@ -3298,14 +3293,13 @@ int mem_cgroup_prepare_migration(struct page *page,  	 * page. In the case new page is migrated but not remapped, new page's  	 * mapcount will be finally 0 and we call uncharge in end_migration().  	 */ -	pc = lookup_page_cgroup(newpage);  	if (PageAnon(page))  		ctype = MEM_CGROUP_CHARGE_TYPE_MAPPED;  	else if (page_is_file_cache(page))  		ctype = MEM_CGROUP_CHARGE_TYPE_CACHE;  	else  		ctype = MEM_CGROUP_CHARGE_TYPE_SHMEM; -	__mem_cgroup_commit_charge(memcg, newpage, 1, pc, ctype, false); +	__mem_cgroup_commit_charge(memcg, newpage, 1, ctype, false);  	return ret;  } @@ -3392,7 +3386,7 @@ void mem_cgroup_replace_page_cache(struct page *oldpage,  	 * the newpage may be on LRU(or pagevec for LRU) already. We lock  	 * LRU while we overwrite pc->mem_cgroup.  	 */ -	__mem_cgroup_commit_charge(memcg, newpage, 1, pc, type, true); +	__mem_cgroup_commit_charge(memcg, newpage, 1, type, true);  }  #ifdef CONFIG_DEBUG_VM @@ -3763,7 +3757,7 @@ move_account:  			goto try_to_free;  		cond_resched();  	/* "ret" should also be checked to ensure all lists are empty. */ -	} while (memcg->res.usage > 0 || ret); +	} while (res_counter_read_u64(&memcg->res, RES_USAGE) > 0 || ret);  out:  	css_put(&memcg->css);  	return ret; @@ -3778,7 +3772,7 @@ try_to_free:  	lru_add_drain_all();  	/* try to free all pages in this cgroup */  	shrink = 1; -	while (nr_retries && memcg->res.usage > 0) { +	while (nr_retries && res_counter_read_u64(&memcg->res, RES_USAGE) > 0) {  		int progress;  		if (signal_pending(current)) { @@ -4513,6 +4507,12 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,  swap_buffers:  	/* Swap primary and spare array */  	thresholds->spare = thresholds->primary; +	/* If all events are unregistered, free the spare array */ +	if (!new) { +		kfree(thresholds->spare); +		thresholds->spare = NULL; +	} +  	rcu_assign_pointer(thresholds->primary, new);  	/* To be sure that nobody uses thresholds */  |