From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752398AbdDCLzw (ORCPT ); Mon, 3 Apr 2017 07:55:52 -0400 Received: from mail-eopbgr20103.outbound.protection.outlook.com ([40.107.2.103]:51456 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751646AbdDCLzu (ORCPT ); Mon, 3 Apr 2017 07:55:50 -0400 Authentication-Results: linux-foundation.org; dkim=none (message not signed) header.d=none;linux-foundation.org; dmarc=none action=none header.from=virtuozzo.com; Subject: Re: [PATCH] mm/zswap: fix potential deadlock in zswap_frontswap_store() To: Michal Hocko , Shakeel Butt References: <20170331153009.11397-1-aryabinin@virtuozzo.com> <20170403084729.GG24661@dhcp22.suse.cz> CC: Seth Jennings , Dan Streetman , Linux MM , LKML , Andrew Morton From: Andrey Ryabinin Message-ID: Date: Mon, 3 Apr 2017 14:57:11 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <20170403084729.GG24661@dhcp22.suse.cz> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: AM5PR0601CA0034.eurprd06.prod.outlook.com (10.173.86.148) To AM5PR0801MB2052.eurprd08.prod.outlook.com (10.168.158.142) X-MS-Office365-Filtering-Correlation-Id: 05990d6b-39c9-4f70-3ffd-08d47a885dc5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:AM5PR0801MB2052; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;3:VGOvIu554uNC5FD+/cccD3+s6LYG2IUQhgFqI5cUm7h0JndPQ0Q3UHldJo1XlNpA60L2kAfjMXFI0lZ4iT2+2wvj8DfkHLH86DRVTOS/oUSLUClSI1WSm/fMNgddRFbDrJnTXcL34is1quf/cT8+m3arLfRurw0gJkRgF/wE77KvWJMqk8jgWU6JVd3Bjd6+GBD/nuM9eFCdKe8ZulTsCj+NYfSAWQTX7LH5OSgTMC1q0w52VfEFy3TMkqlz3pWM10zxJc4zxg1WoLog0Qo58hW7DQNNctBPJ0qzbg6Z839vSAkQQb2IVDeGAH1oPsHbxAB7Gj9XRiySoP+W1Ef1sA==;25:ZRGeAwpQhZZOfNXVikkBubcnd+1frmYFQum6iDqPWhCUSLK8BDpzPKWJVAdC4qF9845ofaAqOb0FYMV93ok2Cx2m9bq2VJdpni+p5jzE8sqmKTPWk3oXdrHvc0kxltxPcYfp7bu3FoapFTyoD9xeStN1dPeOaM//2caMhrY3r0AgDp8CB6a/lk7m9KfpXp//uOiJcvLqkziATw9FezChk9/IHNIrmCgcD+qxgaOTdy5f4OPWlM1Niqhq94SudlCAEHDeDWM81wh8HUuaermXmqruPEXCrLz3oEE6cep/LZtK7hZr3klIisQu65E+i+W68Bp1C/yqhq1bzzv2R80yoQQIm0eDSJwPMIyR1uKLIw9AqZ+i59uEUEDQIIgCjzdKcrQcce/3xcKw01jf+O9Xvu+djRX08uMYJWPqjpL0NgeKrhJGtEtzR2xUJsYoj1Y1IKbxu41zmOqnfEREwk7VXg== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;31:MB+iHYJj4fn6iREvwHbd8CBYLdme1lX+fwP6xNSPalQa7WROpFHWljq7ykz4TQL9sVoFQVstx4Cz9W09I7/RCibS8p2sXsVcz3syHz39pS2ialca+EaTKV8nmfRDNkstKb2dAfuW0qQU0oyJxa28GwSiGKnixddoNdq9jLmFljpissViUANRh63HM3hXqKU5asYzOPePUF5+jfxPlA3kVYsKxsMFTeXiqUD8Wfe0fL62xHjJUR1iJktBaihZ1R5PqzdfsKTk7449YZX/7FoFQWA4buMEdX/XOo+2hnuweiU=;20:LFkoRPHMBA0dniIp1LBb3AJhjlV+Onp7Ucg8WFi/Av2zV6vujCi8oYPvmZT+Il+5cKNj+PAQbNE+15Patlf6kcdGYmtytiL76jYEl4WNQmvVsKIqgIhK/nje/IbmNrHgq5yYlwaaLr96RfRW29WAcE88vCDD7XgnLbAxVBncAyGaL0Y7VWN50vZwtBL8/rhU5azzPF9Nxt7N/kOrHxJPcSwWdZvuIJXQJy4jgLDY570cL2G0E7puRiPBFTemRqqSp0gPVegpjDU8+ZdttCKt7iPtTjiRtLJsQgeBN51AaasiPtI+54W+cScsbESrDd4LmOcJR4YOuUZwaMFsfS/byDcaecOjzs2hc9Hk2/ucw5PYq1svv3rEKYWWLXlmooRcKIDJ2e7lCX47xhBXMzZ61dDx2HPkKByAHCScnWJVf1E= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123562025)(20161123560025)(20161123555025)(20161123564025)(6072148);SRVR:AM5PR0801MB2052;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB2052; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;4:kPfGbBV/AWCcEyWI7ZF+tvSzM4wwGtr0+J0mAUQNJ2xt0extF3xd8gjmEevp1B2VPQLjuW7Ew6wlPKR2BReUWOJmb0XJ5VZ/19DlXMfbNMZerjQleX1dCsD05EfTNVTqIHGZqrPPsq3h+g25ywYN9bgHYU205gKTgkvVE0U2ydbDOssdHOsfmENgIyd/4k6oeJjO+ZnFiQ53zf+rqGHMwOTsCJpUsIu0LEfWNgASzOvJWfY1X1e3AN+0ax+zW9EDaqIiURSGXAy+fNPDWqFsq/pxVTFkF5eq1gpCgquPySG1T3JUr1ghyaARoakHg+bBMFsabynUb52MM8z2o/8VoFSRyiBBXuQcnmfMGCy9YOuw0B919q+c46T0DGMv5WHFE+GyyA1gR52YlpocTMSgnRrv8aM2l73ytMDWuI/D9FdOmkt4ONDa5E7rOiZ5CDjGKJn7TguBxXJtMFmDvgFwdtDkigxcaDVONtt+c159vbiJcT1RpiA6qr5JIOrLGKKG8qIhrGnXiEypq7GFO3Ts54A7szWFUuyvPGR6WBzJAn+sivRsA/jAsp83Nfux3PZcittQuj1LuhTJtrXtv8fAUA/2qRCYz7ZkIGp2P6lKkxaPAmvVbhSfc8mJ0IRZQtrSyS+0pusx3HyZlUXQrqlgkCwStg+Eb0gU8797vx7+pxLY2BBOZX7iKfXDVGzWSouIHfAPz3wwWLjaXYd4P9ss5w== X-Forefront-PRVS: 0266491E90 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(39830400002)(39450400003)(39400400002)(39410400002)(377424004)(377454003)(24454002)(33646002)(25786009)(83506001)(47776003)(31696002)(305945005)(90366009)(6486002)(7736002)(66066001)(6246003)(86362001)(5660300001)(38730400002)(53546009)(65826007)(81166006)(4326008)(2906002)(77096006)(8676002)(3846002)(6116002)(2950100002)(229853002)(6666003)(189998001)(42186005)(31686004)(230700001)(4001350100001)(23746002)(54906002)(50466002)(76176999)(54356999)(50986999)(53936002)(36756003);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB2052;H:[172.16.25.12];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM5PR0801MB2052;23:ngC735lRFBk1gScpbNc8psezW1xxgpgxt45?= =?Windows-1252?Q?5xwawxIAxsUWhoEDXxFXMVPSo+3vVrnkvuD83hNzPixBkxOp1jj6JVvE?= =?Windows-1252?Q?6tS4b7nUqJpWd6mDiXp/L9nGhwuPSc6HW5KpkUukO3mJo9pqVR/SVivu?= =?Windows-1252?Q?j6cTNCXHUij5HkNB4ER5S19Wm+mczWCY3eoRK4af6dDEg0GWfVz8kXWU?= =?Windows-1252?Q?U6Li+XztDzXjeOWF7Tl6GDpxr144wAVak5qfk7L1om3GexTINDJJYDkb?= =?Windows-1252?Q?RbM5MMX5tPRPUjq4n8JZHT6nm/KFHjqgdLNr60a1UyoTSvHAgarI+fUq?= =?Windows-1252?Q?dFFo6/96ixLHMUIHBZc0atFyw+yHpUhok5EY75w3ug0z0iLi3FUoYAuj?= =?Windows-1252?Q?y84DIK6SfKSsJHSwaSprNH7G2RHMkcYlxnhj8rqynNFOv2R2rdDuQxNu?= =?Windows-1252?Q?tykM8gi3mVKtJY4erkHJguF/Mfw9vhddyxEG0RUuJ0gdD+3PRwJCxRIl?= =?Windows-1252?Q?5oWuvHEj8bSujfcmcKVgCEps2WDO9+sCTHKlGyNZQZDtnUnSAjRrPcdA?= =?Windows-1252?Q?9MY/2am6PS4e0sCPzdH9ipnvw0VpnHqRM1B5FUWLssQQ9FNIGPxiGA5h?= =?Windows-1252?Q?69cfXs5qJU3PnMIJysTHB5ruu3/YCmLcv4U5DlR6bB+GkV6FoIVmIInw?= =?Windows-1252?Q?X+Tr0kXpx46/2WSiW3G/9C8SdwvwMY4K9q0YH4PKagi5PTWqGx6qE7Dq?= =?Windows-1252?Q?7d0/VPlRfYxAJfdsbH65HzrJJ4vxfeCboFlUwXoUzjUDX7aoPF6QCIJm?= =?Windows-1252?Q?N5DZHptKhQ4wyVoXNEnNvwixiYFRRw7OonF4JVYTD/URYGUY8e9fC3tN?= =?Windows-1252?Q?dEWsjrNX33qC7OpBSDXZj1Rasnvw5klTwZ/nVhhHUMMbDpZrAV9IaG3m?= =?Windows-1252?Q?XT9rO29J7P8U3vrE8pqqOK1zS01eRPP3VRmNmx3pxKa0CZaA5HtBujaA?= =?Windows-1252?Q?DZeLISSqL+GtbL6DSN9wdw0FxsibU69aYaA6B8AO1qW/U0puYtmn/U5O?= =?Windows-1252?Q?4LH02bme98nVefx2YrbswZGvVhvl7I68cJ9kan+InAOfZmCkkftotuUD?= =?Windows-1252?Q?qMkjYfMoLuuit7mLidAENgMv9od6rCa02msjPCoPHoytwohjGjwI5aaW?= =?Windows-1252?Q?7CWusYdMI34gQaGfFZ5HIh5BB19jzMLPszTMH6K7d7SBULVEMjO3KWiR?= =?Windows-1252?Q?APg9PB5M1hOz7o1VmvW4P+mx8e/0A8/f8bzoLQcxu4B/stNrmqK8E/uW?= =?Windows-1252?Q?2AzVt9nqYVJJIEOtKLox/uzN7gA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;6:sTkat6u9wvo12VDXU4CPNvh6IXulMcyscc+RKIa2KarE+2dIUwuYgas2hvwUyNtd0Ksp7zDsVekDABo+BdlRtIuh10Ad/7pquMmChtUw1pBRFpsahEEVhWMPbyzlnwAGaEBrYXqfQiEgEQEvdyrW0WAZjmy6cY6xydYaNNXC/nbx9J/tbq071393KA5RARlG3nAyFN2Qn34S80W3yIHWgB4aQNiGvYOph+1n+0gNn7+Gmw5wg3/VY3OYgG8bVGTU/DH0dFp10S6pVOld3wyJIb3gvOujj3meH7dcpVcpvAFP7wiMJ3BxN8XOFCU+P1ryUrqmJSdjf7jCGXH2a7E28X34jPAryAlAVO4gXwWAgFQ+M24dUcw3oy98dluVo+yWYH7CCPXQDzvIKl4ARnlLTg==;5:Go+sLQCn0cj9niLg2+F9nMotyzvi4f6skGxera8yt31RfW4fA1rLQLCZJMvHh1K6tL5UUpcxyR9ZhvIZa+TP8aBNEigUz8NF/g9xbfA9Dl70p6ayw856yHfNlwyYXymjzukzcTQLE5rrhuxugXXbcg==;24:BfnY4U6CJtByEb3RAkTk6ybr4l6hzny2O487qe8qNpbNx3DF+IBaxoT5DD3B6Vj8pG493BUeS3sE1EbrNT/Bly5gswQv4q73o1zct58jfGY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;7:PmXywy6SBV9yoUFFZbssBK22IcTjclIAgRxBKbFh3qQCDZ+Asy4SbNhmEgAp3ExZSVZXEUMkgUe8gP3ofUcdCwJvILk8LD7LdZPXypNND8ObSvtDJgZZln4xnzI0qnGsCMfJlWW9S0dZQmWmg/4sLYMskPIuP8Q4U071vbJsiwINtQWDut3zGN+0fwDw2hPPNFhb+a7N0L42phcIAmHlJvENNINa96Qnf9b4GSQk6VJOmhRYvV5y5UjD+4wvZ44m6BQeiVsIeYRIP1pxiDWq8y3jdxNCEfsRLp4xN+XqP9EiXrN9QpSQOD2Bh5zMYlc47UVgVL+UrcNsstQjerUm7A==;20:boD8jeGa5xnTtXtUsJDC+X4vB1HMs86SvmnKUDTYK1HuPvL39gykPU+PjcjMhXXmH/HcvJSdD4rXIYBK1ktRWYzAiWB+kYndvRpaHwdHj99so+rfkKjZuTntCZVWvOkYFxwXC13tMhiC9tqNMbN0XxNP87R9LyZIYHtwUAIp79A= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2017 11:55:46.9198 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB2052 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/03/2017 11:47 AM, Michal Hocko wrote: > On Fri 31-03-17 10:00:30, Shakeel Butt wrote: >> On Fri, Mar 31, 2017 at 8:30 AM, Andrey Ryabinin >> wrote: >>> zswap_frontswap_store() is called during memory reclaim from >>> __frontswap_store() from swap_writepage() from shrink_page_list(). >>> This may happen in NOFS context, thus zswap shouldn't use __GFP_FS, >>> otherwise we may renter into fs code and deadlock. >>> zswap_frontswap_store() also shouldn't use __GFP_IO to avoid recursion >>> into itself. >>> >> >> Is it possible to enter fs code (or IO) from zswap_frontswap_store() >> other than recursive memory reclaim? However recursive memory reclaim >> is protected through PF_MEMALLOC task flag. The change seems fine but >> IMHO reasoning needs an update. Adding Michal for expert opinion. > > Yes this is true. Indeed, I missed that detail. > I haven't checked all the callers of > zswap_frontswap_store but is it fixing any real problem or just trying > to be overly cautious. > zswap_frontswap_store() is called only from swap_writepage(). Given that swap_writepage() is called only during reclaim or swapoff shouldn't be a real problem. > Btw... > >>> zswap_frontswap_store() call zpool_malloc() with __GFP_NORETRY | >>> __GFP_NOWARN | __GFP_KSWAPD_RECLAIM, so let's use the same flags for >>> zswap_entry_cache_alloc() as well, instead of GFP_KERNEL. >>> >>> Signed-off-by: Andrey Ryabinin >>> --- >>> mm/zswap.c | 7 +++---- >>> 1 file changed, 3 insertions(+), 4 deletions(-) >>> >>> diff --git a/mm/zswap.c b/mm/zswap.c >>> index eedc278..12ad7e9 100644 >>> --- a/mm/zswap.c >>> +++ b/mm/zswap.c >>> @@ -966,6 +966,7 @@ static int zswap_frontswap_store(unsigned type, pgoff_t offset, >>> struct zswap_tree *tree = zswap_trees[type]; >>> struct zswap_entry *entry, *dupentry; >>> struct crypto_comp *tfm; >>> + gfp_t gfp = __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM; > > This doesn't trigger direct reclaim so __GFP_NORETRY is bogus. I suspect > you didn't want GFP_NOWAIT alternative. > > [...] >>> @@ -1017,9 +1018,7 @@ static int zswap_frontswap_store(unsigned type, pgoff_t offset, >>> >>> /* store */ >>> len = dlen + sizeof(struct zswap_header); >>> - ret = zpool_malloc(entry->pool->zpool, len, >>> - __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM, >>> - &handle); >>> + ret = zpool_malloc(entry->pool->zpool, len, gfp, &handle); > > and here we used to do GFP_NOWAIT alternative already. What is going on > here? I suspect that there was no particular reason to assemble this custom set of gfp flags. This code probably should have been using GFP_NOWAIT|__GFP_NOWARN from the very beginning. >>> if (ret == -ENOSPC) { >>> zswap_reject_compress_poor++; >>> goto put_dstmem; >>> -- >>> 2.10.2 >>> >