From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933430AbdCaP2z (ORCPT ); Fri, 31 Mar 2017 11:28:55 -0400 Received: from mail-eopbgr10097.outbound.protection.outlook.com ([40.107.1.97]:51200 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933255AbdCaP2x (ORCPT ); Fri, 31 Mar 2017 11:28:53 -0400 Authentication-Results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=virtuozzo.com; From: Andrey Ryabinin To: Seth Jennings , Dan Streetman CC: , , , Andrey Ryabinin Subject: [PATCH] mm/zswap: fix potential deadlock in zswap_frontswap_store() Date: Fri, 31 Mar 2017 18:30:09 +0300 Message-ID: <20170331153009.11397-1-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.10.2 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR02CA0009.eurprd02.prod.outlook.com (10.170.218.150) To AM5PR0801MB2052.eurprd08.prod.outlook.com (10.168.158.142) X-MS-Office365-Filtering-Correlation-Id: c953d2aa-1c0a-42b5-9907-08d4784aa193 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:AM5PR0801MB2052; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;3:cfxF67fWngeLE4vr0lkJrhzUSiSo3CNCIvXDGlZTSdW7HaruCTfeQ8vXGTQd7PFD7cJf7SjJb8v+zT6EiVJlAraf0MOHKlkjk8Xc2cC6HDj3626hVZI3MOdcXfyZI2wDHaMfeNkVOu4+KGp7hr0fCBbRzj3So0YJKf39LIEs3YEKDxTOCwIW9DkrKZaFkErk6q4I3b2nV+01zBnE7lh3PbGyq/mw/aXQSBimrNJoSSmmLe+YmfGacDBOL6CqWTUVZxW61ZwDEp007mZTfNqdxrPQRosBcb4l/EdTE71mje/JdYWgM+HxltDuEOb0VCcrlxZlp6klr1ygMPyoYHEe6Q==;25:If/tIqB4NU5sf7k39dGhp33nc6yqElD/Yex+G2kiTef+8VW8vXX2LRA8i7ACW/LZbwTbide6U7Ot0J928CP3PzvnslHDzZymU6katFuESh5lgMWoKdvBu4yjii0eJzcebbTmqK1JtCSXS2fxcrTS+1QMuREeXjEe+mup4nxNh/kEcyugeYy3NerDubhRxQ9D3+4/WrWkuUTLOqaJzFh6lFR6vUzubjI+OKVys0I4YEJvkAo4TJBYP2N6duC4UA0hNyIqGnZSsHJxIJ6EKMIFmRNbz5fJV++TDacJEb/g/ZeorPWDtOaLMh5tQtWF3p3o2zW2fO9vM+VdQ3PvoiwVY9dT0t2o7/lSjS/TUdFv4vnIunnym6deq3f3vKZSoFslt7blBc8jX5zJIAayFquawelApOW1VEO4n0lNpPdtJrqiF8TGCdiERy3qJAgZPMVAXBZY09AAMJiWbvYGwsygvA== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;31:kAUTjvk/Ht93O8noPCRSG+LVI1J/+5L8LpBdeWPB7wA0/1vIYrofHdxSQmwbOycunas6OKMpd9HxXf5DHhg7QBC9XuDoOj0KjgRJ9r3h7Qb3jbT0EPmx3qLEYqMm8/ybCUB7k2dBxoEwTn5sZh4u4iNntMEIg8OFY7jgZ/G2h0tsG4u+iRlADv7UNH3dOgOq2Chf051Ib6zpifmcSaeolJMFmd9uKiOS1SHsuFV76ygcCo4rOtwGCYE3GIvRWy/8;20:yVRVNXtjMAwrF/+JUXBzObSCv03XgjRjtJL1hUIbcTQu7HTum2KB+MrGM682S9goCALl9DJUul3dSjSWCiYwYVjdpz/wx/eGAGXeoJh1YAkW6FfOk9+dlYfDAFjEdSuSnOOkRqbBngl7r82Eg449HriHRe/tz5vzhC7SvA3U+F7dZJLZriUy1NTY/7Dwqinz45w1gX69zH4ACwbDlmGwRKaRrBjfHPWrN4TXvJrojYly7tKyOUT4RzV80fq4mV6URjrMy9AcdQh9T0YLx4mN0cxZN0Eoqf4fqhKZ4S6HYfWDY6Q+iuJHQQeDs1fYmqbhmIrAAWgptfxUSlWv9f6yy4msBnIOS98ItybdnFPc1Q0L0VXKRGYdHNK7lyJWW8GKrSIOrnWi6J/cR9OqXwTJopeolLS5W7rHsdPODbJeRSM= 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:mYuwxDOZK2WUm01jL+fnfMTdViHVIJHrGTyy/IfEPOJEYnVxeADjv0CPsvfqYWuTOM/NogeodFOfEDWn+Ikdm4z1T3jpQ6WthbxK4bJ9GNYJQtxN9I48ub7JtBfaAmrakWhVZXTPnjKkGfI3ktJu1+9NyAtlmOQQql7+6yJ5P+wvTWwu7A08lDrBwgXa2BUdHveTfhvPtKJxRxMr8TG+ylZdBmFep/RDwDMJxjJH9qy8oqWm0riNpz5ZifLBFQxHhuQSsTRjcrX25Ry9YNC7iSgWofyjVcS138xEF69DmBB89WkqTzUCPxXxbR1De+tItZQTxz9FO0SylKRu3gIL6hW5kpJbz7FdU9cdLRIG4uY5UIgfc90TVOPyaQajuD3HfAGSqqg95a2JKukRHwj4Lu3YXozDNX0Ypm1Kp/19GTkc7cBPHNq5J2iVYnCWGmg1vnmI2snTni52Zp4FtW2omDrkJ2BAmkxnU5FUuHgHO28rXyDkTKbQMQW3988kY+aHb+j6ZZQOlhTp3DLA46m8FIwkg4Jwr3HDrzwQMb9mmyUJl+f1tIusLkm/gV1edkRIYfi2qHTMkVgDGKkFFJvgAb2fZe6wEboYtHFtecou8qPbgps0rELG9CLrUqzCLt36/khkNZa65miAA3g+xlJ+E/3Oa44ybe8x1ZOcxOLG2WgeL2BHJU7g6zmMsc6s1qTOYq9t+uG0VRSgXaxmR5wApw== X-Forefront-PRVS: 02638D901B X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(39450400003)(39840400002)(39400400002)(39410400002)(2906002)(6512007)(3846002)(6116002)(53936002)(36756003)(33646002)(107886003)(6486002)(25786009)(4326008)(6506006)(54906002)(86362001)(38730400002)(1076002)(189998001)(53416004)(76506005)(50986999)(5003940100001)(42186005)(8676002)(48376002)(50466002)(305945005)(47776003)(5660300001)(66066001)(81166006)(50226002)(6666003);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB2052;H:localhost.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM5PR0801MB2052;23:borA5Akd7bY/cxCrKhzLudT/LrhpdIlmtHWFJdK?= =?us-ascii?Q?eW9pZfq1/eIl2JR+PeH87y0sl6JCRbCHF7lBMOfRyxwpaDZeTOfF+9LUm2BJ?= =?us-ascii?Q?elqeMR0mM9htggfNLsrxyIAmCRm4UTv45MC8F26t5ov4w+JHNdVgTWlYtWpd?= =?us-ascii?Q?RlgszNu7b/Oof1Tc3yPTvnIftqr8mPxoTNcX6mFJMTjDLh3ZQuHQGCgL5qX1?= =?us-ascii?Q?HER7vQACkPQ+KVbpo3bDXBGg1WEKcMmxS2Ew2Tsfp9btlUGvpwVJ09/92e5y?= =?us-ascii?Q?v+iaYa+9UiaU9+d3p+0J8fqZt6/7I3GoVeqqoXs3qAmAX53WAs6HkGXFAetu?= =?us-ascii?Q?XCJOtcnGlVDdikzyA5iNKpaQ5JyLzbOUVb1E9ghsdwH41dASHrhNinNv5ISt?= =?us-ascii?Q?7hQJzyPoSsEiQTWFGYtEcPG1EPxKOMw6BQpXd7Vck9BLUXrqbrvtkyEheyR/?= =?us-ascii?Q?cIoEPmRPwu3x+ZcrCBd5okxnFI5oyGdwanV8OXKXLUmtiHylJdnx2m/X++uQ?= =?us-ascii?Q?JUMJubs+E+LwxAGHUNoP+hHwHt5ciIxwXI5aOh/R3E+7abTmF0OO9gLqutO8?= =?us-ascii?Q?9t9+3WFXnXOujD9haezWKnxTUHh5q4+e3pB1sT2s0dZbboR0tBEUaTawcae4?= =?us-ascii?Q?1qjwPt5ZAaGy+B74zNxSubzGHGeCkYaMwF9NsHmvKYbP0O8Ne6NF9BeJyqL0?= =?us-ascii?Q?qtEE4VH0PvdFCjIirQ/KE8xskc6F60WNpBHldSvDwSKtzFxNi0lGj6sg8Ee4?= =?us-ascii?Q?RDtfZi8FNY0t3f0eIQdLChlYI3nPLeKXKD0zwjbofEdXT9bOwMN96cc6gxCy?= =?us-ascii?Q?86sD9CAI0YbopLERw8U+NdJJo3YH1jJOUe9XaqAq5VoT2oduuuQz1yUje11a?= =?us-ascii?Q?nPov4E1uKgLd5bII8rbKJH0AhCcNhwVh/isVdeTVDBIZatoEJTySLdG519Bv?= =?us-ascii?Q?U80FePIqOvyiX3R/IDsEOsp24FOEzOyfAPfKEwxuUhw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;6:50mcqMSMs9txPdrX0JVjLJFWpGz/bwav2kg6pNs47es4EBZxx7Oce3wPkrDQ48qPiYmzwEshWKXkPptw+uXu3eLDmTzto6V+Tg+VWmp3NXS4BeBL/4Nlg2eUCG/PHHzuo82jIGIJTpp+5eyuGZJ0Y+NQHNoCsjKcUzz+bS/9ZRTalh4TvMK4/P6hFAs+ZGDZPqH355S+xCVOhNzC1G5K+VYTmXj+X2cIPspz9W2D1rZz0alWr53Aw7IvjopU0XACAoDEUfsYSbet1vLsXQlIdojzc6J6cUXy29JZmi2QRw7CmeCf6PRCvS7XGWHhfcWAz67TtYdYldBLuG0mg38eHOYfImZJ1XJsOuMgw62UkypJH+VfqALSQo3gsdCINnhOqaVUXvhofp6HBW3cwA/gjg==;5:G4eV9TEk6PSPgU8vw5IxwVzaABWhfn3RlUuD+swKxelb5HDz266zORcCeA88ZhqKEPiZVTrxkLx0jv4GTNndimvZOmcRyCUNUniM/cUpwMa5O7UUQbEyaHMcba5EMYhBQ90UhY5ptFGfH+Lj8hFl8A==;24:3tDPalC9vL/nxGJvaMCYsqpFuFO7oaV03xXCg3JXJapH7ayCKESf52OyvU9EX13YDDcrDLMnLCIqS65cTpVBY1pKvXS1ZILnMQIg1VNz3JI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB2052;7:6VslIdtPrkJTSFc/49VzxkTJgHg2Q7LwQDvq0BZLFmBTPkCNbjzqWCyHxMmGzs/ebpzaEt3L16k0IWUtn76isvYAuofVkeo380jz+fBsRslZ3c8djXFjOOmUxMC+Xz6GnoWaakaVAfn0C6DmT451pqJlX2kwNfVJZr1v+7JtDL9QJKWcvQgEd4Bmbit//fqHAptNQnwBa2D1yb5fNrfI89lv+ikDPVIh8goSrr0/rCmyLFu51XSr2lWD/X4SkdSj9VCphqL+2kdwroqrqqFu28dpT84cB79jCkW8LgE4+QZ8RzIuQ3qW1sHDHt7qfMzT5UeMkXl9DN3fYyJJ6f5Yyg==;20:q341tiE+1kslUBPvNn4msmKAY2Dp9R1j3KAFGfccW4jbET48Mw2SBO4G8qofML9l/VFIUltC/CAVMKmuGy9KY3r7VAgFIr3v7DgLiK8xVWX8gfcTiMbVbmXDLwmefaiZ07riV0xZy5KzXGeN512Xt0M9MB9OJFenTYjym6cMk34= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2017 15:28:49.2944 (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 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. 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; int ret; unsigned int dlen = PAGE_SIZE, len; unsigned long handle; @@ -989,7 +990,7 @@ static int zswap_frontswap_store(unsigned type, pgoff_t offset, } /* allocate entry */ - entry = zswap_entry_cache_alloc(GFP_KERNEL); + entry = zswap_entry_cache_alloc(gfp); if (!entry) { zswap_reject_kmemcache_fail++; ret = -ENOMEM; @@ -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); if (ret == -ENOSPC) { zswap_reject_compress_poor++; goto put_dstmem; -- 2.10.2