I read your patch again.So, mem_cgroup_soft_limit_reclaim() caller place seems in balance_pgdat() is better.

Please imazine most bad scenario.CPU0 (kswapd) take to continue shrinking.CPU1 take another activity and charge memcg conteniously.At that time, balance_pgdat() don't exit very long time. then mem_cgroup_soft_limit_reclaim() is never called.

In ideal, if another cpu take another charge, kswapd should shrink soft limit again.

btw, I don't like "if (!order)" condition. memcg soft limit sould bealways shrinked although it's the order of because wakeup_kswapd() argument is merely hint.