From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752256AbcHLWrM (ORCPT ); Fri, 12 Aug 2016 18:47:12 -0400 Received: from mail-bl2nam02on0069.outbound.protection.outlook.com ([104.47.38.69]:10120 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751917AbcHLWrJ (ORCPT ); Fri, 12 Aug 2016 18:47:09 -0400 Authentication-Results: spf=pass (sender IP is 63.163.107.21) smtp.mailfrom=sandisk.com; suse.de; dkim=none (message not signed) header.d=none;suse.de; dmarc=bestguesspass action=none header.from=sandisk.com; X-AuditID: 0ac94369-b97ff7000001694f-39-57ae4ffa900c Subject: Re: [PATCH] sched: Avoid that __wait_on_bit_lock() hangs To: Oleg Nesterov References: <16207b90-2e6c-fe23-1b4b-3763e5cf0384@sandisk.com> <20160808102213.GA6879@twins.programming.kicks-ass.net> <4091e252-18d9-1795-de63-9fbc678aa6b1@acm.org> <20160808162038.GA25927@redhat.com> <78fafdc1-d4ae-a9a2-169c-1d456b6e6e41@sandisk.com> <20160809171459.GA13840@redhat.com> <3cec7657-caa9-92ca-9f0e-34f073a6ed8c@sandisk.com> <20160810104555.GA3333@redhat.com> <4d2e02f8-c7da-ee1a-1068-25492cbffebe@sandisk.com> <20160811173651.GA31803@redhat.com> <20160812161611.GC30930@redhat.com> CC: Peter Zijlstra , "mingo@kernel.org" , Andrew Morton , "Johannes Weiner" , Neil Brown , Michael Shaver , "linux-kernel@vger.kernel.org" From: Bart Van Assche Message-ID: Date: Fri, 12 Aug 2016 15:47:00 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2 MIME-Version: 1.0 In-Reply-To: <20160812161611.GC30930@redhat.com> Content-Type: multipart/mixed; boundary="------------1ABB882063EED93AEF250835" X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOIsWRmVeSWpSXmKPExsXCddJ5ke4//3XhBg0f+CzmrF/DZrF6k6/F mkkP2Swu75oD5P07xWixd34Di8XW/a2MFsd7DzA5cHgcfvOe2WPnrLvsHptXaHlsWtXJ5nFi xm8Wj/f7rrJ5bD5d7fF5k1wARxSXTUpqTmZZapG+XQJXxoPGh+wFP9MrZt7eydLAeCqsi5GT Q0LARGLmjV8sXYxcHEICS5kkJqxsZgRJCAnsYJSYfYkVpuj3x2dMUEWMEg8X3mYGSQgLOEps 3f8ZzBYRUJb4c28BM0RRM4vEtaP9jCAOs8BKJoln9yeCjWITMJL49n4mC4jNK2An0bf7O9g6 FgFViZM/V4JNEhUIk5h29y07RI2gxMmZT8DqOQUMJNZ/mwlWwywQIDHz7E52iPOuskq82WsH cba6xMkl85kmMArNQtI+C0nLLEYOIFtTYv0ufYiwvMT2t3OYIWwHif63N5gwxT0lDs2/AzUm XuLStuvsmGoyJP7/Xs+6gJFrFaNYbmZOcW56aoGhqV5xYl5KZnG2XnJ+7iZGSJRn7mC8+8T7 EKMAB6MSD+8HznXhQqyJZcWVuYcYVYAGPdqw+gKjFEtefl6qkgivjh9QmjclsbIqtSg/vqg0 J7X4EKM0B4uSOK/bvS9hQgLpiSWp2ampBalFMFkmDk6pBsbuN0ohSSe+3ere8UTodRPz2uT3 536fCM7T1g9yyzX+kvy5Waf7xK5JE1co7voVM9Mvo/tjDav9jB63d/brPL7Uc3f87c845Juw Wd67Zcvj9+J1e2+f5Q3Qa5r7UXj6b5mNx/22qE53PGhiF1Ky9LE2i4hxzpsX/h9inoebhb5a 98fz/NGPZ72VWIozEg21mIuKEwE8g9/G+gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrMJMWRmVeSWpSXmKPExsXCtZEjRfdJ4Lpwg/WXdS3mrF/DZrF6k6/F mkkP2Swu75oD5P07xWixd34Di8XW/a2MFsd7DzA5cHgcfvOe2WPnrLvsHptXaHlsWtXJ5nFi xm8Wj/f7rrJ5bD5d7fF5k1wARxSXTUpqTmZZapG+XQJXxrRFL5gKVmdUvJgwn62B8X1YFyMn h4SAicTvj8+Yuhi5OIQEFjNKzLpxlRUkISzgKLF1/2dmEFtEQFniz70FzBBFzSwS1472M4I4 zAIrmSRu3u9lAqliEzCS+PZ+JguIzStgJ9G3+zsjiM0ioCpx8udKsEmiAmES0+6+ZYeoEZQ4 OfMJWD2ngIHE+m8zwWqYBQIkFk44yziBkXcWkrJZSFILGJlWMYrlZuYU56ZnFhga6RUn5qVk FmfrJefnbmIEBytn1A7G6xPNDzEycXBKNTCm6CSG7549xZd9ioLv2cQZlx6UxG6rFpVdxeq1 wvFj30qe1Jhtm2tn/HV9Elhgn5J+Mv36zNrjlZwuMUvUjLdpfU6cYLNr47uzU7eIxF8w0U51 7ktde73oUdrOYCMl3yXlxj9et/v3JpW2xz0sWlh078QsJYe+zLmvc0X6nk+ZvHdi98+Wt/OV WIozEg21mIuKEwFIHcayBgIAAA== X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:63.163.107.21;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(51914003)(199003)(377454003)(24454002)(189002)(64126003)(106466001)(81156014)(36756003)(2950100001)(81166006)(8936002)(11100500001)(4810100001)(31696002)(512874002)(8676002)(65806001)(86362001)(33646002)(65956001)(54356999)(356003)(76176999)(7846002)(7696003)(50986999)(305945005)(77096005)(97736004)(586003)(84326002)(4001350100001)(2906002)(4610100001)(189998001)(2270400002)(87936001)(4326007)(568964002)(69596002)(2476003)(110136002)(5890100001)(93886004)(92566002)(31686004)(68736007)(83506001)(626004)(270700001)(53416004)(65826006);DIR:OUT;SFP:1101;SCL:1;SRVR:BN1PR0201MB0689;H:milsmgep15.sandisk.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD003;1:CuVUs6igeJT8eQt5jLaBOG1u1n3p5b7/uC9Dg9hq3PMTTUMzlVMn0gavadsKLTRjefbNUY9u1RW5SVcipnxnNtk76edomZ8+xKKSn1NfiNJvJhVaFSrkY9E5xv20gMyKjQOdHuaf2e2lzKDKTSZQoqEFVNrV/tpCXd9gTXmuLVtEGxdXIkOTnuYleWtVE9ZKNxJKYHEntGzVEPdUZGmqLpLzTrY5yGdGdEs9WZ87qxMJXS5psbPDzaGn/0Hh/PQ8CV2QvBDCArml8YF/823i9V8RURYa1EvClbUjx4QaTMZKOtgfZB489P61sJDihx28q++pLylNzi7NF2tHg3OcmTbrIBA9VDwgLdKUkRAwQALIXhXhXLoT0wyEKoktCU15CocgObL49vm67EXxhkF6+Z7GzR7TBlXTeqmrJye2BO1Bu1Ybz5TVK/mFWwjpQH5rWPpvICR5TTlmRwQKY0LovR1k9Vme7+dGIHDZyiqImYTdtwfLjGDq92hlZHYZH0mOrbopC4GrIt5Gwv8kSEbAvA== X-MS-Office365-Filtering-Correlation-Id: e8b19b1b-0a36-49ff-c264-08d3c30295ee X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0689;2:913h3b59nQ+1V49MGT7WQj3uK0iezvrn2OIjeWNLXc51TYJbLa4l1vMEGqS1V09PlSoiYDkRnioIN0bGktLgluODHV/h7jzauKgcU3dQepSCqHJC3gg4tZwGnYgJspsE+gAFPTviWUeaV1HqeE3Oxq2Mvt9NE6jlch1Brv0FaWjR7ML5vBnKZ0XaBaUhCVBC;3:m3M3BtInBmjfvg5QHxeOqX+XYRh5k9QUzefHAQ9/kKQHZV/2hbgkFyMNdaKn5IHPBVerZILx1HRMmSuxZTxW5c3uOWInRTb7ZSb+r2hH7JwC4sDwaXejofmxYnRD36W4XYnAYsZEuBJH4AeN8dvvn0Eanr/6l+Fs7sqBbxLgZejtTshyubwkA2PgsOH+l2Cs+5c43Z6weVimiR6CldVclS/BWMHEJQo+s19FXvbk7rsmTQhHpX2jUfZahfd5uYU017ltOmHNghKXdbCschYOgw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:BN1PR0201MB0689; X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0689;25:nGbl2RiwVJNo08vewqPdnVPdwLxbv+a8XP0f7uQMLjsXs4jKqfYL6H1WQzItKnj8csOkApKnhQQ6citJ7xns/vUdEHQhSKM8Ub3t+UAVzhCN0oJjZcL+miXp+h/s5bVOLzZnB+axzWf7hkkbQPvz3bLfSt54RZcXFPCne5YGarKg9k97M6onXjoLDE9VrFfNOGS06V7daDPxtldwZVnp+2LGucG8yylxIRpKfTp+QFP8T3BX/eImOoNKsESQ42BwsTc5T2pDBS0wF0ZX5FayRcPVQu7p8hPpSU0rNXUgcb3KG2DkeNBevLzcgFnjMgRcDt+mGjPQWhf+uF7a8y+BPTP6wzJsWaHVPU1UiVLksvWpjQ8v1396pufGjILW3mO/yCY03XFTOpdbwDJ0hPqnzgl8QE6Mh/MPxKM2GfoyPVvurqGxjBGu0oi1YndtYbE3a2894uw9B79NAY8Wkb3lY7PgcTtG6Lnf7Id1gLm0p0+vXuKbiZVuRdSMsIgfbQPZ;31:+uqZbdakWGjsZAIcb9+3wbbCPFpq6wP7vkQvuDp8p0FzesvTa13exTJfIG8S21Q4xd3lXZRBIkoqGeFvR9J/el5VuVzVktawVEed+iDNS8Z2j1cZag5DRBmOBmFJp2u8gvjXTx5dIYp4yqR1CkdUhyz9Pw1v8V8S1id+JL23IrTHKma3unDogzlFs6M5PEvUkTWfEJEdJgzCtkNYkbUWPRaCOfzOl7gylGufn/zUf6T47zMbDxznkTsU4Gl9AqHn X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0689;20:ULE+897eed33ag8YuGzdXnROK2o+nHbs2RWl1UlLOvvtL5UDu1iYBPAjhFEcwkipavsMIQkUM+x4k3Mnweftx3Nr//FKmaQP29+KCGwB340hu8FVSe6JTJ0u1sX7urETBFVlR6c/Zdz9ONl+LWAIIpOWmarAQKwuC8cXBnmlLya63aABmvygu/BizyOUF+QfowKAUfTAlilxCuHgblk+jNHzoMVhj6wesaRtpXts1mzBw1bhdk3Nu3kz18ZeQrMvgOh3rLJ291yxQR415CY4BQexvLxmdrkNs1dwxxlvnvVzzvpSuNjCxDG23ld9//0Y1lPDZoJ2pNoJUSX3fNOR3FccNVeedcMsqlZrsuYs0g4iNY/f2jJ9VeX6tDDiVJOS77YYmNxSvIJHiQSnyaNXobhPY+Gwt1NRJbnIFmpC3xcjKFtoj+gZXlYGdt/OGwaCXDJHbJs61rdgYyR6QX+xZeRz8kXUtDi3QPnWBS+tzZEhtx1vn3NQKiHMs74ykptR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(102415321)(6040176)(601004)(2401047)(8121501046)(13018025)(13016025)(5005006)(10201501046)(3002001)(6055026);SRVR:BN1PR0201MB0689;BCL:0;PCL:0;RULEID:;SRVR:BN1PR0201MB0689; X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0689;4:tqPVXC/SPpHXt4jIIYwnJMWwGhghLjYvzgWLdBdiK7ch9IOhiO42kLudtNdG23cHDD6MKgkQmygRIxl5Jvr7WV+RviKcXKTNwW+l4LfpUgpjcSjUBicw7VWd03iQbvmQALRQIWpnZ9ef7+yQO5AH/tkg/R11YU1AmMzEYai9UusGCnqyIqAfCEkH7fBNek+8/F+NTSb2CjHKBcMLaa9wVAVfjzvi1zdOJwmZyswit1w0Ya063LIECjTLYXlDcFcNq1jfRuvgtNuWhS9snSw2gJLdp5x66SnOZAuAzTPr8E6LJ68QKnjCOXkqVRkw7ef3bX9X2bDiec3RTstjc1gexdBJRO/XSzR/xdJrl6Lr2+hRlxKl/+HB66U8y+Ww1Gngk+QwFRCwFDusiH+H5xn6nROjgsq2AzP66DspowpvDCTGEtqJ6dQzupyRaA/GeCNQnPWiyiKWtAW3EfPCvWuAKg== X-Forefront-PRVS: 003245E729 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN1PR0201MB0689;23:xSlLTvSawSnuKgGtpXHfiUtwFcdEAySiRLgVMGR?= =?us-ascii?Q?Nxak1/BTvFOOKyd/Y7FKcnv3Iyh8vYVWL2g92COQjOctDl+usiiP8qT/N+J6?= =?us-ascii?Q?iRzGgNlLZRZf2rikTBUM9jXLz2odhnick8NJ/EUmgGTnETP2T1xLelV5IbHq?= =?us-ascii?Q?ZVdD/AFZw3yV+W2L9s4SFW4QAc9tN9ZNcuv0RnlPzR0jBG5eI3DZVDJKgU2S?= =?us-ascii?Q?+Aty54/qXgZ/1BK0WQEN81MO+p3oWMrIKI4lI0oRjAuHKEjFOEiGhqvEpMJw?= =?us-ascii?Q?Tg3fTCYi2g8ahVQRAh9f4SN8R+qEBUmHYl9EzQa23GSjSahX44qvMrVG0ucm?= =?us-ascii?Q?UY7rqdSbQJfH9whQu0ml9XlSdUsDNojA6k/qMQUE/6R9pSogND5T5Xmigxyx?= =?us-ascii?Q?RU8UPGlMIQpjnoT4NA3vC4WUUi3MqL/vjx0PBF7R0GAKfXMGz7hnbQv5SJbh?= =?us-ascii?Q?W+rjSMBf+p/HFY4FKKBiAeUnxeguui+IYsKZ/7/B+UZ8rw7uAtY1LHhhwOCv?= =?us-ascii?Q?HTykTiTXp4MgCnQSkHPWTs00WVy/mIFs5q8PtRz77Gj83VxBxvWKTT0j2AR5?= =?us-ascii?Q?it3KSJEAeyviCqtMyDBIj6S2oVG2UT85ues51CBKa+ViIEEfKn16sgIucLgg?= =?us-ascii?Q?6qbhCWX6H0NMdjOKJ5MGJXqD4SK4JmI3N8oz98wEmLvU4l12dgAaBS+ezvyH?= =?us-ascii?Q?PzbeufAiSoziTWYhhSe7tO/f6lFrrMs8fiGozs1MilADoV5BwwNBvL/LiYZp?= =?us-ascii?Q?WXCO+EkZ6iKdFDUQre6gdJjMTORBhYDKg840QPLc93X8xPT6YrX3TvXjX5bc?= =?us-ascii?Q?WGJTbOukcnJstrdDuvL5bz2f+LsHPUj6VtLnJzNHVMbsxFrVs/iz+I1FAOAf?= =?us-ascii?Q?VQp5uC+TpKRiQHHAc28CTag+CejIyZ2csnQEVuOvplXE7ZFqFfzxiwfgNQYR?= =?us-ascii?Q?/elKsUjeJp79yWnsq9Jyt5CtzeQn60idDvhAEI1Si55glejnXGqgDwnyZzG6?= =?us-ascii?Q?wjGLxlQI7FEs/dlJGqjLTssCilxxAp0g0WFOCbmQtNt/7yD0d9pZjkLkLYk7?= =?us-ascii?Q?mb+FS+6DyRA69eH/qd/lIM9tPVa8lMt3NBJ3wajSBn6e+Ufo9dUZc+chdAud?= =?us-ascii?Q?dWfN8FVBPA/qA7MRqgce5FZuIhcG0tnnGiAzbNcHHZcxuufkUsdC8xkZVrl9?= =?us-ascii?Q?D2O1Z74SUQQjGWH/Rly+fVneBK12KI5Cb/2IQb6i6dDP/et4CVVGmoORK85m?= =?us-ascii?Q?gjT00nzCt7OpQ/gGKUY86ZMkVBcUGUnhQ0FSfsflEEX2Gfv/5xD2gMBsaGCZ?= =?us-ascii?Q?Rrao2FBcU47ACyerIadamKhoM6C10lvCj5+zzkKtWjOOoXWUTqf2fh9uRtcs?= =?us-ascii?Q?OsGx0aA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0689;6:cqQHmMIwnq8pIW8oogz1DCfvar8Nb/Jtt1eehqE7Lys8gzKP1LpB2YVXRwcXZTNOwNkAyGh6QpRRdw11JUgsX0jJpy0h6Vv6+Bn6SEk51/ZrLvmmV1JKwdOPIGN0sWLPS5VM8YwQcIxhMuMmdBegMz6OeXMgOWrcCgRfmr2XWPyyIxicogUCLzDK+jd4ZQvU3U/I/730DWeiNhb4ITKTLGIFKJXEv0SP9haP6TJQ5w7t4USP8Z6JuAny2ip7MPSwnvXpUOwo3yadwemwcv6FwZzbAnjFR3klfzx1Rq+tRptRekmaIDq9lIf1NVmkVa/LX24EuMC6XmFmy0VdvTg/xQ==;5:64v2824ejJqi10G5FpoyxlHplShIAG/p6PTfXDdQZ1vc9SmL9RKfoIGij5qaqgMjUEz3VZfNt6JLY7lbTEkx+0AdKMbbFXliIPCvSvqnaVMXs22UwRaXwtJybv4hNVu0kSAq20xuL5y3LMd/K6I8Ow==;24:G3eMGgGlHK1hYRstQIiOJUv0gexHwgBBRun6Bf9OCj9MljFkrIl4pADfRPrusoim9Xshfak1XBZr0rhT3oEf6yxt3tEEKXD4WWXnCD1RRyA=;7:6G7SIg2rrDc19FeNVW+XmGY4RZbVzeffG6h6UC2nxZvpyOpteb15yusNsCfneC6BCtVlNYB6opfJeuK4CkrOq1uNYGQS3Kyu5gKMoT+18opNyobq+bdDCv99wMP5Ty7arxrsWz57uc08FdalDHpiFd7GK4AWsgYUXxAzURd8QpvUG18nQKBfJm+KuEtpy0/TpgmAXNt4Qy8jrkL7eHMez9sC0jj94L52EvqpJmccwvTzsgg3QhlRkdqXDRbMZrOy SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN1PR0201MB0689;20:7KOyfge59C9xiLFQhydD/7+NIvNhXkvP1Njb7lhGKdKMjDa4STsgl5Lhif0f3t3JqUC6dEuWZQHAYtFQp27F9cDV8D/Ox8avEF1PCLjE2/hsaNG0lsz5EhQtHjF5eSPZTNqL37OPsxLTxrmrPK7ZrpMDImuWNZmai5MX49VYCguTBdQdOqmzbdU0c954xf8LqeitpDXhppvshWrbTwKhDtZGsjWHs89u0skL+WITLWerEMUQo/WpCB0ZrYGnO7yw X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2016 22:47:05.3595 (UTC) X-MS-Exchange-CrossTenant-Id: fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d;Ip=[63.163.107.21];Helo=[milsmgep15.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0201MB0689 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --------------1ABB882063EED93AEF250835 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit On 08/12/2016 09:16 AM, Oleg Nesterov wrote: > Please drop two patches I sent before and try the new one below. Hello Oleg, Thanks for the patch. In addition to your patch I also applied the attached two patches before I started testing. It took some time before I could reproduce the hang in truncate_inode_pages_range(). To my surprise the following appeared in the system log instead of a list of waiting tasks when I succeeded to reproduce this hang: Aug 12 14:48:06 ion-dev-ib-ini systemd-udevd[500]: seq 11210 '/devices/virtual/block/dm-0' is taking a long time Aug 12 14:48:07 ion-dev-ib-ini systemd-udevd[500]: seq 11227 '/devices/virtual/block/dm-1' is taking a long time Aug 12 14:50:06 ion-dev-ib-ini systemd-udevd[500]: seq 11210 '/devices/virtual/block/dm-0' killed Aug 12 14:50:06 ion-dev-ib-ini kernel: do_generic_file_read / pid 17232: killed Aug 12 14:50:06 ion-dev-ib-ini systemd[1]: Started Cleanup of Temporary Directories. Aug 12 14:50:36 ion-dev-ib-ini kernel: __lock_page_impl / pid 17224 / m 0x2: timeout - continuing to wait for 17224 Aug 12 14:50:36 ion-dev-ib-ini kernel: __lock_page_impl / pid 17232 / m 0x2: timeout - continuing to wait for 17232 Aug 12 14:51:06 ion-dev-ib-ini kernel: __lock_page_impl / pid 17224 / m 0x2: timeout - continuing to wait for 17224 Aug 12 14:51:06 ion-dev-ib-ini kernel: __lock_page_impl / pid 17232 / m 0x2: timeout - continuing to wait for 17232 [ ... ] Running echo w > /proc/sysrq-trigger learned me that both pid 17224 and 17232 were hanging in truncate_inode_pages_range(). Does this mean that some code in mm or in the filesystem I was using for this test (ext4) does not unlock all pages it should unlock if a fatal signal is received? Please let me know if you would like me to repost this message on an mm-related mailing list. Thanks, Bart. The echo w > /proc/sysrq-trigger output: sysrq: SysRq : Show Blocked State task PC stack pid father systemd-udevd D ffff88039870b7e8 0 17224 500 0x00000006 Call Trace: [] schedule+0x37/0x90 [] schedule_timeout+0x249/0x470 [] io_schedule_timeout+0x9f/0x110 [] bit_wait_io_timeout+0x24/0x70 [] __wait_on_bit_lock+0x49/0xa0 [] __lock_page_impl+0xe5/0x160 [] __lock_page+0xe/0x10 [] truncate_inode_pages_range+0x416/0x7c0 [] truncate_inode_pages+0x10/0x20 [] kill_bdev+0x30/0x40 [] __blkdev_put+0x71/0x360 [] blkdev_put+0x49/0x170 [] blkdev_close+0x20/0x30 [] __fput+0xe8/0x1f0 [] ____fput+0x9/0x10 [] task_work_run+0x83/0xb0 [] do_exit+0x3ee/0xc40 [] do_group_exit+0x4b/0xc0 [] get_signal+0x2ca/0x940 [] do_signal+0x23/0x660 [] exit_to_usermode_loop+0x73/0xb0 [] syscall_return_slowpath+0xb0/0xc0 [] entry_SYSCALL_64_fastpath+0xa6/0xa8 systemd-udevd D ffff88006ce6f7e8 0 17232 500 0x00000006 Call Trace: [] schedule+0x37/0x90 [] schedule_timeout+0x249/0x470 [] io_schedule_timeout+0x9f/0x110 [] bit_wait_io_timeout+0x24/0x70 [] __wait_on_bit_lock+0x49/0xa0 [] __lock_page_impl+0xe5/0x160 [] __lock_page+0xe/0x10 [] truncate_inode_pages_range+0x416/0x7c0 [] truncate_inode_pages+0x10/0x20 [] kill_bdev+0x30/0x40 [] __blkdev_put+0x71/0x360 [] blkdev_put+0x49/0x170 [] blkdev_close+0x20/0x30 [] __fput+0xe8/0x1f0 [] ____fput+0x9/0x10 [] task_work_run+0x83/0xb0 [] do_exit+0x3ee/0xc40 [] do_group_exit+0x4b/0xc0 [] get_signal+0x2ca/0x940 [] do_signal+0x23/0x660 [] exit_to_usermode_loop+0x73/0xb0 [] syscall_return_slowpath+0xb0/0xc0 [] entry_SYSCALL_64_fastpath+0xa6/0xa8 --------------1ABB882063EED93AEF250835 Content-Type: text/x-patch; name="0001-mm-__lock_page-dbg.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-mm-__lock_page-dbg.patch" >>From af1cda43467c7fe2a6c76b11a6c25fcbec424ce3 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Thu, 11 Aug 2016 16:38:32 -0700 Subject: [PATCH] mm: __lock_page() dbg --- include/linux/mm_types.h | 3 +++ include/linux/pagemap.h | 22 ++++++++++++++++++++-- mm/filemap.c | 44 ++++++++++++++++++++++++++++++++------------ mm/ksm.c | 1 + mm/migrate.c | 1 + mm/shmem.c | 1 + mm/swap_state.c | 2 ++ mm/vmscan.c | 1 + 8 files changed, 61 insertions(+), 14 deletions(-) diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index ca3e517..59fdfeb 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -23,6 +23,7 @@ struct address_space; struct mem_cgroup; +struct task_struct; #define USE_SPLIT_PTE_PTLOCKS (NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS) #define USE_SPLIT_PMD_PTLOCKS (USE_SPLIT_PTE_PTLOCKS && \ @@ -220,6 +221,8 @@ struct page { #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS int _last_cpupid; #endif + + struct task_struct *owner; } /* * The struct page can be forced to be double word aligned so that atomic ops diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 9735410..d332674 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -419,10 +419,25 @@ extern int __lock_page_or_retry(struct page *page, struct mm_struct *mm, unsigned int flags); extern void unlock_page(struct page *page); +static inline struct task_struct *get_page_lock_owner(struct page *page) +{ + return page->owner; +} + +static inline void set_page_lock_owner(struct page *page, struct task_struct *t) +{ + page->owner = t; +} + static inline int trylock_page(struct page *page) { + int res; + page = compound_head(page); - return (likely(!test_and_set_bit_lock(PG_locked, &page->flags))); + res = !test_and_set_bit_lock(PG_locked, &page->flags); + if (likely(res)) + set_page_lock_owner(page, current); + return res; } /* @@ -641,9 +656,12 @@ static inline int add_to_page_cache(struct page *page, int error; __SetPageLocked(page); + set_page_lock_owner(page, current); error = add_to_page_cache_locked(page, mapping, offset, gfp_mask); - if (unlikely(error)) + if (unlikely(error)) { + set_page_lock_owner(page, NULL); __ClearPageLocked(page); + } return error; } diff --git a/mm/filemap.c b/mm/filemap.c index 530e75a..0ad8bf6 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -699,11 +699,13 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping, int ret; __SetPageLocked(page); + set_page_lock_owner(page, current); ret = __add_to_page_cache_locked(page, mapping, offset, gfp_mask, &shadow); - if (unlikely(ret)) + if (unlikely(ret)) { + set_page_lock_owner(page, NULL); __ClearPageLocked(page); - else { + } else { /* * The page might have been evicted from cache only * recently, in which case it should be activated like @@ -831,6 +833,7 @@ void unlock_page(struct page *page) { page = compound_head(page); VM_BUG_ON_PAGE(!PageLocked(page), page); + set_page_lock_owner(page, NULL); clear_bit_unlock(PG_locked, &page->flags); smp_mb__after_atomic(); wake_up_page(page, PG_locked); @@ -925,27 +928,44 @@ void page_endio(struct page *page, int rw, int err) } EXPORT_SYMBOL_GPL(page_endio); +int __lock_page_impl(struct page *page, int mode) +{ + struct page *page_head = compound_head(page); + DEFINE_WAIT_BIT(wait, &page_head->flags, PG_locked); + struct task_struct *owner; + int res; + + for (;;) { + wait.key.timeout = jiffies + 30 * HZ; + res = __wait_on_bit_lock(page_waitqueue(page_head), + &wait, bit_wait_io_timeout, mode); + if (res == 0) { + set_page_lock_owner(page, current); + break; + } + if (res == -EINTR) + break; + owner = get_page_lock_owner(page); + pr_info("%s / pid %d / m %#x: %s - continuing to wait for %d\n", + __func__, task_pid_nr(current), mode, res == -EAGAIN ? + "timeout" : "interrupted", + owner ? task_pid_nr(owner) : 0); + } + return res; +} /** * __lock_page - get a lock on the page, assuming we need to sleep to get it * @page: the page to lock */ void __lock_page(struct page *page) { - struct page *page_head = compound_head(page); - DEFINE_WAIT_BIT(wait, &page_head->flags, PG_locked); - - __wait_on_bit_lock(page_waitqueue(page_head), &wait, bit_wait_io, - TASK_UNINTERRUPTIBLE); + __lock_page_impl(page, TASK_UNINTERRUPTIBLE); } EXPORT_SYMBOL(__lock_page); int __lock_page_killable(struct page *page) { - struct page *page_head = compound_head(page); - DEFINE_WAIT_BIT(wait, &page_head->flags, PG_locked); - - return __wait_on_bit_lock(page_waitqueue(page_head), &wait, - bit_wait_io, TASK_KILLABLE); + return __lock_page_impl(page, TASK_KILLABLE); } EXPORT_SYMBOL_GPL(__lock_page_killable); diff --git a/mm/ksm.c b/mm/ksm.c index 4786b41..20ca878 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -1880,6 +1880,7 @@ struct page *ksm_might_need_to_copy(struct page *page, SetPageDirty(new_page); __SetPageUptodate(new_page); __SetPageLocked(new_page); + set_page_lock_owner(new_page, current); } return new_page; diff --git a/mm/migrate.c b/mm/migrate.c index bd3fdc2..50e5bc1 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1794,6 +1794,7 @@ int migrate_misplaced_transhuge_page(struct mm_struct *mm, /* Prepare a page as a migration target */ __SetPageLocked(new_page); + set_page_lock_owner(new_page, current); __SetPageSwapBacked(new_page); /* anon mapping, we can simply copy page->mapping to the new page: */ diff --git a/mm/shmem.c b/mm/shmem.c index 171dee7..0af6bf7 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1021,6 +1021,7 @@ static struct page *shmem_alloc_page(gfp_t gfp, page = alloc_pages_vma(gfp, 0, &pvma, 0, numa_node_id(), false); if (page) { __SetPageLocked(page); + set_page_lock_owner(page, current); __SetPageSwapBacked(page); } diff --git a/mm/swap_state.c b/mm/swap_state.c index c99463a..8522a8c 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -361,6 +361,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, /* May fail (-ENOMEM) if radix-tree node allocation failed. */ __SetPageLocked(new_page); + set_page_lock_owner(new_page, current); __SetPageSwapBacked(new_page); err = __add_to_swap_cache(new_page, entry); if (likely(!err)) { @@ -373,6 +374,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, return new_page; } radix_tree_preload_end(); + set_page_lock_owner(new_page, NULL); __ClearPageLocked(new_page); /* * add_to_swap_cache() doesn't return -EEXIST, so we can safely diff --git a/mm/vmscan.c b/mm/vmscan.c index c4a2f45..67d7496 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1190,6 +1190,7 @@ lazyfree: * we obviously don't have to worry about waking up a process * waiting on the page lock, because there are no references. */ + set_page_lock_owner(page, NULL); __ClearPageLocked(page); free_it: if (ret == SWAP_LZFREE) -- 2.9.2 --------------1ABB882063EED93AEF250835 Content-Type: text/x-patch; name="0001-do_generic_file_read-Fail-immediately-if-killed.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-do_generic_file_read-Fail-immediately-if-killed.patch" >>From 32f250e0c8aa3d90f7fc8ac293060e2944d359a5 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Thu, 11 Aug 2016 11:02:29 -0700 Subject: [PATCH] do_generic_file_read(): Fail immediately if killed If a fatal signal has been received, fail immediately instead of trying to read more data. --- mm/filemap.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mm/filemap.c b/mm/filemap.c index 20f3b1f..6e46fb5 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1643,7 +1643,12 @@ find_page: * wait_on_page_locked is used to avoid unnecessarily * serialisations and why it's safe. */ - wait_on_page_locked_killable(page); + error = wait_on_page_locked_killable(page); + if (error == -EINTR) { + put_page(page); + goto out; + } + error = 0; if (PageUptodate(page)) goto page_ok; -- 2.9.2 --------------1ABB882063EED93AEF250835--