From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932205AbcHIPud (ORCPT ); Tue, 9 Aug 2016 11:50:33 -0400 Received: from mail-db5eur01on0139.outbound.protection.outlook.com ([104.47.2.139]:20718 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932163AbcHIPub (ORCPT ); Tue, 9 Aug 2016 11:50:31 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=VDavydov@virtuozzo.com; Date: Tue, 9 Aug 2016 18:17:43 +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] mm/slub: Run free_partial() outside of the kmem_cache_node->list_lock Message-ID: <20160809151743.GF1983@esperanza> References: <1470753992-8114-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: <1470753992-8114-1-git-send-email-chris@chris-wilson.co.uk> X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AMSPR02CA0039.eurprd02.prod.outlook.com (10.242.225.167) To DB6PR0801MB1863.eurprd08.prod.outlook.com (10.168.85.9) X-MS-Office365-Filtering-Correlation-Id: 4ff14e98-bbd9-4bd8-6649-08d3c06852b1 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1863;2:GadtE2upyXp9XuTsh6Xs5Wz1uhiQA/DWadbtmRuPOYJ+T+OB3GjlWseARAngDqqrkWeFsZ6GApzbtzy2ge1DyCde1GpPxxhkjG1Ww10UuQiOUJe4ZfGSbtftrH/ZzPmWgqjcVGDmS97kGQOKK/BvlUxeZUiOyPsXAlEJnzq9atn7ZN0W5iPbXpKkHHCNxXT8;3:UMJYYCcMmRuyr0rHVyub26EwQgPH6rddLiHG+LS+5nT4RlHe5+FjcKLoX+8b0OIMETgg2DM8iUnpQuiIZOReNZp/Ifp/QO/C4JnBF/GY1DAf/BqnZhPfeJ/PWKQJoKYH X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1863; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1863;25:bJ50DEDeIvZBhtA876wA3c700WCdA74Zotc4b1KUImowolhvqqhDlja1QNdIGuJM2VKvfCIp2BiwJ9vE/U1OVx9RkBlesKOzixE4bt6jy7+LReS/UA9PYrMnn5if6viGS/oMcjeG6RR66fiTUmd2wn7CA6n13khTDLTiwAKbEzo64P+AdIxC1iHyEn95fQKiHd8BSRJ1AX4x1xyrA2Cl2ZNHKuMYblmCcP/LajR2jVq2subND1/9sNP9DkWcK5f+ZSpC9T2O3Lld6m5xH5uMAY484zRVNQ/c/jqrQJc10T+8q+Eto25PYpt2YBwv153PMkAseiT/bask7qvI1FINt5mfyd/WJGNyyjWqosltmEeo3XXVPlmaizsEJLepfpGxm+daVmh+ZIG+QcXqZLIHUXvQqfYyDZvy8APFQSWG6wHoct7W/d155k+EkR15XyPvMO0idnd4wVkFuSEv2hfORyY9K+seArR/u45VpQKTDQ1rv7e2cdh3XBDNMHQ0d8TzO5MK/Vwe34IIYh8gNFEL9W2dEQBmtFf5Ukrpa6sFQNLEO2nCwm6WlNA9d0Qjb+KyXlyE6Fq5CvQP7TfhVIia4Y9Rt7SLNfMyUk6rnPZ3ryo2GmXTR+CLfyGHy61EfNvTpVGWb5QVW5SgIO08a1EuzD56KX45yO2WC4YM/DueVs2tWrGBUEMO+S+4AS7effRq;31:Aih9rfbExd4F0qVs3lpFUxE/rDZ6PTSBMKMUSIVQ60SV3BXucl7GpeUYo2A7P+F5Mj9U+YcPcrHixUPmRcMAaXI60u9j3ac1xYae68pjm/uyIVUzz1lhfj/MEeUiX5QQSSm4MoPyYbne37LO2iPmHfCSH7F2toc4vROp2TX+ifc5JQYbvGytHF/AIPFfNR3GdKf51hgWyEjrSCF4LDSJYgttYTOyb6qvp1+gOEMStyE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040161)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6043046)(6042046);SRVR:DB6PR0801MB1863;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1863; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1863;4:Vjdgh+rsNPl+Y1TSps5nnOepo/dPK+P8OCsZdtjvryw3OOEzKXodTrfu3kXB0wi89ziTWKt1TIFFo6d3wJv1AzGMahDqjC4dQE/TBtqnljk4u26U1yWaCziG4/y6D9qZvBxT9ZU6Bv1IsTacDQ99WnLg4yxqcFEbIL37wIlmdPKLxRjc6U6FyXRP3HKQPmIkxcQQ05nU9XivNT8j5BW1QLO6WyrvQhOU7eR0v5JBfJNJqeB03J9NdyLoO0nurTw2C5OQDc/gdShDiPhW2WpocPBvJdU09OURiVXaso+D7yfYg8TXzQWhDuuFWwivjk/Ym/aEWAmIs47n8jhY3zyylEY+uLCNuGtufQS9EQLgO/isv2F7JTwn7tBV2LuYogwqT8NMOslnRS4s4d32vTOr72jFT/2w9DpN8TW8aVS8VJM= X-Forefront-PRVS: 0029F17A3F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(24454002)(199003)(97736004)(50466002)(106356001)(42186005)(8676002)(92566002)(105586002)(33716001)(81156014)(81166006)(2950100001)(9686002)(80792005)(101416001)(110136002)(189998001)(68736007)(7416002)(97756001)(4326007)(2906002)(46406003)(50986999)(76176999)(54356999)(33656002)(7736002)(7846002)(66066001)(305945005)(47776003)(77096005)(6116002)(3846002)(23726003)(1076002)(86362001)(586003)(575784001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1863;H:esperanza;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0801MB1863;23:mS2k+kXDIfVcltqTfrOi6yXtDzVzG0xOpvZ0+nF?= =?us-ascii?Q?DJSeQp2nY3ggjLGfoDOC+ewXRVQ2jW3wqT0VStwdi1nol5nERbdJUxbbBqN4?= =?us-ascii?Q?/kPRWBYSVPCd2Be7pd0xBSw1mMUXMkura5x98qdf2aCFrwxtl+KgI/3c+k3s?= =?us-ascii?Q?j4tny4iKekU5u18zvC5EJGyG/pznF0I8JLNkBiboelha7su4qeRQ8RrHKLI9?= =?us-ascii?Q?jf71PsvcZfcfgLLt6BeWZB/1zKkHuJ+ab3gqeGfPhRksF2LpiUPb4byMDjc1?= =?us-ascii?Q?9UE57kSTksmfnOK7vhZttMadwIRhFGSgC72mrCwz94A/yMAdQWdR12MHkhdf?= =?us-ascii?Q?iaMMaROrripoLlrGUDafsn2SPbJuBfp+by23RtQp73/PWSx3JgQO7UpNrQBQ?= =?us-ascii?Q?pDVgWuECP60bNDivTd66kWWhDI2n4jpP4abrRCq6zI+neo5Qi6sdjIO5dQJu?= =?us-ascii?Q?i5wmjj2BKtOk4H83DSzi9tlTNolDQZdSbrXURdWyH84B5XDHxiew6ecsa5DP?= =?us-ascii?Q?DDbapLc2pLxP/awvwBS/RmKmh1XXe+6wTrlSpL6Uz8pDuyMrQi7OMArJj1+s?= =?us-ascii?Q?BbVztIULybiLZmCc++EdI/H8vDSkoywY8yKLACaut27XKfw9gJLsARUVGqDM?= =?us-ascii?Q?4OrpY1FiE75JoLZew6ddgqclMtYsjmEbuxk6ZdOUdoNrNTb+SUA1VdUc2A0v?= =?us-ascii?Q?i7CNcwGO6ZiZcIB/6ZZr0ijavKG5yK/rw6ZTFF08cfFTy9Ys1t25P5DfHlDo?= =?us-ascii?Q?vt1sGCGwF7t+PZVcH6eCuGeJA65e3Qsap8YyQsqLI8ca4nOAUhRkYIQPshkl?= =?us-ascii?Q?toG9HaeT7zhsZhWwiNisp+o18trCQZpQ7BzJnnrymb9hFH3vGyxuqu0NRKnK?= =?us-ascii?Q?PUF0OXNoT8JBLomrhB4Xq5TpmRqgD6bRolfx6T/tP2dsMLz3jERE3lZ5Jr+b?= =?us-ascii?Q?uukeEJE9jKhBwuCXhb84SCWKmmg8mo0GyLbSCDZpJw/4xeAv6nWe7DTAQtZi?= =?us-ascii?Q?OqBdsQ3HOLI2YaumHDEgxrYQi5kvDd72J5UCKQj3zLSbm2EF0aLG5c9Gp3cA?= =?us-ascii?Q?x2NcFz5VvhyjHx3QDg9owLBQcS6Nu7jnSgZ99XOqWvTx1zqcArP8JMN9Zama?= =?us-ascii?Q?0aMultY0Aodc=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1863;6:D/qtpvUYpr3nW+wVEfbqpk2Qc4kzjVn1J16yWrOgETjPBz6z6ARo5bRH1lOj4uo//MZS+7byzleIw2ZYvQFLBONDpAvwF1bCTgWylvg7v9g+vBnmhXw7ek1fT312WuvmOThbdNr9OXdsN4kRil5i/gRYIzQsX1QD/Wb6M43MXmVd2y9w+bxGZuPpDqC/PBSv2uMFHW+EI0F0Cwbv19fJckX61lrhelfQzCZtA/z1YbbvRxDB3XVjNtz5Z1elMQNClrJhbFKlxhpEHMYU7lv1kkZzQSNmDVpGT+qz0w4hMyqd4IwLBpcKnPZqbxaxA1AL;5:C4RTyaf4RJZfCiRsb1fkc0e7zokWEMULtCAkGVR4shUuVEtdVQp0PuoyTnWc3bNWCpX/e6KsQas2MNFpvBaCTNiAVIJ1L78MNuRrB/4MpgEVdszWLP22gsjLxn/qFksEP7mkFL+YS8Fk4TLEyKg7Kg==;24:jOZDCkL94ru3XoxuDU+48enuR82u2EaGWSJMTitlqPoFU32FBjtGqJbJwQR+Mj77L3KhJgfw16oNN1T8URYgSd/thsGW0y8iuhaKK76hVaI=;7:4FskrVl+l8Qxg1+o/67PbdYtVrPg1MwnJi3PpJskdPvYGc1W4Y9pmy1lj0ZhPAu8OGuANtpP6Mnd2MVboPR9tOpXvYebVJCMDs5LzgQTS4QttHmSfqggcx6rd26eue4t3f61IkD7dyatBr1tr2hJsn2mN5zrOpEWzE21yi/NHTG6+qKlakzr0lRuDO7boG8F2Lf6lxChsJGawTItUfk8tXlAfSoS+/11tTicR78BviigSPvaZRPxmPV0jRtTnwVs SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1863;20:yklMjv0Q9600a4fk58M3WVCDKRabDOTzK8aICivxqqcWBPAl2g+olPGnaicb8mmHPr+4EGSCexgjAZxB7F5UeOfBKb5yMMp9jzJInexFmatxa3k/8XTSzqXi4wrn5//Df6pH0cPKfcAXvxylL7ob9lfwKUD0C7qVgv7wRpgtzfw= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2016 15:17:47.4642 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1863 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 09, 2016 at 03:46:32PM +0100, Chris Wilson wrote: ... > diff --git a/mm/slub.c b/mm/slub.c > index 850737bdfbd8..22b2c1f3db0e 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -3629,11 +3629,15 @@ 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); > struct page *page, *h; > > BUG_ON(irqs_disabled()); > spin_lock_irq(&n->list_lock); > - list_for_each_entry_safe(page, h, &n->partial, lru) { > + list_splice_init(&n->partial, &partial_list); > + spin_unlock_irq(&n->list_lock); > + > + list_for_each_entry_safe(page, h, &partial_list, lru) { > if (!page->inuse) { > remove_partial(n, page); remove_partial() must be called with n->list_lock held - it even has lockdep_assert_held(). What you actually need to do is to move discard_slab() out of the critical section, like __kmem_cache_shrink() does. > discard_slab(s, page); > @@ -3642,7 +3646,6 @@ static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n) > "Objects remaining in %s on __kmem_cache_shutdown()"); > } > } > - spin_unlock_irq(&n->list_lock); > } > > /*