/* Tries to drain stocked charges in other cpus. This function is asynchronous and just put a work per cpu for draining localy on each cpu. Caller can expects some charges will be back to res_counter later but cannot wait for it.  */
static void drain_all_stock_async(void)
/* Tries to drain stocked charges in other cpus. This function is asynchronous and just put a work per cpu for draining localy on each cpu. Caller can expects some charges will be back to res_counter later but cannot wait for it.  */
static void drain_all_stock_async(void)
{
	int cpu;
	if (atomic_read(&memcg_drain_count))
		return;
	atomic_inc(&memcg_drain_count);
	get_online_cpus();
	for_each_online_cpu(cpu) {
		struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu);
		schedule_work_on(cpu, &stock->work);
	}
 	put_online_cpus();
	atomic_dec(&memcg_drain_count);
}