From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932863AbcHJDUT (ORCPT ); Tue, 9 Aug 2016 23:20:19 -0400 Received: from mail-db5eur01on0119.outbound.protection.outlook.com ([104.47.2.119]:31166 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932669AbcHJDUR (ORCPT ); Tue, 9 Aug 2016 23:20:17 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=VDavydov@virtuozzo.com; Date: Tue, 9 Aug 2016 18:45:39 +0300 From: Vladimir Davydov To: Chris Wilson CC: , Christoph Lameter , "Pekka Enberg" , David Rientjes , "Joonsoo Kim" , Andrew Morton , Dmitry Safonov , Daniel Vetter , Dave Gordon , Subject: Re: [PATCH v2] mm/slub: Run free_partial() outside of the kmem_cache_node->list_lock Message-ID: <20160809154539.GG1983@esperanza> References: <20160809151743.GF1983@esperanza> <1470756466-12493-1-git-send-email-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1470756466-12493-1-git-send-email-chris@chris-wilson.co.uk> X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM2PR09CA0030.eurprd09.prod.outlook.com (10.161.22.168) To HE1PR0801MB1865.eurprd08.prod.outlook.com (10.168.94.8) X-MS-Office365-Filtering-Correlation-Id: c441034d-38c4-4be8-f8e9-08d3c06c39af X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1865;2:MeOwxvNJ5HrV/wpjQ3Y/gGVUJ84n+9SbeDqlg7Ho1s+3bDVJvEfxBqIm4reeOBheque/jL1XAv7I2V2LXZpSB6KvN1u3lP/Gyz0wyszeYzNHUkRBl5RwX851n/hUPqbRlkiqrqG0Vjgn3kgchTGi/dCf/VTOSn4FYe8nDY6toEvAdOMnTtabM/ZZdJgtBH4/;3:dHRsxGt2q+1XBv/XVgT7iz9tBHZyPmmx4LAriIlPr6R9xd1TV8EcfjqNqAXT7lFxX8Cw4jI9oo8N+Gtksq/CKrs0Qt+qv4XxrDBsnWWlHzbgoS8nl8krI4YIXNoys2pu;25:EmQv0dgG1B0PdSY6w4zm0nK7KevYUBS9FlT3vYmOOFakGFaQj0FtRoUzqoBhtPEakhevIQAPkmkSdsRpeYa9o8be7Ge21ZIc8vaTU7nL69HZuz+KXiUspJRZWN31BlNi+wHjLLJeGqBNNf3HWXP9yT2MdiTbsTJt0Wr4+DxOhKt4fyeHvj/R+HxVmq/JV0c4nfgWkjJBtP+tnlSqzMZgiEe2QXn6BhRY7NNubeZu/Gu3QG4Bvg5WPQLXsU1Wjc6Tc4xj30JdRGIxENGzKSgUpJoa35kNnxMEL/8P1558/sZLLC+YGJAMXTlZrVfXaZlG0xStM8D11E/VEJYPbpwFr4Zuogadi1gCn/2wKGEw9WwGT6xu0VMdJK+3S5xWEoffw+9PpoGzX33kFgzdSs2IqQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1865; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1865;31:kS4HJQej3aV0dmeQ3t2ubQ+BDxAWcDuC8zCplw9vclK1qUZzHkSpxqwphh7upK1XnGnvkgwPiHpz1NnmiqGdWl3HkqMjgW9RMze2z9LwDQmht2pUq6ctyLdo8G17gG3/4PCldJQQCEi07UYrpPSc8k2BwWXnk5ObS1mN4beyynU47fGYpNDM2+4iUbLlUr060GSqP0qOa+9YliUqJubBJWqjtFeK/+ZWIuqAw34/BRg=;4:gqbm9CsPg6fFh5dbRgH/CDyjRKH3UP94orjVPbMenIwW9htPaylH4qIj+Fjjgqfoy2j8CXIAPJtidTe/F1x53p67JVd/zlIB6hLrooCUt5vTee4PEDR6GRoTA5evd1rTtTQI4HREpBy9xWnUMTNJe4eSXQoGjf5AwrdUxm08xW76FTQtacfi178pzduDZ5ZLoE7b6ZhyERZRjQheqpumUgcDwaOYXPI36Vy2JqQhRC2By0hrT7v9ZoXhXRpVSO2JlRFIDURWGhVnpXDG6x9UUz77ZGdELftA6/HOHCK+YVHmyMDfgG8Mw6TRLiDeFiuOY+t38fY5rR6qBujB0E8p4ubcj7h3aFvul7qxI4Gu7DBnsmJwWmwZWZ9FqTf7cIc4kgHESyeHj4GMxiIq2srtnfcpc6VlOwt+4nh0z/N6qj0= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041072)(6043046);SRVR:HE1PR0801MB1865;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1865; X-Forefront-PRVS: 0029F17A3F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(24454002)(66066001)(7736002)(7846002)(305945005)(47776003)(105586002)(2950100001)(92566002)(50466002)(106356001)(2906002)(4326007)(86362001)(68736007)(575784001)(3846002)(33716001)(54356999)(76176999)(33656002)(42186005)(50986999)(8676002)(1076002)(6116002)(586003)(23726003)(77096005)(101416001)(189998001)(80792005)(110136002)(81156014)(46406003)(97736004)(97756001)(9686002)(7416002)(81166006);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1865;H:esperanza;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB1865;23:Dq3Ln9UmFCGkfekgMiI+aC8nwdWOnQe9i+Nybn+?= =?us-ascii?Q?kn76YdlFwrQhLVIUmJ+Z97nCxmD0Js10pVQjuLi+p3uj7snNtjbpTafRjDDp?= =?us-ascii?Q?wTh5MaswmYGQRwUGEYbx1Tlx/M5MM30PXCjrs7Uuo6uJFbS0TLZQ8sAD4sH6?= =?us-ascii?Q?RLgLH8eRb1qQjLd4gJwMuCEC7wdg8jatLtm3KkiwYqvr8MPlIdSD+TKh5iFv?= =?us-ascii?Q?8g7E+IRN+uZYblHL8zJAb1gH5YyKd+cHvtIr6ePx81XN2GO9JdDgTA6t9MJg?= =?us-ascii?Q?3dsPOPjLcR/yaCZtsys/K5xQ3rfgbB2G+z3m53EpPHyAg9ZD1pCpY2k5pHh6?= =?us-ascii?Q?RUBBNEsgmQjChZSB3Drv3ydVLHk+1hXupQ+uIP8sjhEqX8V5HHbc7EHCNYxL?= =?us-ascii?Q?Pqx8wFliHIeVOTYp/0LXBOschA13JfA5SU06SEycK5PoWSRik+yzK9pHLkax?= =?us-ascii?Q?3CJzgemyH3ogyTjAV39bhXOKukPnjS6ABgQUBR68IPFGkl8dv7tYyhYYbGgP?= =?us-ascii?Q?zNlf+F/tuo1HTGsQN+xToyLnigOSuQMa247zFAVI9a4jPl0ZjFpphmxyPfMu?= =?us-ascii?Q?uqzdNmkfwCMhz8TrYaPpvRKpB7DQL2jrPa83PqMnWAA8IiCQe8W6chEPwPRN?= =?us-ascii?Q?FmlgumFpXQilTw00jk0gnNpZD4uzrQT34e65z1Y8zlraDwz0AKMO1agSBbzK?= =?us-ascii?Q?GIKFe2i/+OKLlC8exBQCqWRTZaBYnUT4Pypm9rNE5O2zXocm4ESpGyodXVq0?= =?us-ascii?Q?mSoBfQx+8g0prSgihsCeWYryGTl0F+cdGQV9pe+szA1sdfZ0WDT7Gqe9OL2y?= =?us-ascii?Q?FN9dGlmtmQCwmUX/MJ/ZB+POpJuCpMsWg2mHR0FZnKBbF6JmG+l4Tt2cy59v?= =?us-ascii?Q?fBP25h0ZE5pBXQR49LU6fr76lC3TtYu0VhitSxJUAEFpUsf7C4w5fhqSLrnq?= =?us-ascii?Q?pPdS2Mj4+lKB0Peqtb4ST99O9rf5JGyacrKQ5GhHIuORjOCcWXQwqtENwJ8v?= =?us-ascii?Q?2Llm8LzdLaztvM4o/KhO/Cu3bvO05qeOaHoDAL+pdPZY6GxIJh7Og65+72z/?= =?us-ascii?Q?GHtkm1REBAHaI9z3xHV6JNoLLuIDO/4KaoG28uiNRJsp6NHe3Ej0RfWC9mXL?= =?us-ascii?Q?vr2JpU8pRG3w=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1865;6:xrw/KmtTn2VHS50/SYhkUepRK/HvQPbZanw8+f/LJm+NjPf28K4/7CuxyzXF/LJjbwTu8PrUoPW9ikIacOsDb1oWtc2K4aHFzmW08S3Iqv3pIS9lfS8nTrPhnKSVF31OYrVLH95LPkg7hTLA6TfA7tp7DP9TGMnstKbFjkXnRa2PoVw4UVIkiyWsYYeY6Q/74WsAdvCpgm7gZxf61hesNwWYhLVcxml2tnnF+6YYKl+6h8smXdy/Oov4pS5yEhhQc5yCQFsdQX4K0/f5qMNc600JMiP07Nw5CJplYXqHDX11vJ0Q/XZiHw6cUqOC+/7O;5:bbn+iz07yUaCvyslUA8fI4oh0L8preQRy7G0bT27MU93bCYFvDGFogej+FT9tCrU+Z99P8Z4oExbzLe5NhWcfcV0rUUb3ekoBiCl5Cr0JjDsEO6nIapZHGAmpJX9bv18Jfp71IVz5MvuHnOh5FnKVQ==;24:ee5Sbx/mGnvPaYBO9bhi570BRzsT8Na15nz/DixziV0h2G5a3T3Eg7M3LvMz0w3RFzb0dfYujapXR4Zy+f1DllmeE3A/ldxnjN5V/v6or0k=;7:8yHjhkweiQOJpQq9ne2IxaQGSBWDPg9vLvDL/aBrQ7n4ETdg5DuxEoOMTtHytbf8R1udLgLdmegS3Cy7V3Zt95PUatcUrB1pd5NF9OxYza0zUn2XvDVOxdQgD3osEJfDO8LoI7WArJnHkebbYvZZN+q7C02UfSzLcjd9UIJrnx+3GRv+5Eu73GvD0anpqWDMAeMIA8bMAU79Oo73JYj5wIN4xbeHM7EexLuWMNx8I+KmPsUjn6ycPLfaNkSoNEOl SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1865;20:xvWKOAy5ewBKKV0v/PqYqE8VSqBDQDg+ipAgbnVPc8REKHgrNAkUsf5lgPIaw9pIr1twDrosU/rnlRKz6vBbZummPkoIAJvbDg3x0qFAyR2AcXRLM6khXyd9f6C+Bw/yoSwunYqyQB5zs1KUiUlQCr7CnIjaiPzZ35keBLZli6M= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2016 15:45:43.5797 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1865 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 09, 2016 at 04:27:46PM +0100, Chris Wilson wrote: ... > diff --git a/mm/slub.c b/mm/slub.c > index 825ff45..58f0eb6 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -3479,6 +3479,7 @@ static void list_slab_objects(struct kmem_cache *s, struct page *page, > */ > static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n) > { > + LIST_HEAD(partial_list); nit: slabs added to this list are not partially used - they are free, so let's call it 'free_slabs' or 'discard_list' or just 'discard', please > struct page *page, *h; > > BUG_ON(irqs_disabled()); > @@ -3486,13 +3487,16 @@ static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n) > list_for_each_entry_safe(page, h, &n->partial, lru) { > if (!page->inuse) { > remove_partial(n, page); > - discard_slab(s, page); > + list_add(&page->lru, &partial_list); If there are objects left in the cache on destruction, the cache won't be destroyed. Instead it will be left on the slab_list and can get reused later. So we should use list_move() here to always leave n->partial in a consistent state, even in case of a leak. > } else { > list_slab_objects(s, page, > "Objects remaining in %s on __kmem_cache_shutdown()"); > } > } > spin_unlock_irq(&n->list_lock); > + > + list_for_each_entry_safe(page, h, &partial_list, lru) > + discard_slab(s, page); > } > > /*