From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755351AbdLTNSR (ORCPT ); Wed, 20 Dec 2017 08:18:17 -0500 Received: from mail-ve1eur01on0124.outbound.protection.outlook.com ([104.47.1.124]:43908 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755184AbdLTNR6 (ORCPT ); Wed, 20 Dec 2017 08:17:58 -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 v2 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions. Date: Wed, 20 Dec 2017 16:21:14 +0300 Message-Id: <20171220132114.6883-2-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20171220132114.6883-1-aryabinin@virtuozzo.com> References: <20171220102429.31601-1-aryabinin@virtuozzo.com> <20171220132114.6883-1-aryabinin@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR02CA0099.eurprd02.prod.outlook.com (2603:10a6:7:29::28) To DB6PR08MB2823.eurprd08.prod.outlook.com (2603:10a6:6:1d::26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 59ea5a73-8e03-45b6-215f-08d547ac129b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(5600026)(4604075)(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(2017052603307)(7153060);SRVR:DB6PR08MB2823; X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2823;3:2QHQJxGg4cQHnJj1PcJlRuKPSglf0gqKkV8Thz8AqsA1ao/ydhbq2tZZW4UOtYP8uqOV4UOA1iPzX2O1AQZ0RD6s/kLnoNdzJCdhHlI2Q+k2UmszwvLRTukvE4oa5iDjxkPoNUqMnmQwIcx17FYgUKWrKpr/CtTVQtUvCL2v36iwe9cK8q+tk7exNRdzUZVdfywNKr9Vup/o5C+vLAj51qMqKiJ0YO14fZGs+aohfzL8Jr9CtxLRKICgOYDi+Rz4;25:U206Pxi/NmSpV8/cBs2iIgG1vidL4aKi2N+dBrONH1JtB4SobF1Dc+/nJFUgRyL+gaNrvEcGeUBYNPmPqM7MR9fSVrOGCoW1AJ5DmeE7c1jXEHcK4pwZ0atmWKPVQHx/3cm1Jr+dlq2fLTASZXjLif392owa2D7Y6IeQb3WLGpZpuNAFDYdTOfN6xhQ8jZRV+orFelXTCVWK/SNdOZbcKhGOJRpV0ALziQcbWnPmS53jNz7K+TEz5ZQmM1kpoFq9j/UmSBEFu0yiGkHKid+x3jFHbzKCdzEnr4Nu87gETHHRym3aFGeNwQ+GsfZrNoLXmGOTWUlIfK/5uGLJpIaS+Q==;31:EEkR0O7UNx8a1gBWGGBHLhP8UcQMiE3Km+Hy/NXW92QUdKPtYzzqA0u7PsxzDvBnXr2fuRN0F7NWbhPfQvxIFqiD2l+ios72XTUwG1K+JqyM5xY9RezYRzS8dWsanhuN0sCEYEkxRVazltdeW2I+sktZVzb1UuX+snEjTVs6uGghvLM8u5gqr1U+VQDBFVhE5h/OlnVtPBmPqYfu7Z5FZMBsRN8uFUPM29V4zuDMpwk= X-MS-TrafficTypeDiagnostic: DB6PR08MB2823: X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2823;20:edGVz3w6nfc1v4h33jaaYItrtRQwZ6Teq2FJ8p1NUT9vlo4V0N6/3t8e6ltA3JyuvNd15vcnMZdJcvIRBhlUDDEBUN/RKnsV+PHG73dGb9PTX2fWNRMBH3TtwX5e3yeMcLynL/sPRnAKC5QO7byegRClwVZ6v+l+jy9gLr1kIBIHc3uRZSJl9zZjt3QJvnoJOLtENs15NEfXn7Fr7l8CgDKfTVnil0hzOWM2zb9Xe6ARoHT/Ffr/nM8iz8aXyKvPTUe+l6/5pQqsk/tsPo92pOCBhB1l0mO7onl64vB4r2mw4GwwnAszIfCguiW1FLfSjy0Y7/ELADwB1eN2tfH+WQSPCA2dVfX/Nq++JMdPTIdYRuC2kxnlNDPRh5pTKSNLNuFULPkl47h50xm/YuLbhe6HwvJxPS/g32rjpgzQT2g=;4:RkawQYutHvIN3z0/ACIzPvLStx2unvTZWi/aas04cJFkawrznuqkaUXO9ZRF50GAnak5mdY6BW/1jATCpFcadPMDrGumWcoj+nxVgLE8JI2urQk4zD5ElZGLivDSIDDJZ6SAXqae/ePHMTFsvN997MTrF90oagrnMsfmj4JRmrJzIyTGnZmag8KtI57uMOfKDQO+XvNo6FvawJL5qsCFWo5gY8PJ/ypdjOnzu++fqi4OKhego0YO2WLz/N9RfmA8Cbw65u8ePfddEefcS2kF/Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231023)(93006095)(93001095)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011);SRVR:DB6PR08MB2823;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:DB6PR08MB2823; X-Forefront-PRVS: 0527DFA348 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(396003)(346002)(366004)(39840400004)(376002)(39380400002)(189003)(199004)(66066001)(6666003)(5660300001)(36756003)(68736007)(6916009)(105586002)(106356001)(86362001)(16586007)(316002)(47776003)(76506005)(97736004)(54906003)(76176011)(55236004)(51416003)(69596002)(386003)(52116002)(2906002)(3846002)(6512007)(2950100002)(6486002)(50466002)(478600001)(6506007)(16526018)(59450400001)(107886003)(25786009)(81156014)(81166006)(53936002)(48376002)(53416004)(305945005)(4326008)(39060400002)(8676002)(1076002)(7736002)(50226002)(6116002)(8936002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR08MB2823;H:localhost.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR08MB2823;23:rJjjYA6mJEdgx0EqXa8hbl1+g+gGGDmR7+tapYu3e?= =?us-ascii?Q?jGKUUWIE5VGIk3gX8WToi7nyS5SB9NGer0B2mu7P0VQXwhu6K8XC3FPyDHZ3?= =?us-ascii?Q?04kcB56odOJGy3nh277T45UH0k7puXM2bbT3rJv6h9eG+q8Ne6aQjFoxDMcE?= =?us-ascii?Q?tuYSnJ2M7Xg5JmFr5S7D9T/M8Nqoq1/gzw14sYohCvngK/2g8+d7rmdiagqG?= =?us-ascii?Q?txmo4me+qhYWCzpWTMfluosT6C0MbaspOaKAPRSUnnP4FQH9Pg+GsAJWvGKZ?= =?us-ascii?Q?uwlwlwKA/NrdQkSPsO6Pd56UxnWgLQZtS8+igfkV0Cg/zUxbKMQLqsW6WION?= =?us-ascii?Q?O8Lq8KtPWF2qorLngHmFnwUSp7XBpJso0yLO6pyLrsiLhXP6tx+0wYTg2dMN?= =?us-ascii?Q?oTqhU2HM5Ii/rKFXrXpu1uMnopNrqq8gW4fdwIOtbldv908QfPsnjcxkgb0u?= =?us-ascii?Q?pc7U0f11Ew7ILFcyLQFj2mFcr4+Rz6vBKfrZI9jpdDdymkx/AGQQ0UBEwEbI?= =?us-ascii?Q?ywjQVaCtE0W9eydWHc88sOrxcAtgPBeYQusFOIZC/ujviIx9vqx10gZS5ivW?= =?us-ascii?Q?blsi1P7JYEv++TKlsMN66h7xtD/2S/ajHEEuCljLYCd0wkBjQ6EzkvVJ1UT8?= =?us-ascii?Q?u61bGfHVwH4zJHsEqu51tl75kEoHIgTfVHkm1n6Y/Wix5F0pj/E4Xzph4wbv?= =?us-ascii?Q?vqBN2pKViMVHib4FCGnC221BRNZSkhBHyHzOIsdhv26ZN74aXwsIksCEyAO1?= =?us-ascii?Q?cz3hR6A9SYdnNFvSp2BlGVGgwvaeGIWIm+1zxZPDWOb5expCv4CLDl+ZbqA6?= =?us-ascii?Q?qdfIbd3Up/er0GHg2QNrAxUuqVYJgZu3ZdwOAgiECqyUzP1+rdjQ8fFFvKny?= =?us-ascii?Q?dzOjWYCFmZ3hGl8hM+4k92o0kf2tOjW32zHKokNOrt9HaFTg8mVgPCNE0Toi?= =?us-ascii?Q?p+xWsPPbbuUIlTaEdi/bfu3w4iTTHslCvR/mMk6s0z9d/FyoQbT6cGSVM93F?= =?us-ascii?Q?63ZZ/R8jxbszJdfmJMGTPnYghF25J2ehtWAFuDcoQT96sOZfeJZEEe2kF3Du?= =?us-ascii?Q?dvNNsoWH/88DZyP/ZYhClZZ5NYAkYxnbWmLtTi3ieiJEdXJYraUqxm/mltkZ?= =?us-ascii?Q?D8gpgFh0G0SBf2V/USscu/MO90csxTBjr5a4rNAzB4lcpVNOXlDh9aNlgGzA?= =?us-ascii?Q?Ue3aMK4keGW01i9zaIXBpkMotrNfx45uyDFGG+CgMuykNC0ADGYnqETphLke?= =?us-ascii?Q?rtQUXtq0NGI8UA5qujcNnTCoT+wv2oLb+x/81ZKupFwQ8FVmBY50srwz4hkO?= =?us-ascii?B?UT09?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2823;6:zFovFOZyVee79VC3IdsUlotLA7MHn7qYVpxYcxLlDF4HCmZc7PyfKdIBrBqMHUdMcwp5p7GHmvA8ZYMgKvM//AhF97zl8uQkfSFDivqpCxqQ3bnCJzopdfWQxzuYQoJDmq1VB3bO0asZIWvFmGXTOCVMhVRflwYSoGR5SSLlCCFn4DN2EMbBnqKrvhHIjgLgkf/RZKyX86BBjozz11/87RnFqP0GrGFdsh16O16ZD9AZR3SHHkmzhDKtHPi11Xlfwb7228l8VQJSkSXvwFz3YNqmoXma1aG+OZeRbw8ivPdvmj7DAQMWaExYSOaKAoOtnrt9yAofi6acBjoUXDi61tStr55ntYlRO1jA1UyBQZg=;5:4VazHmd8HSyuRSS1iD6uj/RwK82aMNLJhRC16yolUZGFzrpRPcWJGIIPY0UJUwKtZ6n52Af6wvOpWryOxX9yxjJNfAkUxS/EwruM9LMPnfa3OJ7hJh9MmkTDueiXxwbwcw7nDvjxGt9/2kpr24YNlin9rfv3pETcVmioFOmTqDc=;24:dafOdbFmhqHtTxw/GIjjUrMY0RUlS/gdoQ9HMsr1ywW6IZepfNTWZPWxAxnvA2d2FVxHs0330KSepM77Ei0U5vbNBeDcQN0nzkU9rkZbNFM=;7:j3KCZA7zAL5D3MxRiCN9lLDq6vD67sBrRDGUzxXans7qDnloSWnA8biS5VpmrVaJTMhaVEX0M2YM3FN8q1PKsA7diaG/yR7zLJr3EAbERjLOTXl4wUVjK3KsoGvG6/FGXatysGiRVhNlkYlwZzJB+QhBREbpvR9gaFxaGgzC8e96eUJp8mVdgOcNnvBPaDLM915nrE4FOtMm6BtlbxDCmcKZPyJM8xqLBf8Hsa/RZtZqM8Nfb64+DkF/SpZ2LvWQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2823;20:WW6xttgXu4/aziLqDJ311idDy/RX5qPvuSaTtYb0ktjHHYa6EUcntxewssaGTzDGXqdC5N4S1CvqtrhpqRZupmjCNQlQF622QIo7ey+FTr9xmngIh5gMZR+px0UcyTuDvuVkzo7OE2+2d8v677UN8BLzkIp5cRs9X2Gjlr8qRQs= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2017 13:17:50.7396 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 59ea5a73-8e03-45b6-215f-08d547ac129b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR08MB2823 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 | 61 +++++++++++++-------------------------------------------- 1 file changed, 14 insertions(+), 47 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0d26db9a665d..f6253c80a5c8 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2445,50 +2445,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, - unsigned long limit) +static bool invalid_mem_limit(struct mem_cgroup *memcg, bool memsw, + unsigned long limit) { - unsigned long usage; - bool enlarge = false; - int ret; - - do { - if (signal_pending(current)) { - ret = -EINTR; - break; - } - - mutex_lock(&memcg_limit_mutex); - if (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; - - usage = page_counter_read(&memcg->memory); - if (!try_to_free_mem_cgroup_pages(memcg, usage - limit, - GFP_KERNEL, true)) { - ret = -EBUSY; - break; - } - } while (true); - - if (!ret && enlarge) - memcg_oom_recover(memcg); - - return ret; + return (!memsw && limit > memcg->memsw.limit) || + (memsw && limit < memcg->memory.limit); } -static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, - unsigned long 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 usage; bool enlarge = false; int ret; @@ -2500,22 +2467,22 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, } mutex_lock(&memcg_limit_mutex); - if (limit < memcg->memory.limit) { + if (invalid_mem_limit(memcg, memsw, 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; - usage = page_counter_read(&memcg->memsw); + usage = page_counter_read(counter); if (!try_to_free_mem_cgroup_pages(memcg, usage - limit, - GFP_KERNEL, false)) { + GFP_KERNEL, !memsw)) { ret = -EBUSY; break; } @@ -3193,10 +3160,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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrey Ryabinin Subject: [PATCH v2 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions. Date: Wed, 20 Dec 2017 16:21:14 +0300 Message-ID: <20171220132114.6883-2-aryabinin@virtuozzo.com> References: <20171220102429.31601-1-aryabinin@virtuozzo.com> <20171220132114.6883-1-aryabinin@virtuozzo.com> Mime-Version: 1.0 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=3w0PiCx3hcLyyxeHMQnYDrCeyBp0saceQ3nZuDp4/uo=; b=HNmPRl6PrB0aa6dthnPJfKZi7Az5UBeozbQim5gdPFJzySyBtr92pcNViMXwenL5RkSIBDOPNqdkZopMg7ESk4nyVUcv9MGHa0PayoLHxdboIg76BzbI44wCtMCLcFYT4+SHiHouxAHKzenohJrWUp/l/2fb6ThJE/wfZ+WTgKU= In-Reply-To: <20171220132114.6883-1-aryabinin@virtuozzo.com> Sender: owner-linux-mm@kvack.org List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 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 | 61 +++++++++++++-------------------------------------------- 1 file changed, 14 insertions(+), 47 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 0d26db9a665d..f6253c80a5c8 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2445,50 +2445,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, - unsigned long limit) +static bool invalid_mem_limit(struct mem_cgroup *memcg, bool memsw, + unsigned long limit) { - unsigned long usage; - bool enlarge = false; - int ret; - - do { - if (signal_pending(current)) { - ret = -EINTR; - break; - } - - mutex_lock(&memcg_limit_mutex); - if (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; - - usage = page_counter_read(&memcg->memory); - if (!try_to_free_mem_cgroup_pages(memcg, usage - limit, - GFP_KERNEL, true)) { - ret = -EBUSY; - break; - } - } while (true); - - if (!ret && enlarge) - memcg_oom_recover(memcg); - - return ret; + return (!memsw && limit > memcg->memsw.limit) || + (memsw && limit < memcg->memory.limit); } -static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, - unsigned long 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 usage; bool enlarge = false; int ret; @@ -2500,22 +2467,22 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, } mutex_lock(&memcg_limit_mutex); - if (limit < memcg->memory.limit) { + if (invalid_mem_limit(memcg, memsw, 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; - usage = page_counter_read(&memcg->memsw); + usage = page_counter_read(counter); if (!try_to_free_mem_cgroup_pages(memcg, usage - limit, - GFP_KERNEL, false)) { + GFP_KERNEL, !memsw)) { ret = -EBUSY; break; } @@ -3193,10 +3160,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 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org