From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754920AbdLTKVd (ORCPT ); Wed, 20 Dec 2017 05:21:33 -0500 Received: from mail-eopbgr40114.outbound.protection.outlook.com ([40.107.4.114]:10597 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754675AbdLTKVQ (ORCPT ); Wed, 20 Dec 2017 05:21:16 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; From: Andrey Ryabinin To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Ryabinin Subject: [PATCH 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions. Date: Wed, 20 Dec 2017 13:24:29 +0300 Message-Id: <20171220102429.31601-2-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20171220102429.31601-1-aryabinin@virtuozzo.com> References: <20171220102429.31601-1-aryabinin@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0032.eurprd02.prod.outlook.com (2603:10a6:3:e4::18) To HE1PR08MB2828.eurprd08.prod.outlook.com (2603:10a6:7:2e::27) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8b334706-295a-4949-4300-08d5479364e4 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(5600026)(4604075)(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(2017052603307)(7153060);SRVR:HE1PR08MB2828; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;3:4vs2v755J45WJPgy9KnAmq8F18kkxHv4BIp4EH7/vKVhlMwM9rPw12IDvsq89bCNUGxOKj4uCLgP3npqbUGFXaX3ZFIOkcrOjXmZt0+f0PYj2vDEskZ2KGCQygNYeDF1xiBpJpzaaLlM1kFUu3raTBtAzhCVHm8AIgHR8adBhzjWbTd0i58czC9NFe/uVWKJBaI8fD5ek9jliGv3G9z7458n4O8XFJglswe9xUHMG8bBXNq5DLRkFGv1t1fK7I8z;25:CPKo81jKx+bcz9LkGC65PhRyw1IJEEOh9zgiS/RyGHyWoponUjxNIN7ORwoL8oONWLYlXPQ7aRdWfM864ubjM67vJfYhBSZKWugjc5208tT50jE2s00JBWtlt2LJDC2kYXQ/to5a37IZbeEnqV1p3+cCOJJxT77OqNyauaPUhbA/4+eqAa/C5zYwaWdCZDsSd8j1Ofpix1bRFDxiVjvfm+RDzlvjXMPJ0PdKpFA6q96BppxcOoj4G6Q6t6Usow/4FEFmAx4D/jtZY7BA6yAyzPPJsMLOfUok/fCOtp6iqjfA4bohxEKtKWkWEakfv2yxN/YvDUXqKAcPT1ZUqkbufbzsTKqMsnQLeI6tUQDXpYs=;31:EZ9mc0InNNBK6EueTNYx8fXk2zueyUs6IIpZFRg9ybI64dWyFKhfXl5ejsxf/skypAO3MAmuCPRaBYbIKV1pmMSwi+OqW/NnyHRC/H5qo27LsHlfuubnj0f2dk2CAT3wviSQ6EPWdq/BuMdocmBfBjQFiH4E/K1BsQVHTTGfVf3buDf0QJAtHYsSHp0sBerw4rxBJCQcYnWuvjzrUOvWHuDgeigDIAAcalNlOtdu2+c= X-MS-TrafficTypeDiagnostic: HE1PR08MB2828: X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;20:aWHhgF/jc1y3noQbkkNQ+ppkf6xkseVyqjs4Z/eL04dCXzrMkqNfZqT2YOo0zdnRjOqEek6D4Kg8TDkH5pLfGe+IRGvZElTPrvIkx07XB1xqxMx2Z24BgoeDLr+bc2c3XJRkMe1e00YQ46fAh6dPIwIhYFdecLtCnS2mHWilTTUYFeStgo+GmW5cuY56Wf8oJQSQ7i78IaxE5YzzDLW/0sv+TEYNfBfVQjAJVLOOCUa1iE+fcEz79ojPEcq/RSYNZbhcvi7e1t+L8CZ5lPF7Vm1IbCqjXaoiJql3sLbawbMwk51aGF9y5ZI2krX/kWsdIRP0IJ+llWdcczckL5dtS0Q0LKgQS2LnoCEGwMAxPhAnboZGgv9MM6D4LT2Yw1ShZQifUGX2T/lFF8U0xwZ1pf0nLHwWDMonXCP7iRtgHLk=;4:pi2rcKO5b9BNen+9fCD4Pz2DwxK7ysJTEW1z24Eo5QpJlixzXfdSI/CGbHO+PiCvwBOzUgtDl0CNvCAMFvvMrtlJF1tBWNcuwj+9HO0xv4QveAR2OQCW9piRnTt8aDnWGgoSIgQmsBV2u12ultA56ZZbqklMTMfgJhHEOTuVLU62Yx6+ko216gfRArQ0qJ0QEMeOe4nkJHeqzF/uzHk/W1w5P0R+GX1dYeCPUjHU9IgBldFWFP8WtOzmIMXDzA/QKbJuWtHJpQipb6B983g9xQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231023)(93006095)(93001095)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011);SRVR:HE1PR08MB2828;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:HE1PR08MB2828; X-Forefront-PRVS: 0527DFA348 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(346002)(39380400002)(39850400004)(376002)(396003)(366004)(189003)(199004)(6486002)(2950100002)(55236004)(81166006)(8676002)(76506005)(386003)(25786009)(69596002)(6506007)(6666003)(316002)(39060400002)(68736007)(6116002)(305945005)(36756003)(51416003)(50226002)(97736004)(6916009)(81156014)(107886003)(3846002)(52116002)(76176011)(4326008)(59450400001)(8936002)(1076002)(2906002)(16586007)(16526018)(54906003)(50466002)(53416004)(47776003)(48376002)(53936002)(105586002)(478600001)(86362001)(5660300001)(106356001)(6512007)(66066001)(7736002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR08MB2828;H:localhost.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR08MB2828;23:fZRDJDNu9yL1fDk3I5R1URPcvLePH90qYkT1+ncC0?= =?us-ascii?Q?wIl1qiu5IvEFwOxKCtQyqVYEmy/O1xjBB22GsgzdlQPMjQ55cIwZ3eV0glLs?= =?us-ascii?Q?ijNzFA9iAfNLyPu+BkGAJrYg1jVG3EStcCwTajbm2fmuWA3xbleniM0nZvlH?= =?us-ascii?Q?UzvPf9apoiXFyufQARkOsx/IffstH0zd4ovV5Jq/Z1F7VndBMtnqP8aQRwCh?= =?us-ascii?Q?zJOBIxMkWiuXfSapWN8pjYeubZO4csMBg2ChMpN4ttfa15Afz2bQxVmiHH5K?= =?us-ascii?Q?3KIRAFfD9HcUUahSiDYH651S4d4kqPD203u3VUIqcTSPCrZo1y7qlxmCsba8?= =?us-ascii?Q?X7yvJh/2swuLqL9o4ICFq5KO5hqzd4/peS5gH81N/66vuchMp618kiNjy0WH?= =?us-ascii?Q?CXAharvU/f05NuMZgZZB6fKdMqE56z3c/X92WTpTbY663Iv6tMp2GiHvuLCU?= =?us-ascii?Q?8mUnpjZwTSGUWjF5nULzHDQCinhIJD/AXyXp85eVVd2xMIC0LaaEsafkWQn6?= =?us-ascii?Q?G70gbbZH8jUny5jrvcEv1cNCyFI+HW8r0d1Z1Vc4VloiC6mJ50uWJPxjmOD0?= =?us-ascii?Q?Zi5NtueTimTgdVN+bVg3XvRMpUy1hVWftqDRNCo5VVQNc+iRlrSY01jVesGe?= =?us-ascii?Q?GV6260df7KiwUBlN/llxpGKbGKXDJ1X4M1D5rOeSKMm+Rs2pVDFmqu0YUw7C?= =?us-ascii?Q?vaeZerlb2mugkXG/Z4iGRoX1yLTm46WwzlMhtuSp4p+u5Lpz8VXuPIbQrTTe?= =?us-ascii?Q?+0fFisaGnaxsxrY+oMnbsLRPJlQaCWC3nXH3K/NsiekMsMXGYntfx+NhEFow?= =?us-ascii?Q?JmG77oOPP2L6lOFVVYQVl1ZS+0EkcKn8ucGruOqHa42f2MDApCNtPxXNo4yA?= =?us-ascii?Q?cTStSBkABTqygVJZ9YsKi/olyoBJxZ645jSY6nwC9I0QdKXt8AvwL0XzyJdo?= =?us-ascii?Q?6O3CNHbDFoEgS0d5fiUcdPad5rNx7d1TSB85Y/nI0qSKBSg8Foklt4u2mMOT?= =?us-ascii?Q?32FsJ/OAZYUvDfVeXZ0l+sUFjMPJ3pmVVu7RjCBhHx1RybvQOMZ5jxpMf2EO?= =?us-ascii?Q?UDvupRdOnB+baJ/TtFdVv4yL/hjhcIriWxRp3MdVKc+U48k2AkesTkqgMjf2?= =?us-ascii?Q?6oF9GtrdCXobC/+qWW+03WnL9NxrCHuPkufaB1OKmcSuppN+Z632IC2sEoxs?= =?us-ascii?Q?dB0zSXYrRMsvxUVMRYQG7/SXGaHK41BOG9BZfSXhl6aUY6/BS/zjHrnQplu0?= =?us-ascii?Q?RDD4r8GHWG4XhTKs48LvidMV+QWknBLugKmmBKpc3E93z7LSjJRslzzglipG?= =?us-ascii?B?QT09?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;6:JcR08OoVe5r7wKEQBdkvEdzyKwFf/pS1pI19mfl/Pbv5NXoJ0ekYPVfu1bfnhacZ2sL/dg4c/qGkh9kKdVxtmdTquFV305AL8eh30UpdBneXoKF/vNL/EkjDFir/DdJp4BbzvFCVkUtg7cmWlh/tKqzc/HpvCq0svAoX85hltWyP0karl0aIlkvrp5efk+sPPK3ztSecx4aCsbQ0Um93CNpKdA054PiXWE8eIeCEBdF8/0/8DCzd4qmJRdDCLc/B259P6AIOQdNl/9OIOc8AhnGG8J4BV2OEe+TP9CAE4AskCvqCeQpcY6Nj2dEbDkn7ff/x8bdpxVgZOemZBEgZ5PBf6Dkf6EDIu+6b33Ox/gk=;5:yVbfs3qFv+us8k/zl3NYFF/6jftcaMFltPAwqd4OPs2MVR8f67o9PZZo6uYSa3X1IN57A0DR/fAbbWYr6MI3hVr5lM/Tmw+KE4hpXhAmpaB7vmA3XwdwfnwMXXXvmGdo6gvu7nwn8AClwz/DABjMJgwyZVVUYKGmFfzLEbxjrUI=;24:JzXkiA4tzh3J+xvKlqQstPS4nMFDW+inp0NubBMvjx71D2PzR6SfgQPn3CmkC53lug6gFA7K22XuTixq0kMiAjBsPvmwTjOm6UWcZyVTv0U=;7:CpDeBF/ix4QtNsS4tvPY23+B++VyeLOOHlNCeKxJbbvfE+rIgoty+RkiIiiV/pVCcfdwbHGdUimvrEOKpGKgCWdETCqHFvZDyCrGmTYBY78uLhX7lNePaieo7MxABb2C1cNRsSL/XngFHB4CxYWz2CEruEN4+whok1fjF8IV+f5GQzJzF08Aqv0ULtrG8i/c1UIwRB4xNvlqGn4NPW+3ofP4AnzUMeoBD9SZc9DxUqaFDgGoZg2QPyOnSel1hUoC SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;20:D+HwzgGfWLhL+GoTO+wT8POJf1nYwPVzhCF6pahOHi29525oUXlc9DsIGv9k4bd3Q4LJHwXGKKu9UtCvjGVtAR2pPlW7k9KdoXkrXl2iWKfQrnRIEoWwL7RcyO2tWzpInB/J7j4wpMWr+9HZ2R5wZNTNdmxt76Uuhf+ldX+1cwo= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2017 10:21:11.8582 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8b334706-295a-4949-4300-08d5479364e4 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2828 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org mem_cgroup_resize_limit() and mem_cgroup_resize_memsw_limit() are almost identical functions. Instead of having two of them, we could pass an additional argument to mem_cgroup_resize_limit() and by using it, consolidate all the code in a single function. Signed-off-by: Andrey Ryabinin --- mm/memcontrol.c | 77 +++++++++++++-------------------------------------------- 1 file changed, 17 insertions(+), 60 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 09ee052cf684..b263500626fe 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2459,9 +2459,17 @@ static inline int mem_cgroup_move_swap_account(swp_entry_t entry, static DEFINE_MUTEX(memcg_limit_mutex); -static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, +static bool invalid_mem_limit(struct mem_cgroup *memcg, bool memsw, + unsigned long limit) +{ + return (!memsw && limit > memcg->memsw.limit) || + (memsw && limit < memcg->memory.limit); +} + +static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, bool memsw, unsigned long limit) { + struct page_counter *counter = memsw ? &memcg->memsw : &memcg->memory; unsigned long curusage; unsigned long oldusage; bool enlarge = false; @@ -2476,7 +2484,7 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, retry_count = MEM_CGROUP_RECLAIM_RETRIES * mem_cgroup_count_children(memcg); - curusage = oldusage = page_counter_read(&memcg->memory); + curusage = oldusage = page_counter_read(counter); do { if (signal_pending(current)) { @@ -2485,75 +2493,24 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, } mutex_lock(&memcg_limit_mutex); - if (limit > memcg->memsw.limit) { + if (invalid_mem_limit(memcg, memsw, limit)) { mutex_unlock(&memcg_limit_mutex); ret = -EINVAL; break; } - if (limit > memcg->memory.limit) - enlarge = true; - ret = page_counter_limit(&memcg->memory, limit); - mutex_unlock(&memcg_limit_mutex); - - if (!ret) - break; - - try_to_free_mem_cgroup_pages(memcg, curusage - limit, - GFP_KERNEL, true); - - curusage = page_counter_read(&memcg->memory); - /* Usage is reduced ? */ - if (curusage >= oldusage) - retry_count--; - else - oldusage = curusage; - } while (retry_count); - - if (!ret && enlarge) - memcg_oom_recover(memcg); - - return ret; -} -static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, - unsigned long limit) -{ - unsigned long curusage; - unsigned long oldusage; - bool enlarge = false; - int retry_count; - int ret; - - /* see mem_cgroup_resize_res_limit */ - retry_count = MEM_CGROUP_RECLAIM_RETRIES * - mem_cgroup_count_children(memcg); - - curusage = oldusage = page_counter_read(&memcg->memsw); - - do { - if (signal_pending(current)) { - ret = -EINTR; - break; - } - - mutex_lock(&memcg_limit_mutex); - if (limit < memcg->memory.limit) { - mutex_unlock(&memcg_limit_mutex); - ret = -EINVAL; - break; - } - if (limit > memcg->memsw.limit) + if (limit > counter->limit) enlarge = true; - ret = page_counter_limit(&memcg->memsw, limit); + ret = page_counter_limit(counter, limit); mutex_unlock(&memcg_limit_mutex); if (!ret) break; try_to_free_mem_cgroup_pages(memcg, curusage - limit, - GFP_KERNEL, false); + GFP_KERNEL, !memsw); - curusage = page_counter_read(&memcg->memsw); + curusage = page_counter_read(counter); /* Usage is reduced ? */ if (curusage >= oldusage) retry_count--; @@ -3233,10 +3190,10 @@ static ssize_t mem_cgroup_write(struct kernfs_open_file *of, } switch (MEMFILE_TYPE(of_cft(of)->private)) { case _MEM: - ret = mem_cgroup_resize_limit(memcg, nr_pages); + ret = mem_cgroup_resize_limit(memcg, false, nr_pages); break; case _MEMSWAP: - ret = mem_cgroup_resize_memsw_limit(memcg, nr_pages); + ret = mem_cgroup_resize_limit(memcg, true, nr_pages); break; case _KMEM: ret = memcg_update_kmem_limit(memcg, nr_pages); -- 2.13.6