Commits
Andrey Ryabinin authored and Konstantin Khorenko committed 546729e87a2
mm: try harder to decrease cache.limit_in_bytes mem_cgroup_resize_cache_limit() tries to free only 32 (SWAP_CLUSTER_MAX) pages on each iteration. This makes it practically impossible to decrease limit of memory cgroup. Tasks could easily allocate back 32 pages, so we can't reduce memory usage, and once retry_count reaches zero we return -EBUSY. Easy to reproduce the problem by running the following commands: mkdir /sys/fs/cgroup/memory/test echo $$ >> /sys/fs/cgroup/memory/test/tasks cat big_file > /dev/null & sleep 1 && echo $((100*1024*1024)) > /sys/fs/cgroup/memory/test/memory.cache.limit_in_bytes -bash: echo: write error: Device or resource busy Instead of relying on retry_count, keep retrying the reclaim until the desired limit is reached or fail if the reclaim doesn't make any progress or a signal is pending. https://marc.info/?i=20180110124317.28887-1-aryabinin%40virtuozzo.com https://jira.sw.ru/browse/PSBM-80732 Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>