From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757798AbcHCMwm (ORCPT ); Wed, 3 Aug 2016 08:52:42 -0400 Received: from mail-db5eur01on0092.outbound.protection.outlook.com ([104.47.2.92]:63075 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752414AbcHCMwk (ORCPT ); Wed, 3 Aug 2016 08:52:40 -0400 X-Greylist: delayed 10776 seconds by postgrey-1.27 at vger.kernel.org; Wed, 03 Aug 2016 08:51:05 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=VDavydov@virtuozzo.com; Date: Wed, 3 Aug 2016 15:34:45 +0300 From: Vladimir Davydov To: Andrew Morton CC: , Johannes Weiner , "Michal Hocko" , , Subject: Re: [PATCH v3 1/3] mm: memcontrol: fix swap counter leak on swapout from offline cgroup Message-ID: <20160803123445.GJ13263@esperanza> References: <5336daa5c9a32e776067773d9da655d2dc126491.1470219853.git.vdavydov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <5336daa5c9a32e776067773d9da655d2dc126491.1470219853.git.vdavydov@virtuozzo.com> X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM2PR09CA0046.eurprd09.prod.outlook.com (10.160.228.142) To HE1PR0801MB1866.eurprd08.prod.outlook.com (10.168.94.9) X-MS-Office365-Filtering-Correlation-Id: a93b2c7a-af1c-4f1a-12dd-08d3bb9a9101 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1866;2:PHwKbIrMH/YSRV9vLxr5TUw+RQ/Eufo5ycN1dJ/gwYEYYoutzlS9neWR3dJuOSUlNAdECorNg7h08Unj1GsDWsZvigSjNuRNeK0ato8ddkfVtxxCnQrPLHTCxmgnvP+RMu/Hpw8hVRFXXXwBIFqAisDlcMRHtXIG2PBMpMRkuglyuOoFopV9vdn0CGvDVWLD;3:LjVa4nrYYKn1DSoXNwl3qWqYpwd2q64oPCnS9CISfdgvInYzrykQq71vrR42buGflLcSnMuKA335XrOrNIlqeO/E5h8PS6PSF6xexTFHNsCrVK9r+ifNt8jk2CmEXg43;25:3O3gLp4c6KXr7dq5MpyAfizqvtX7tOKVhavs9xJbKbXT4YqswbWN1HPO7fYZzgkXJTV65ucGjBhQgbmWtRjALclcvzcbfU5dXc0cr3l32r4/99ePrUmfQwpZMmaAVOaHrTWKC/0yzBsRqfNeXHM98/Jz9Zk4JF1wqUcd7ZPh/iCsIrlr9v9RfiiOA2J4pHpcxYSCkHSip5YahTjPPKkGyJsh/iXO4n5/7j3TXmxvL8hX5KycLG9vfUkrn4tRoSQ1DdWJwB/4pPtUD+a4MRHBQqJc04D3ew1FF6ugH/ezAzz4WUDBTCop8gihyqVieo54Ph+moSYUgWw6KF+tq0wmI7DBgWh1lUNSGUMN0ptvhHh3kAr9UP72IIdx4IHReuo7RE9QHcqSAqt8OwH+vl2Tae01Q6dc30rpRFA+mk094Eo= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1866; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1866;31:ZA5c/8h8QGV7ivyXjySypF/aKeDkFhwQClT3Y9fivK3WNvel6m4F4FniZzXQpd2oH1DXYfMIhxbd0T/cwTZH4K0CxOTiecyP5e6UIMArLlav09rbEP1JmLIHHgDA9kIr2lxt6my/vfKvXjnQ82WMi8mmr2VZsyrLTDr0pYRwpStIvNRqZIPqNvWCKSoc98rVbWtfiuKcz3qSqCzYO9Tscm9L8BFt/ICjYC5oSK6vQNc=;4:cbdcu9eZHK4QGxTaF1RiDPQ5SPFa0CQC/oxICGUHu5nwCqyo8A5hNExaU5p9iN8dHMdSUvt9Q8Gc/r1TozENSUwlTxIssIlmDPx5F41s+EyL/BDRbkx2P2ZknMdoLlQjm8IHbE//oj2NnUZeQtS7gnwQtQ31v6cuK3igrKzZSGjM/lM6RCo7KDzYJJ9OeLTe162SP/3UInwkZUYYGZqhd4wUSJFAM86lL6tP2fN9fGaDa3e3tdphANqA4ZYADIW2H1cyEmuj8evmZiNXURLhhQpIY6QBTSXLU/6YZEbq07wDJQMQPPmQ/RD0xGeQ5FZsJNJGhoy7UbC18tCpWA299xnM8/GecZstT+iX/e/2k6lJQag84ipizAjwKFALA3/wZ05S0OuJA0nRX+TH+tATIywYTZdpULNyNhIsYolXxHBIGZCA+BgEet4QCjjNuoLNaIVj07OLQClXSrtrCwP3Hg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041072)(6043046);SRVR:HE1PR0801MB1866;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1866; X-Forefront-PRVS: 00235A1EEF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(24454002)(199003)(33656002)(2906002)(66066001)(77096005)(2950100001)(97756001)(80792005)(76176999)(54356999)(47776003)(575784001)(68736007)(97736004)(106356001)(8676002)(81156014)(86362001)(81166006)(46406003)(50466002)(50986999)(586003)(1076002)(110136002)(305945005)(23726003)(189998001)(101416001)(42186005)(105586002)(19580395003)(7736002)(19580405001)(7846002)(3846002)(92566002)(33716001)(9686002)(4326007)(6116002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1866;H:esperanza;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB1866;23:edQPihkYQgzcH2e3lSYKDWdyqru/s0/3UXAXlnv?= =?us-ascii?Q?Av0KttIUtj/w6zabx8EJBqRMvrmjQBYN+7GrNmXWtV1MRqUMoz5kVK4P4y5H?= =?us-ascii?Q?liyqT+S3jKL3eDbkLIkU8EL2uyoDOGukPIAARjsIaLaqm8xgQi44Ojpc53D5?= =?us-ascii?Q?lSdx+uwoN12WmsIQsurn0oDH5Mx10VnuHKDMQDgWdAgTDyBFefis30e2iUnt?= =?us-ascii?Q?ahd8VzipW0m8ZNlNztCLEe7f6BIoKQF6SgfCTUZjyAxJoI2fTynO9+eF08k4?= =?us-ascii?Q?8QP42oVwyPK3cQxHe1H8eqWwHFDSr4yTb1ZijowiQT5jZ5aMloUQ0NQdM1bW?= =?us-ascii?Q?u6FQHhOY4ajVlqBJDuvBjKSk1Jqz8dyD6wKai/E3ZerJ2x05VrjDxROLSiMH?= =?us-ascii?Q?MJFO6RedTVv9xSafpjS+dPqG7EmAf/1evHTB2MzScuaq/if2rGvp4bCWg8oi?= =?us-ascii?Q?j7hIj5WSCD4Ro3YZ+eoW4CLyN2albk5Jz98VJ0YeHXsXhviFUDm7Y8iAgRfo?= =?us-ascii?Q?Gk7OWBYU0Aj8zfnu5xEMGeRBmmHS+FuPfXKbRQ5bxWyQhGk7GX0iIeUR98Vw?= =?us-ascii?Q?x4wThaH8uSGjcGCcVuBDfSa8VeWwVMpLidhq8XdQ7gLm/wppMhsQZ2VYQ5CA?= =?us-ascii?Q?XojbF4/mAugZaNgRPS/H0QBb710KuSYwgU+O6F/rt+Rszgksb2NBBN+UDzvn?= =?us-ascii?Q?ngzErtfusiZ1rt6naAWRHf/2v1z7P8ulPCRAPOhz44bdBFmRA07oiDjtWZNN?= =?us-ascii?Q?TkyeMxcYDIXdWoHQvJbB59L3NC7EIvK6d3iPHiqSeiV5RvbdhwT0IdELMXw4?= =?us-ascii?Q?UtL12vyvT427A7BaR1VtSisTdmNiSpFnmMaFLxkXutcTW0oPxE0+OOSDGMBA?= =?us-ascii?Q?Twh3s/3h08FI3yF8SN8byCGwKy5x3GwB3qughv/bdp3tEtLmei+m7Wiz8m3G?= =?us-ascii?Q?D36udI2VlEWPWpxtNHLsur8Jm1kPCWTEYq0xpyzJgPaY8Jnr4g2z9Q4QOfWg?= =?us-ascii?Q?kaAzWVhO+lp9OyiWJTUtezBrnVkBFJr9y4xEM4R8cZH4EbxU7G6HLqn64m4u?= =?us-ascii?Q?MU7WqaO0p9IwpC2mZXTXvXlKyqyOyyRlIvUVXMxDxixPHWhsHKR4R1qNJI8B?= =?us-ascii?Q?t5d2SAvhDTdc1GVZ+NJpePqIvCU4erWLZ?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1866;6:C7b8VGPSY/SbjCWAIUXfOE+DkQijuOC3KqWXEamE2b9iquNPpTtdor5hTajAisWusuYRO/E5/D2hxR+44yKDgJdtJhhS27MPqahh4rN+d8nc08HsTqJDSaNn3zy5r/189z6Li0aUWu3KRZGZOTeFkjsFH/OtInppWBVoNYAodObFh1FKIUWRLLoXhJv06rgVuhi3yvRM17n4hFgXkqvVu67wT9lgcQaLYjH8nYz05GTWct+1q14cbPYx0RQfehzLHV/Eg3J2s7GCiYX+HzAM6C+zPaBnV2AcZ9FtwenWlFhUi+g3GnR7tB014K5fQhJY;5:pVF2LkHm7NpNYZ7sVx3O+rTcLQ4hmrtnWgRvDcyuwxV2+b3CJQxmc5xoD0h1W7dnQ+xWHxGHZ0+562/8A3NINXCmjR2rxhNbTxwDBWEUI5JfmtUcsS5VDd9SYxyqAHzT0HRe7s5acY4aUeUzgoIvyA==;24:iE19b75m/LbUurLi45R3ACDQJ6w2JXFZH/4BydYLLXzvJy5IotC8NIP1YTpcxdN0jHs/3U9mVndg6EXO+v9xOtNMO2BTRW7rCiDMujw+pU8=;7:W4Yga/QcPwubX7RT04kIOoQDFnkImoPMz52d3vOrr/MFP16Vbr84Cho5N7ni0FeaVB0bb8EZ/FbutY2Cgs5Iq9BHd091GdZD3bz9q7S2lRx5DEeaPXecdBeLFl13bcncUF6S7JKLlD1uFQlf8o0ppLopHzT3WVV0++9zPWTm/7hVCHyrAXVC8wEkeiGY++nNGXM8kNWPekfhI48c8OiJCBa4ojGZ2SAdJ7m4idau+R1IVYnBTX1j3S+f1+ZKYD8x SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1866;20:8pp7wEfaU/HtyJj6gB4aAvUSWdFXYMUkccJoePE9e4XLfjoLa4Fxrek3psBa4iqQwyGu9DDmd5DalJNOw7et/BdAztlInX/6K1rfrRq5nFIaUfplsF1p70r1K+3P/N1K/4QGN5HHJGJXjm0pspyQ0IrzkFlmzlF+M2gwLF1h838= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2016 12:34:51.4860 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1866 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Aug 03, 2016 at 01:35:06PM +0300, Vladimir Davydov wrote: > An offline memory cgroup might have anonymous memory or shmem left > charged to it and no swap. Since only swap entries pin the id of an > offline cgroup, such a cgroup will have no id and so an attempt to > swapout its anon/shmem will not store memory cgroup info in the swap > cgroup map. As a result, memcg->swap or memcg->memsw will never get > uncharged from it and any of its ascendants. > > Fix this by always charging swapout to the first ancestor cgroup that > hasn't released its id yet. > > [hannes@cmpxchg.org: add comment to mem_cgroup_swapout] > Fixes: 73f576c04b941 ("mm: memcontrol: fix cgroup creation failure after many small jobs") > Signed-off-by: Vladimir Davydov > Acked-by: Johannes Weiner > Acked-by: Michal Hocko > Cc: [3.19+] Andrew, could you please fold this in? diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 1c0aa59fd333..8c8e68becee9 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4044,7 +4044,7 @@ static struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg) * The root cgroup cannot be destroyed, so it's refcount must * always be >= 1. */ - if (memcg == root_mem_cgroup) { + if (WARN_ON_ONCE(memcg == root_mem_cgroup)) { VM_BUG_ON(1); break; }