From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759942AbeAIQ6n (ORCPT + 1 other); Tue, 9 Jan 2018 11:58:43 -0500 Received: from mail-eopbgr10115.outbound.protection.outlook.com ([40.107.1.115]:14949 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752123AbeAIQ63 (ORCPT ); Tue, 9 Jan 2018 11:58:29 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; From: Andrey Ryabinin To: Andrew Morton Cc: Johannes Weiner , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Shakeel Butt , Andrey Ryabinin Subject: [PATCH v3 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions. Date: Tue, 9 Jan 2018 19:58:15 +0300 Message-Id: <20180109165815.8329-2-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180109165815.8329-1-aryabinin@virtuozzo.com> References: <20171220135329.GS4831@dhcp22.suse.cz> <20180109165815.8329-1-aryabinin@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0802CA0019.eurprd08.prod.outlook.com (2603:10a6:3:bd::29) To VI1PR08MB2831.eurprd08.prod.outlook.com (2603:10a6:802:19::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dd25394e-35ce-4282-ef0a-08d557822f22 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:VI1PR08MB2831; X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;3:wsGXuo746V5bTxskoCooaRKrKWcoI4PmhhN0iYABmeJbnhS6hT1vxWtUkXZeN98mI93KjOvBTanxe7By535artNg0Auzyj3bA6Tjln5ugYIYGU9QXQhJ5hx3ONXTImmzlHmhic3N/kus7lMKqCvoR45Dqs8MZN2MW6kVzeCc/u9Ux1UKahVZoS6lb0nH+8Lt8WH/1LCWSm7YTJJ9Fzws28BWPdkuaHZQDX1iIDghLF3iqiHQ3SnsKDAO9blmqc2U;25:ghZayr9E7oBVCujgrQkv150vz8GZS4c53r3lFzDTvCsn4SBCXmFJ4LWEL27Fdy8gaTzJHf0tXmW5yq+9iqS9tUg2QGcc2Nr8W1pfZpFJqhU3gVeBB4Rh6JyqxAm2LKGtlTm8Kww3wt0vgNgX1guuL6gsg8RrU6FpblCJ7lS2FiPNXdd4wIzGnjGun4w7jQ5xj21jU7NnJ/Gg1b5AMt92YiQW6ktOqM70heDHLavhyUwSbso3IHo4nkjyVFqNCMDGV5lSdo9eq/p5d3Y+NFu7OjXqoDJ6hZhO1dBG9OH41eYo2Vxpsv3fCA7vZ/QAVoTc6YSIUmvp/eG298aFibLgjw==;31:0NeAPu7yJrnbMo+uqO/h5B/jwrQOmYWyEShhrxDodz9tMmNRNF8RupbcG/xZ34jYWGpO38S4JAe7mAGPIOxUS3zAtXr1RZaNnBDT1AWviMgy3zlWYqXBGKfZg34Ot3pBJ90kHRv9tc6RHfqqFNNUiENjswN82oxSrZS3Ji7g8RUKdH6boHjctFAdLZDuXzf3FZejhOM54T0S0l0QgEoHJ7E1K+1dPaYjl82rVSaK/6c= X-MS-TrafficTypeDiagnostic: VI1PR08MB2831: X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;20:2bIs7InCjRoCboOnygfdM5kCgMuj5hU6UWOkXs2aFnsNRUT3UTBlWmeY23bFAFkNcex8uRAyZqclDzYVKINAxKogkQ3Hhavo9ojo11GwNd8v0lVTQu5ZNW6erbeXPRTZyu8gcjVJScwerSRFiDW2jDHZvS9TVG+h/p5rdDOqhwQILVJrREb4ptZgsywH8sFEarEa+q/uFj2ObKKyM40s/QuV9QsdCLEZ4J8a9eZ+1aoxzBqhEhJcJRcZ4uQHKAgnhvelL8zax7rC6DUBS+LgZg07maUokUJQOGbcS337GIHyNracJh6FCtsq4r9EnQRycarJid0Xv+mzH4yx3xIowZjlOzZHJk5xBmmj7AyKo7t/tPjMuy1G106kpGsFhdyD9rJVlDE+i+xngrmTaV09J5XWFbDZUnwT1Lb5eHb4je0=;4:PUHutt5MntIRV6LcZC4/xwD95tGZPE8rYjbaNKWVVedvojbXDlExqQi/e4qUyp9IxtNC5N5U+NCf1fXWpvVybQNhwAG25EomzYw5Uq6NoKAIO4Yph5jCKEgLaG9D0SXEGCxyVu4NPqxUtaBBC9NfigbEopuXEeLHyYu8aPQ/T5Sy4syeqqLVzSOY9kURt/3JZyBcdFUv+Zx/T2kdM0Il/2eclPjETfxINais6HThjBwwiG3oezWlRDtecvnYV04FR3+q04tIUrrfkel4D0Rq0A== 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)(93006095)(93001095)(10201501046)(3002001)(3231023)(944501075)(6041268)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(6072148)(201708071742011);SRVR:VI1PR08MB2831;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:VI1PR08MB2831; X-Forefront-PRVS: 0547116B72 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(39840400004)(39380400002)(346002)(376002)(366004)(396003)(189003)(199004)(81166006)(16526018)(76176011)(1076002)(36756003)(8936002)(6116002)(47776003)(66066001)(48376002)(2906002)(52116002)(59450400001)(51416003)(6506007)(3846002)(386003)(81156014)(25786009)(54906003)(8676002)(86362001)(316002)(97736004)(16586007)(478600001)(50226002)(50466002)(305945005)(53936002)(7736002)(105586002)(69596002)(106356001)(4326008)(107886003)(76506005)(39060400002)(68736007)(2950100002)(6916009)(5660300001)(55236004)(53416004)(6666003)(6486002)(6512007);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR08MB2831;H:localhost.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR08MB2831;23:C18w9wObEyh3qtQwdwRC4BIKU5ZnfJNgYFc2QZ6mi?= =?us-ascii?Q?lLOl0izI6qaaf+Icxg2ow5cSzgHNxyOKlNdAFpX6y1akNeYrBRjHoIIFdQZg?= =?us-ascii?Q?RhDuSDUqmC4mxnNqPOx1rwJu+f62hIUaYHLACmI1ZFY9hNpVlp5aqGqf1/HN?= =?us-ascii?Q?q4C92NQh86tLc1PjJy05xyPEpRFaQUndY6uxl8Yynv2s652iPBoxRohjf7SZ?= =?us-ascii?Q?mpePmCJYqrECYJqQLGaCPZXL17799lRiTJtkLVXpmnHlJBoLQPcNPMspxFnl?= =?us-ascii?Q?H4YXZ0cAJpVu9Eb1YBaOJ5nKt9LOTFtq+joIbnEPdmpBHcGnN76iC9FUi8C4?= =?us-ascii?Q?lz4hML7gQwKWGcCX6omWpBym9BJUwLBhsn6tfyXWMMPA7uohae0r/VU0ywT2?= =?us-ascii?Q?q6ckqD/YIS0eLwXyP7sPEMNDZisD/zjLdgSiC1scsUn7imisy8d86J6f9aWZ?= =?us-ascii?Q?FV+8re0eQsq1b6A/idFMcBrGMliL1UrjeUnHs9U6Spm0vYcIkEiSrO8SUh8h?= =?us-ascii?Q?XnP79NIBPfSaXypoPUpwcLKp1rVx5ug1EukuEkUvY4vGd55Qz0uAu4NCgvMB?= =?us-ascii?Q?i6BBUhkySapGclZjMX/ceYFCVTDxtQtpHtKwiigJP0FXWRQ57AS2AA4q8Kqv?= =?us-ascii?Q?W5jDMde/8eYUEnvKVMIIyZJdftl4JnBgYYc7d0i2nxQSbwM0fKrnvtw3+fm6?= =?us-ascii?Q?plXhVosjsfNMJr3DasejyCYfZ8E4V9nuifPJ3p22CIbfd4t5S45yXkcIUjHN?= =?us-ascii?Q?djHkIMleL4jaH2lS7YP1PEXwuo9NDoUAGZ6sKZynqObMsZZ+Lporbxn7ifun?= =?us-ascii?Q?nYZ9gyifTHa80eD18rdqweKYR4/8TxCu6PRktQLTYPFX7Q5C1LTtQi9izPSp?= =?us-ascii?Q?I5Tf7rksnFprc9tzWJ+vcDyHnG7J2KZ4IH7axzQ9Bees9JSYcX/C491ykXGI?= =?us-ascii?Q?+HScQvMEjY4jqQjLaqatu2v18kPPm067El1RHC53z0Jqaf+ii/LUNuOeWJiM?= =?us-ascii?Q?nerwPIs5iHGouhn7vBUie9G1fYz+u+eIt7Wb5i+cv85M+Rr9HtRot3I7VA2C?= =?us-ascii?Q?rl5arxWYY3hfLsqaHPtfB2emF8lDwJ7xYXaOLwmlqFR84btUkvrRO1IMB7h0?= =?us-ascii?Q?QxbRGKoJggLfrZr9d6MJLwjmNiFN69tuNWVcGCsGe6zFDXrcc+dWduKTD+1a?= =?us-ascii?Q?1eNmIOxiP5oi3pTUMDg3CtEsQPB1X81ozVuAcaZ32K3xL6yOYeryn7kPWXZ5?= =?us-ascii?Q?YmAezHUzXLleZuhf8YVersT6gtd/STHvsN0aV5et+zC9REeDg4PVMqBHKoQx?= =?us-ascii?B?UT09?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;6:jCgaJX1um7zTLTGTdL4aS/rCgUuYkK+af6ucctDEEsbwrdJkqgo7tw1CpKPrYDZagxcH2pwvEkwvSv6kaMgeJW/1MuLWF5gzt4colq1J1Q68gQOzvXmHXGem4t91XAP1952Wb/q+r9cY3Tf7JFVJY+2dnj7l0DF/6hSqvU0WQVZBEhMzVuA5iivATg/DlCE5WQt4U4c6hewV14cAsU/euj2EXzl3YTAjwpV9waWVM3HTgklWil2yB8ohipzSMcX+Ci+GX7oyvHM/yUYORLx9vZrobqfD6hcO8QNGKh7/Hq9WaZYukPsywH36rv8DOlFdHgUq8vqqgUuZDFsZZ6AljKKwDPbxontyp//0dj3hz3o=;5:PGV0malJMTSCWejbHNEDwV9AVy08/8abOFuwFWeKQ6dJ3lcJ4eX3p9lih2cFoq09QbJtZoUr33RmLRQtZKq/dKK8FBhZlJekXx9gVvxntk0Ma5pNVt6OjzrArzgpH70lpIo+PrFRM/qaj5uK7DJhwaD/vciuKE6eQeeSrUaFZdw=;24:qCCyk6wBO00Zzeu6h3TXD/wuNnWvBP8dXkbhkFpWzQ4faLKYq2tvOsyoniPmoxg8OHcOKmDRPeU0BhQYAqBTtGMkwEHtr7/Z091i4m6FB+c=;7:yy/ARGM6fxBzI3TZQRoQ/wDnV7pZoXwSf1TGMTJuFjUo7ly/VYZeuTFKCL5laz0tLo2RAKJK2RR2vWOLaPh/jI/nJqF1J35PfUAoDubO1B8FgzM6hdBXEI1ZDS2mkzSykFBD9vNW00gtm/Z2oEI0qzOoPPmNoPudj5Lh+iu6hMUvz5osx1uIo8S2m/MGdkv8pqyaBYRBf9gXQpvryZ2zFCCLIvhH1wHJ5OxOIkEAyIlAbuyN0ZCYZKq10QSA//Xi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;20:73eG6Hnw+7QM8FvP/C6bHSwc/jg2IwxdvGIFb54u2WCoLYyNVpKFzEkTNFmoBfSOYDpm1nVVeMRnll8w5qF6A8R5KKgcNFWYDjIabPrWd7HbCJztTJZJxvE6qb67dROQ/4xwxJozEXkFzETvpsoJkRxRuVbAkSCUcLtw+eMjFm4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jan 2018 16:58:18.4414 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dd25394e-35ce-4282-ef0a-08d557822f22 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB2831 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: 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 v3 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions. Date: Tue, 9 Jan 2018 19:58:15 +0300 Message-ID: <20180109165815.8329-2-aryabinin@virtuozzo.com> References: <20171220135329.GS4831@dhcp22.suse.cz> <20180109165815.8329-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=Zp2sgzyc+4wuJYAcKNpdAf9zSS9/d4IlHaIXBHWJW1FgSprhBAnvIibj5GCxFCnqG5kIsQi6NXLOtoAY5R3YvXn4aRJAkH0ZkiXlGYh5NbAVk/juRNGh5B22Qk+vrkx60UrPGsHt2Z+XY0lePky6X3GkTmaH46smjBTTPS87DBs= In-Reply-To: <20180109165815.8329-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 , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Shakeel Butt , 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