From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752219AbcHFUWp (ORCPT ); Sat, 6 Aug 2016 16:22:45 -0400 Received: from mail-by2nam03on0079.outbound.protection.outlook.com ([104.47.42.79]:25558 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750933AbcHFUWM (ORCPT ); Sat, 6 Aug 2016 16:22:12 -0400 Authentication-Results: spf=pass (sender IP is 63.163.107.21) smtp.mailfrom=sandisk.com; gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=bestguesspass action=none header.from=sandisk.com; X-AuditID: ac160c69-5dfff70000000bcb-df-57a51ab4fa65 Subject: [PATCH v2 1/3] sched: Avoid that __wait_on_bit_lock() hangs To: Ingo Molnar References: <908d9eda-4942-270c-7431-bf56f0a62681@sandisk.com> CC: Peter Zijlstra , Oleg Nesterov , "akpm@linux-foundation.org" , Johannes Weiner , Neil Brown , Michael Shaver , "linux-kernel@vger.kernel.org" From: Bart Van Assche Message-ID: <6e70b9d5-05ea-72f7-b6fe-2c900a5b4266@sandisk.com> Date: Fri, 5 Aug 2016 16:09:02 -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: <908d9eda-4942-270c-7431-bf56f0a62681@sandisk.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIIsWRmVeSWpSXmKPExsWyRoxnke4WqaXhBl3PbSzmrF/DZrF6k6/F mkkP2Swu75oD5P07xWixd34Di8XW/a2MFsd7DzA5cHgcfvOe2WPnrLvsHptXaHlsWtXJ5nFi xm8Wj/f7rrJ5bD5d7fF5k1wARxSXTUpqTmZZapG+XQJXxr+X69kK1spWvN7B08DYKtnFyMkh IWAisfPiO9YuRi4OIYGlTBLLd29ggnC2M0rc+bKFrYuRA6zq2dwiqCJGicb9O1lBuoUFXCQm z2lhArFFBJQkFn/5yA5iCwnYSdzc/ANsELPARiaJ87dPs4Ak2ASMJL69nwlm8wIVXf5/FqyB RUBFYsXCNkYQW1QgTGLa3bfsEDWCEidnPgGr5xSwl7j85xEryEHMApoS63fpg4SZBeQltr+d wwyyS0LgIavEgkN7WCCOUJc4uWQ+0wRG4VlIRs1CaJ+FpH0BI/MqRrHczJzi3PTUAkNTveLE vJTM4my95PzcTYyQiMrcwXj3ifchRgEORiUe3gXrloQLsSaWFVfmHmKU4GBWEuGVllwaLsSb klhZlVqUH19UmpNafIhRmoNFSZzX7d6XMCGB9MSS1OzU1ILUIpgsEwenVAPjKmbd5vAHU+YV c/yT37GXj0H65/cC0avFmhe+vhaZmnczX/HM8/85SZIJT2IdLSp59SbXT//L8oun6orVnVzd 8131l0Rr/13sLZFm+nTF6KNjw2lLs4wS5pTJfhP05GNcNv58evJ18Z+g58Vzr4YsXfKYe9Nx Hub123J81xW/ZF9XKO6/0lZciaU4I9FQi7moOBEACbVQXaQCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupgluLIzCtJLcpLzFFi42Lh2siRotsnszTcYOUNPYs569ewWaze5Gux ZtJDNovLu+YAef9OMVrsnd/AYrF1fyujxfHeA0wOHB6H37xn9tg56y67x+YVWh6bVnWyeZyY 8ZvF4/2+q2wem09Xe3zeJBfAEcVlk5Kak1mWWqRvl8CV8e/leraCtbIVr3fwNDC2SnYxcnBI CJhIPJtb1MXIxSEksJhR4v/JHrYuRk4OYQEXiclzWphAbBEBJYnFXz6yg9hCAnYSNzf/YAJp YBbYyCRxY+5PsASbgJHEt/czWUBsXqCiy//PgsVZBFQkVixsYwSxRQXCJKbdfcsOUSMocXLm E7B6TgF7ict/HrGC2MwC6hJ/5l1ihrDlJba/ncM8gZFvFpKWWUjKZiEpW8DIvIpRLDczpzg3 PbPA0FCvODEvJbM4Wy85P3cTIzisOSN3MD6daH6IkYmDU6qB8Yz9hxXrO4X2clxsXvUhVuB+ puoCVs75blzHb5j6W179mpZV+2bNIgaFjruvOm9+Xqo5JZqvyo2PRf/gtC+xGmZf6z+n7W04 UT//beeXOwX2Cz2ri4XuaKt5XRQTf6XDF9A6OzuxNXefX8ijsCsTZp7kZOrnaUh+ncGodUtB r/r9md9Oj7LilViKMxINtZiLihMBoQIopRsCAAA= 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)(189002)(199003)(65806001)(356003)(47776003)(65956001)(230700001)(106466001)(8676002)(68736007)(54356999)(81156014)(33646002)(23676002)(19300405004)(4001350100001)(92566002)(2906002)(7846002)(97736004)(50986999)(76176999)(305945005)(229853001)(8936002)(31696002)(36756003)(189998001)(586003)(7696003)(81166006)(77096005)(2270400002)(53416004)(83506001)(2950100001)(19580395003)(15975445007)(69596002)(50466002)(4326007)(110136002)(31686004)(87936001)(86362001)(64126003)(19580405001)(65826006)(562404015);DIR:OUT;SFP:1101;SCL:1;SRVR:BL2PR02MB401;H:milsmgep15.sandisk.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD034;1:eRVkuCzrPEGaVl46KzHzQis527Ii/zLn6qzCf8EEKk/haqMpDHg1gGC6DTuBmZep/Z3JmS0ryoDrQgub2jwAcWRRWdcLmIPtUAGMjc0+OG9EXDan2vRswT/2u3LhX52OjQ6Fpw3QzpD5WruQTmZnmVdSjfmJkj+5W1P8CZZaYAkuyDpqo2sIameMHJ+xVSsYmq7CNc/7pGLUfa6k8qstnmRsr106AdEdfack1us8LE864XU5A5V7IoSpIlHsrJO8yR+VT8NO4OkGyr8RrYXf3cgZOqtakOB1MqLUBpW5qD47TzMsvB5yYUuYiKHXTtJwt7Ndbq8LxO/8q/KOzhV7aTAxxi0OMHLNGVJ2rlsEKJU1q/A+l2Z/3y5MqphDDe/Lj61sVAtlVswl9dStWPIUGebYzbQF9zb1Zei+IyX2yOAtE7bmVlfTSS8KijW8PdsUaI3ZEuFnmkRJUTlySfMJfHfVZhFMMfX2NjnmTUq+CAwsP8DZJ6zJCIJeNToS+ah1ho7ZTgx3ZEF1cYNYfHvNUg== X-MS-Office365-Filtering-Correlation-Id: 38550a3f-cafd-4559-a995-08d3bd857fa9 X-Microsoft-Exchange-Diagnostics: 1;BL2PR02MB401;2:aat5oHhYyCQSXdSsH9NRaESGJxZt+4HlCs9rLj6iYRmDH05k+nKUNpEI1Bv8zmladHD2Zuw1S3lpZUtNL1jHOPPSabMYFkFtdpHKIDgyYOR+4WgEhTFoSRBBxJVuAiP40b86mX9ehQbhWXJ2jPJyOBYTuiIQR24L76UkPXcCtAfSoeuh8Z7JKWTNhTwUZhWi;3:iaa145qSb9RDnRoBRfyt/wlaNUUueDLuuMSEkiaqMrjuuExed6crsneTaEDP+0qW5HvRVCBcYUCnn3XkYupNGgANUlPikJty++CdTYKiXp6AfmCAzF2Gnu+3TdiKlqAqfwQDD9f8zsNnxOoCgPJmwTWD0zln0Hyxd8LQhiNVBzwaGisL23jxe/OULmG4kivJPwzzdjppfG7DSFojtW3TAOfFs777mxWXQaNxDtcrVUYjG7FcB8zx+jQI7J2tzJqImWwWejL4t0m7rUYp42oymQ==;25:/ow1fOB7cLHIUUQW5l7mk+9lHgQjrTyA/ZMgCdwhw36ep2h+yat6+ox97psB8xt65G4BE8ieoVLO9vgQpHFX6NugXWrxYA9uW4/98co5QUqLkpAitow/+YXzRycqWMUj8+FSgAoAyrdZOC7ld+pZL4LjdR/BaA6gjHOsytzaV2v38tarNGDItYnLTgeYVcO6cA18fnKvfuZnK6ihr05yFvrIou6TKa7gaFnLFJqijSj86+2BDCvu0L+NjF9eCcilMh3a6DBd5ofbC3Ec0jgPOB/Wemu6F+LAm8WF7eiWd3CkziwbXVNxUS1aNJHjM/3inj39M3P0VR5mPNf8CFeVqFMfdtuAG09CzOLSyRkhIuQ6zLwBHwQLvUY7sNfYBec7QXvFu65uA9vB9xDJugIi2IZPhMAOZBG8Riu9FO2ul/E= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:BL2PR02MB401; X-Microsoft-Exchange-Diagnostics: 1;BL2PR02MB401;31:6ZGSCti4m/0gesZJMP8bczA9Tym4+uPxLZ3b1qybPV2hpIyfs4fUqHSUir646t1byazCNmveHUXEHS4eLgKbmNwu7RRiJd40zVASHBHXPgab07NHzcrKauuA9ivtUXKo3uJoJHLtScAv6owNduTbhnfuQlKOmfeCzyNH344hGx8ZJCGlPhYIcyfGACS0xlJwCAGE/tfnkfjEjPSrdB7tCrT7hWxoCrGmpWcNJ4tXw5k=;20:b7K15mQHJRNjeLHvXyajcZwv3CE450ORbokNU68N5ruPcrjLUfURGu0SIZhXGVEygfsRFhuegbNgbojVDV4P9WTyQFSyOoOV4stYknuQ+pdGxms45lczfdaMOs9cMQWsML2e63C+uj5F/acMRtpu8zrays8oje6/KO/3oAXxkH1d4eLqWz8I1zUxiwOUJpVPOCqh3TJCLx2Ef4FN1u8bzG7Pv3u/YUL9UT9lPvX5sCohi3tfodIe9cnUgJNQ7tFD1pRsCvUWV9jKjqswXybS6PFAJMmr2dFCwQHGhnasOvvujgQDoKcPvdCYTSwh9p3aSBEmhUEa19l/vud8hChRhpruvQs/eOM3r+8FmibtEio7rDiPx/ReV8f0L0hF3zUBjz3saOUkYNrPIOTYwIJzxjBxbrRYQlSHapEhwb/WrbXClXOssrl7a4PZbOHjmcvpBIU3dJlZEESc4SrhZ8wK+Ks19u9WyCbLYP2rZOMcWjKJ6NowF07rHP2zgjLwZHvl X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(42932892334569); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(13018025)(13016025)(5005006)(3002001)(10201501046)(6055026);SRVR:BL2PR02MB401;BCL:0;PCL:0;RULEID:;SRVR:BL2PR02MB401; X-Microsoft-Exchange-Diagnostics: 1;BL2PR02MB401;4:ZNXoXbM6UG3OtWFaL9RREsJGuCv2ZcgKhd/AizHzXuk17HhO/RGRiE/HMeBl3i28rgWY4Pl2Zh9aLVtkaByh9AlRAPYmBYTR7wJKxK9XFt/fRlUzPPREyJaxUyeQuNULLh1qPLuBVnpxMQJyQwXRfFJ5Ak0TOCGsPFmZm0etByd2eQmcu52GHF2EmL8CNYLWOmDke2Lm77QROURh+RQ/oGTM57aQkifw4X8WigflrLHA3yOqJEz31UYfrI2QWTApurX3iu0tnrnF44x2UF8HqKEILb1YU/ZiMNa6GXQ8UxLpEcknuBCQ0mE5HU6j8uhs6VVJvRl+ocZ2m5Udbuoun9WjwXkChEEPmMLb4nWMLq8kro1Rvyi/ZwmAbStaHKIPb1LJmX7MVB0DJ9nrEHYPLEMWV15ajsk8pA0ExsLfH65VxkAq8Df8oHsHANbNrVizjYm2QCTaZuUmS/ijqCb29VKInq/Rq4lD5RjzblYan5BaEuvgRKi5AdAFjRadEzlb X-Forefront-PRVS: 0025434D2D X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTDJQUjAyTUI0MDE7MjM6ZUtLMXE3ZGdCend6NE52NE81eDdBNGgvZVJZ?= =?utf-8?B?Qy9rT3o1eHM5QWpibVdWdHVqTTRqcmNnbGtISWJHUEZjNEVlZ0FoUGFqU0kw?= =?utf-8?B?NExnUWlMdEk5cHRvWmJDbXZoeVgrQTNVanJhV00xMlNac21mZmY3ejN5ODZm?= =?utf-8?B?MlErWkpBc1NGR0FuRmdhWXJ4cEx0Skt6cXpvNlJuQUFTQTNuYUFPa1c5Qm9J?= =?utf-8?B?LzVibEtITW0vY3NlZzNIYlFLdVh1VkZtTElkSHpQbTFjWEY2a3N6cVVOWGZF?= =?utf-8?B?NStJSENQdXUvVlczd05reWNMcEJyajZXbUtnNTZhdGtXbkxLdjFPOFczK1Zx?= =?utf-8?B?V1d6QmoyNTUyaGJGTmNIMkFEWTAwQlcxdjdFdzF2clVFQndvOEh5dW9BVnFO?= =?utf-8?B?Q3YvZ0VMbU9FT1RZTW5PUXhpTURYdjBqNlpzSTl5cmhSSm4rU0xsUDRlMEw1?= =?utf-8?B?THNsakI4SHlpWk1TbEc2NlV6eVJxaHFjUHdzUmM4cC9WOXR5WDArSmVORGxo?= =?utf-8?B?UWVKNDhCV01McmFoZThqbXBVenRjNC9pTVo4VE56MmxUZk15UGR6aTNOV0hO?= =?utf-8?B?WDZkMGZxdGh6V3VJQ3lRMzArcnp2YzY5SllCcU9yVGJadm1hdExTeFNKdVMv?= =?utf-8?B?c1BoOXhPYkp6S2Q2Vm1nM3d5ZW9NVFJUcjNFS2E3OURNY3E3Vm45ckkzeGRZ?= =?utf-8?B?QzNVWEczN29ZNG1udlhUeEF3b0NOTzJQY1lORkxtV2tMenVFZi9relpMTUV3?= =?utf-8?B?cUgxeXZGdytGbmtMZVR5Z293czNuSVVib1hLYkVBSUxaaWM0QUFqL1A2YlZk?= =?utf-8?B?SEVWYlRvTk4zMlZoanNoQ2VLQVI5dmtHRWoyNEI0cThxMndCMjhjNW5hcmpz?= =?utf-8?B?Z3NObXNJSE5ISFpIWDBteUJudGFLcFJhR0lOdEFXaXpGcHFGRXBJOGo1NFBG?= =?utf-8?B?d2dTY24vZ2tyT3p4eXRJcjcwSHBhK05FUzIrcHJUYUo4RWVZN3ExOVc2TC95?= =?utf-8?B?bTMrNWhPUXdJQzFtNk80c2lxeDZqVTNnd0h2cXg3L2kzZE15SzdSVjBkVm5m?= =?utf-8?B?QkhkNEJ5RExFWnhaci94U1BKWEt3ZE5kRVdKRkZyOHZUZU4zUVdFbWFpZW9J?= =?utf-8?B?aVlhd3U4NXlqZDF2eFRmc1NJbmZJWmV2SDlNUHVobnhoZGRCYlNLZ0ZpelZo?= =?utf-8?B?dzZBTjdNRUxjK0paamJpZjJxckpiWDRyYTFWVlk2VUxuWWlZOTlMWnA4Q2Jx?= =?utf-8?B?bGJKeWJJS0tXT0M3eFliYmo1NzVoVzRjTFBTaTlKeDFYK1lRYXFNanBNQ2dR?= =?utf-8?B?U3FYWVpKMkttOUw1K0wvc3BuWHdaNDF6K004QitycXh4eHpnY2pJeFhYSmZX?= =?utf-8?B?WlAvMnROUHExZVdidGdIcC9pSk1neUZjNlBpSjhxWjAzYnZEMDRzZTMySk5z?= =?utf-8?B?QnBudXA1bkNXM0F0R1dVMjFkenVWdURZblhYZGN5K2trbnZMdGE2bzRKWXJB?= =?utf-8?B?enRQMEdDOFRVb2ZsUitrYmUyV1FMZFJNYlFUamtrdlhwSTVrRXNyMVYzMlo0?= =?utf-8?B?R3NLL0szenpSYU4rdlg0VUR3cUM0cjRVWmZucnRweFhnaWI1MUdiTHNQZitZ?= =?utf-8?B?Q2ZEYitJTFd4ODBxbnZiOStHV29GNlpkL3B3YkJMYjZBdjhRNjBIdmF1Sk5D?= =?utf-8?Q?BFYG7D9Wexair5qrfBFNvhADw1jWN8LS24+Yp0?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR02MB401;6:MVPfGm2U4TNIWC/JPL4k9FN9il0B47VZNwI2xZARqatZcdT/Gtq+IarJccMftGbIAog6iYtU2w+BmVdeY5b6LqHG7gZFRVHMpNCAmaK3wki9LEFfY4zULKhFF77raKItkN8nrknI3ufX7zvGYbtJG5ESN5ktFJumL2UpYjRsxV1VOo7Ku8L/arMU96QOCqpT2lgrQzc5sfmHPjNvpsExTCiZyhf8v8hxD68JMh66o7Pa6BYV69XTz0zMG0840p5exdZDzJzF6NtkJg69/9PJiZtvm25QjKc+goGuDOpydiI0EMJKLhi3qLv3xtDl1IZabymoOv+eBxaDMq+BI8SCdw==;5:4KfyP8PX2V+q+7m/NvQ0KkizuyzxmrKqEPVP70FMS0do1h2BnLA+1Ks3Rp3+poitSdfqmo+9tniD0VnFwZpqk2fBUIQ2WM0fiGDFHwO0apnhlexkZmr+obArYZnr8w/hga0zHTOL+b1RElD/U1YT6A==;24:fgLwLHUXAQ2akS7sb+9R0gf0TdgdgnImTrscqJcers1+fOFrqRh+KqMs/xxWZ7D97f2byRKU1ud/07RD3k5KRcB9rHMlKqXsypc++DC04Vw=;7:eO+eUBO3+I3XMDkdPlYkgqR3MFRJHh6BP9MFpc/SohtePyn6vCOEv1fafQUEjnUhj0MdMKHhAOE7UZo4jGm1+Qwhu5KZnwa7Cvebc54LeqXtxl+PqHf1JqRPuEU+V4MIuW1/ZhtywQGThZKlagVSW6xEj3d0JhsEQ8oZbd+q5Lyo5FrsbKfOK1ROlwBMklyGZZ+k3rSesapcaG05ftpGKPL7aE3pVpxrDBYQeOfkO4exaU5Q73+JYVgqVyX1ZKVw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BL2PR02MB401;20:gYEVyDc93Dq030PK/T/8KvK489NKdgeSB4VuXuxJgi/n32xy9I6F5b50EcnZpOHwXysGu0I1/GtRb1yVHwKEv5I7mC0kFbgebwpNktrYEjVyy3wIA2w7ZOf2LkBAU4pjGfd/85qMlF0VqmbrJrJQUg27KLUAJ5lJO5yg4hXoyp61OzYXOVdQIFR0QDLKRKJgw3KCBOcMU+OrlqlD8D7+R0ab/+B42uf6TDRUQVAAw+sv9mF8bNATWCtagwuU6jDo X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2016 23:09:04.2961 (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: BL2PR02MB401 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If delivery of a signal and __wake_up_common() happen concurrently it is possible that the signal is delivered after __wake_up_common() woke up the affected task and before bit_wait_io() checks whether a signal is pending. Avoid that the next waiter is not woken up if this happens. This patch fixes the following hang: INFO: task systemd-udevd:10111 blocked for more than 480 seconds. Not tainted 4.7.0-dbg+ #1 Call Trace: [] schedule+0x37/0x90 [] schedule_timeout+0x27f/0x470 [] io_schedule_timeout+0x9f/0x110 [] bit_wait_io+0x16/0x60 [] __wait_on_bit_lock+0x49/0xa0 [] __lock_page+0xb9/0xc0 [] truncate_inode_pages_range+0x3e0/0x760 [] 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 Fixes: 777c6c5f1f6e ("wait: prevent exclusive waiter starvation") References: https://lkml.org/lkml/2012/8/24/185 References: http://www.spinics.net/lists/raid/msg53056.html Signed-off-by: Bart Van Assche Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Oleg Nesterov Cc: Andrew Morton Cc: Johannes Weiner Cc: Neil Brown Cc: Michael Shaver Cc: # v2.6.29+ --- kernel/sched/wait.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c index f15d6b6..fa12939 100644 --- a/kernel/sched/wait.c +++ b/kernel/sched/wait.c @@ -266,12 +266,16 @@ EXPORT_SYMBOL(finish_wait); * the wait descriptor from the given waitqueue if still * queued. * - * Wakes up the next waiter if the caller is concurrently - * woken up through the queue. - * - * This prevents waiter starvation where an exclusive waiter - * aborts and is woken up concurrently and no one wakes up - * the next waiter. + * Wakes up the next waiter to prevent waiter starvation + * when an exclusive waiter aborts and is woken up + * concurrently and no one wakes up the next waiter. Note: + * even when a signal is pending it is possible that + * __wake_up_common() wakes up the current thread and hence + * that @wait has been removed from the wait queue @q. Hence + * test whether there are more waiters on the wait queue + * even if @wait is not on the wait queue @q. This approach + * will cause a spurious wakeup if a signal is delivered and + * no other thread calls __wake_up_common() concurrently. */ void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, unsigned int mode, void *key) @@ -282,7 +286,7 @@ void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, spin_lock_irqsave(&q->lock, flags); if (!list_empty(&wait->task_list)) list_del_init(&wait->task_list); - else if (waitqueue_active(q)) + if (waitqueue_active(q)) __wake_up_locked_key(q, mode, key); spin_unlock_irqrestore(&q->lock, flags); } -- 2.9.2