The patch titled memcg: don't do INIT_WORK() repeatedly against the same work_struct has been removed from the -mm tree. Its filename was memcg-coalesce-charging-via-percpu-storage-fix-2.patch This patch was dropped because it was folded into memcg-coalesce-charging-via-percpu-storage.patch The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: memcg: don't do INIT_WORK() repeatedly against the same work_struct From: Daisuke Nishimura <nishimura@xxxxxxxxxxxxxxxxx> Don't do INIT_WORK() repeatedly against the same work_struct. It can actually lead to a BUG. Just do it once in initialization. Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> Signed-off-by: Daisuke Nishimura <nishimura@xxxxxxxxxxxxxxxxx> Cc: Balbir Singh <balbir@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/memcontrol.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff -puN mm/memcontrol.c~memcg-coalesce-charging-via-percpu-storage-fix-2 mm/memcontrol.c --- a/mm/memcontrol.c~memcg-coalesce-charging-via-percpu-storage-fix-2 +++ a/mm/memcontrol.c @@ -1354,8 +1354,8 @@ static void drain_all_stock_async(void) /* This function is for scheduling "drain" in asynchronous way. * The result of "drain" is not directly handled by callers. Then, * if someone is calling drain, we don't have to call drain more. - * Anyway, work_pending() will catch if there is a race. We just do - * loose check here. + * Anyway, WORK_STRUCT_PENDING check in queue_work_on() will catch if + * there is a race. We just do loose check here. */ if (atomic_read(&memcg_drain_count)) return; @@ -1364,9 +1364,6 @@ static void drain_all_stock_async(void) get_online_cpus(); for_each_online_cpu(cpu) { struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu); - if (work_pending(&stock->work)) - continue; - INIT_WORK(&stock->work, drain_local_stock); schedule_work_on(cpu, &stock->work); } put_online_cpus(); @@ -3330,11 +3327,17 @@ mem_cgroup_create(struct cgroup_subsys * /* root ? */ if (cont->parent == NULL) { + int cpu; enable_swap_cgroup(); parent = NULL; root_mem_cgroup = mem; if (mem_cgroup_soft_limit_tree_init()) goto free_out; + for_each_possible_cpu(cpu) { + struct memcg_stock_pcp *stock = + &per_cpu(memcg_stock, cpu); + INIT_WORK(&stock->work, drain_local_stock); + } hotcpu_notifier(memcg_stock_cpu_callback, 0); } else { _ Patches currently in -mm which might be from nishimura@xxxxxxxxxxxxxxxxx are oom-kill-fix-numa-consraint-check-with-nodemask-v42.patch memcg-fix-memorymemswusage_in_bytes-for-root-cgroup.patch memcg-coalesce-uncharge-during-unmap-truncate.patch memcg-coalesce-charging-via-percpu-storage.patch memcg-coalesce-charging-via-percpu-storage-fix-2.patch memcg-make-memcgs-file-mapped-consistent-with-global-vm.patch memcg-add-mem_cgroup_cancel_charge.patch memcg-cleanup-mem_cgroup_move_parent.patch memcg-avoid-oom-killing-innocent-task-in-case-of-use_hierarchy.patch memcg-remove-memcg_tasklist.patch memcg-code-cleanrm-unused-variable-in-mem_cgroup_resize_limit.patch memcg-code-cleanrm-unused-variable-in-mem_cgroup_resize_limit-cleanup.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html