• M
    memcg: get rid of percpu_charge_mutex lock · 8521fc50
    Michal Hocko 提交于
    percpu_charge_mutex protects from multiple simultaneous per-cpu charge
    caches draining because we might end up having too many work items.  At
    least this was the case until commit 26fe6168 ("memcg: fix percpu
    cached charge draining frequency") when we introduced a more targeted
    draining for async mode.
    
    Now that also sync draining is targeted we can safely remove mutex
    because we will not send more work than the current number of CPUs.
    FLUSHING_CACHED_CHARGE protects from sending the same work multiple
    times and stock->nr_pages == 0 protects from pointless sending a work if
    there is obviously nothing to be done.  This is of course racy but we
    can live with it as the race window is really small (we would have to
    see FLUSHING_CACHED_CHARGE cleared while nr_pages would be still
    non-zero).
    
    The only remaining place where we can race is synchronous mode when we
    rely on FLUSHING_CACHED_CHARGE test which might have been set by other
    drainer on the same group but we should wait in that case as well.
    Signed-off-by: NMichal Hocko <mhocko@suse.cz>
    Cc: Balbir Singh <bsingharora@gmail.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    8521fc50
memcontrol.c 146.7 KB