From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756048AbcHCQf0 (ORCPT ); Wed, 3 Aug 2016 12:35:26 -0400 Received: from mail-bl2nam02on0049.outbound.protection.outlook.com ([104.47.38.49]:15213 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753408AbcHCQfW (ORCPT ); Wed, 3 Aug 2016 12:35:22 -0400 X-Greylist: delayed 72820 seconds by postgrey-1.27 at vger.kernel.org; Wed, 03 Aug 2016 12:35:22 EDT Authentication-Results: spf=pass (sender IP is 63.163.107.225) 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: ac160c71-eb3ff70000000e72-75-57a21bb9dbea To: "mingo@kernel.org" , Peter Zijlstra CC: Andrew Morton , Johannes Weiner , Neil Brown , Michael Shaver , "linux-kernel@vger.kernel.org" From: Bart Van Assche Subject: [PATCH] sched: Avoid that __wait_on_bit_lock() hangs Message-ID: Date: Wed, 3 Aug 2016 09:35:03 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHLMWRmVeSWpSXmKPExsWyRoxnke5e6UXhBlNfcFvMWb+GzWL1Jl+L NZMesllc3jUHyPt3itFi7/wGFovjvQeYHNg9Dr95z+yxc9Zddo/NK7Q8Nq3qZPM4MeM3i8fm 09UenzfJBbBHcdmkpOZklqUW6dslcGUceDuVrWCpeMX5P0cZGxjXi3QxcnJICJhIfFy6kLWL kYtDSGApk8SH5gcsEM52Romn//aywVRdunKDHcQGqmKUOHuGD8QWEQiS+Hewgx2kgVngJqPE lJ1/GUESbAJGEt/ezwSaxMEhLGArsfOXDkiYV8BO4teEm2BhFgEViVV9RiBhUYEwiWl337JD lAhKnJz5BKyEWUBTYv0ufZAws4C8xPa3c5hBNkkI7GWVeNlzjA3iHHWJk0vmM01gFJyFpH0W QvssJO0LGJlXMYrlZuYU56anFhia6BUn5qVkFmfrJefnbmKExELhDsbXt70PMQpwMCrx8EaI LwoXYk0sK67MPcQowcGsJMK7QRIoxJuSWFmVWpQfX1Sak1p8iFGag0VJnPdi9McwIYH0xJLU 7NTUgtQimCwTB6dUA+OS3n+eEVmTNyxKS+Ca4u+Xk+afsvH09bcs+kpnX325wR2rrnHxZ2V7 jtqq9oBf9aqlkRE8/VOnxHnvZbhVdrFBjqPw3eXYq7MfFAkf1Dg8YY7mOs61nGHm935nSfz6 5rwjZ21jnKi/Vv29BWvaHfb99fqiwC6XOCVqo5n5zmvL4588OPg/KVWJpTgj0VCLuag4EQCi zJlEgQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrGJMWRmVeSWpSXmKPExsXCtZEjRddSdlG4wemHAhZz1q9hs1i9yddi zaSHbBaXd80B8v6dYrTYO7+BxeJ47wEmB3aPw2/eM3vsnHWX3WPzCi2PTas62TxOzPjN4rH5 dLXH501yAexRXDYpqTmZZalF+nYJXBkH3k5lK1gqXnH+z1HGBsb1Il2MnBwSAiYSl67cYO9i 5OIQEljMKPH20QRmkISIQJDE2SMTmEASzAI3GSUuzO1kAkmwCRhJfHs/k6WLkYNDWMBWYucv HZAwr4CdxK8JN8HCLAIqEqv6jEDCogJhEtPuvmWHKBGUODnzCQuIzSygLvFn3iVmCFteYvvb OcwTGHlmISmbhaRsFpKyBYzMqxjFcjNzinPTMwsMjfSKE/NSMouz9ZLzczcxgkOSM2oH4/WJ 5ocYmTg4pRoYV/9NbfmRa7W6Uzb2jfMhtkfKcYt0/1+b9Ohlt/5exh7+sE5v9sW380/pGATv rLgr/arM4brb/SVFlkbXA9wOWLezdAv1XXq8/MTZvDPtnu/cPBOreRx0q/Q0J5q3mgpVX5N+ +aFLh/3H3aMWc9doVR2x++h5WPmf48X4o0KzIz4r3WDR1M1SYinOSDTUYi4qTgQAeiWZW/kB AAA= X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:63.163.107.225;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(189002)(199003)(54356999)(50986999)(97736004)(189998001)(5001770100001)(23676002)(36756003)(53416004)(106466001)(230700001)(229853001)(33646002)(8676002)(81166006)(81156014)(19580405001)(19580395003)(87936001)(4001350100001)(86362001)(2270400002)(7846002)(8936002)(77096005)(31696002)(50466002)(64126003)(305945005)(2501003)(7696003)(69596002)(83506001)(356003)(2906002)(586003)(65956001)(92566002)(65806001)(31686004)(4326007)(68736007)(47776003)(65826006);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR02MB1311;H:milsmgep14.sandisk.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD055;1:L/T37tCyWL16N95zmH2XRhhzAcV0aOmbqite5omU0mFYJC3T5KiSegMXTzOXAJVe3KuvG9eqGR5HPpHy9TCOKmRK5c8wfQYAzn/n6ZLwb4Y7y1FHrvtx0fZRzs3ZrGPmaFeLBb2Hf9aXWQonXvXoiCK2Z3nrqoOg/JHjBVkDiwOHrNerC7ZiGfG0NIoR2xSgdpWFFRq4zuVkPjcuZ9YOcX82gZPn7FG1JQ1H3pQ91sSXMybS0typtuDSXR/W5+QO2b4txBsw7ecmGf4DrImctvOISAD4HpYJR1VX2/ggP9we+vcLjgptK/+ydgmW7nHWjWIqdX7x5nnvI7Md+iKab7WYOvSyLXvWAV6mA4wqsmbibum4pwVqsFMcM/uthSFkxoj608wjXSJAPsGFy+xewrMCG+5RKZ8IsGXfN2S/GUVOegU+QNiqy3GxBfAfV7AYlADmaXrpkOjy7KS9qeEFSF0pDcqINP2Of3KDRmGwTYB+EQ4xcxbZKszNpHVsaCX11Q+VADMotbPedpO6NvNLlw== X-MS-Office365-Filtering-Correlation-Id: 2299de04-542b-494c-3246-08d3bbbc2461 X-Microsoft-Exchange-Diagnostics: 1;SN1PR02MB1311;2:HUgXxjRFa4M2khXe18+/E04c1FNBXJ0qrxZAgZIOjuRiN30Dg0B0KHEzkv+1StGrrLh4JnpuOT53EcUEXvj+Tr4dwIzbqc0TdBy39Gyzxo9e1D9BKB0rBmNKrBxK8HB3VVZDqIQHcaE6fBpvjF9D75daqCnDT2XpdOxX0Rur8uOSs1Y5Xj8F120jbjfAQ1qp;3:QI4KIJA7JKS/zxZKvPFV7L/7tI7Bl2G9UYU/Hntu7UyPh9fsGpFx1SnyzokngsmsGY5SzB7F8QwfcWaA88d73YYp7jQuiyc+384AoloVcyxCY/XiswxrNLkIDEkFWhp3n3Aaru0Two3s9NVrpB4OFTJFohqCMm8p9uFfN+PwE2xNe0vaQX3aBTfK/23bVBpZV/2o10fJ3zePtd/7XwSqznVn0aDtnoPJ5Tlh5VbQNZ6sMtaseU/rQJw9jNiMCG8FghW0jcTkf5gY7eGDmL/Bbw==;25:QHOADYBdld+cw7jpkCqNQavWb4bmbrtqzKShgferBL88xoWiFAfF6ur0rysJseTS74iq+nCroVvlP5Y2aQAj+L3QCmmuq513vSIKKN+bzk5StBtu4L4ssuVQnz9+aUn7lO2hXyOwKH6mnlz/86E5W5LmAhXcXP9huF1P56t0aDIgZ5aK5uNiGOUbkZVReUZdMp/EnFc8Gp10MgjtgtvA95CFCKKZeUOJO8cwynw3Vc0vqMILoFRv69hfLCBLwY432bSjlqBiBbxz43SLwwhbsZzqnniWyZN90Jsf300Yb6vL8cG2dbwXiG6H+AiZO3KJNvXyZQDZLarWjZCAjOpWyULKYRG+MhoA8x02A4qXUTq2eavzOS1KAAH4h+MLFT1FUvjZoXERVqS2MtPpUo1LF+yd8/p82spiWgnr6TIhKis= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:SN1PR02MB1311; X-Microsoft-Exchange-Diagnostics: 1;SN1PR02MB1311;31:lBI9kq21du5eRY5zl3eQ2egTohQ+jxf+ce/2N4wNSl3xY66WyXswHbMF/8iJ8q6eXUJ6+1lznvja6Vv7HrhKd9BBSOMLUhEUVQ6AsSLthUay1s//O7FRtiNKkccCBL1LILCU9plFcHJqxyVFuINpokwB4aUJKLDbLGjTT6nDv0P22DItjxSkn8hkomzaIoXB9PYTYyo2W62FrbEh4nUUvxsk8NoqjPlRQYJCOpVJ5HU=;20:FpuUPerJ6ft4Iz5E7Jxt/w1bHjy3P5VrWvEgroTD3FZJRGiP9iwim4XJsnO+ce4US7wj3LTKQr6QbutfPk+3UvRlovp5+XbGsC/rjUbn+IUDKFJF7k3vff6qlpp/qG55/sWpVoIh/fCwSy7LNwI0gwpBXVvHiUJa27q4DvYxb7FJx7vUwHsHGuEn5ssRJFokDxC+Rz2WjVgfz7qGj68sSnFeidDqxkl670tRXOfOBjOWEweYtOqPLSuronbuaE0vRdEuZsyOfNOcH0AMwVa3Z8bENvCUeVYkolgDPs9lvIewTA/8w33nY7CiTf6TlXMBFYBl7J0eTU/yhsvYzLNdCw4Sn6c8JdAG8rfOImFWG3KBqzAJXDWmDSOtChN64K01rDab8SRUjNUuFHJ0qwp6TqIp7lSzh71y6ZxY81tXLK9ctUzx3H+IHrUYsVj+D2CatwEKftBtZY9LYc3RYQbyPJsgm8DlKIvcGQMY3MBuCDG50j3E4k8aFgKi24wo9U3N 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)(13016025)(13018025)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:SN1PR02MB1311;BCL:0;PCL:0;RULEID:;SRVR:SN1PR02MB1311; X-Microsoft-Exchange-Diagnostics: 1;SN1PR02MB1311;4:PvixWToskdhxqF5AVOSsR/k8cwRzPccLPDOC1by6slj9T5C1vz3WeciSCCUkEz4DVIJfJ//zcbqFjPgCmUcE23EgAtGI+lvzM2pLAzO2Ftu8AVpQJVqf67wv91aHBi2qSbuHqsD8FwXmVHTo7RCxx4zrvVUqxMk5cNhPUFiBXuBHYD3dgPeJxBKZUPNddlo4qHFVDeQ8KZbnlgUuwox2MIksP0ZSLfS0GghdyZ709Zu/v+afUGGgCgMYBecJBhXTwLJjLm3Ha+El5dRvpq13Zr6OMLiOgjSuk33PEPJSVEkMLA/dX223ry0CSHcJkKFyWFs8X4RTufWao/pkg4KiBInLruoA2r1J01+oIzbBuszdfNgyrRhhsaWIaKhiayct2r7Ey9QkgVsse8gvfYRBsJK9OWMJoz2kcyPr1wshxalJoeRXp54hDNQuSBPkmmYLT3acmWtgQG+MUE0lCcCiZwr4qkIMKF/TE9rBGIHTHy/68FpvXzFupxaR/suCMtQg X-Forefront-PRVS: 00235A1EEF X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjAyTUIxMzExOzIzOkVlR0Y2WlZ0cVZqZXBHNFozUkF5NlVoblNn?= =?utf-8?B?NXJkQXNwUU5RUXVKUEtTVVpkeTlEY0hvdzdBMHBpZlBoRTB3bzNmdGdmbEZo?= =?utf-8?B?dUNJbkJ6NW5RWmJMNHZOV01pRCtZaTdJc2VjMWc2R1NPRkNDK21BWFNOM05Y?= =?utf-8?B?emtiTVF6SE1WQWhKZVZkNVRxVjZRcFJiVHdwWmEvekkvR2ovTGxPRnRLYTBo?= =?utf-8?B?bzhOckt2anBtR01ZMkdjb1FmdHhqTC9RUXBQUGNFa2xtbWFzVjRZRkxqcUFt?= =?utf-8?B?T0RoTGZrSDU3RXpPUjAzdHRSK0lkaGtFYnVUTDNqSWh1cFBaV2VvQ1VScHhT?= =?utf-8?B?K3AwSjRSQ0FuZVIyZUZzUmxMa3IwVVo3LzBRTUFGY2RtT0NiYWdEUGNhVFRp?= =?utf-8?B?bDZxTjdrTEYveDNTL3lNRmIydG9iOVlJMlFlMHFmN3J6M25BaitlR1NQMEJw?= =?utf-8?B?dFFmSlF4TExTN1BGa0RWeGNwcmFEY0VYdHhnZG9RWTdDbU1WdS9PUVlSamxW?= =?utf-8?B?MmpZSkpjL3V4MmFmQStuTXFTZ0RmNW1HVWxocm5zRWFiWThZa3hXdkNjcnNC?= =?utf-8?B?VklZQ0ZTQnA3azlXSHRqSTZJSm1JMC9nWjc0WEpUQVNDWVIrWVhZVWYwOWlF?= =?utf-8?B?YU5iSXZadEpxVGQ5ZnRGRTUwTjZnUGRKSFBqczRLNHVVaVlGUlkrSEJndnNi?= =?utf-8?B?RHBVRVNjYnFWbzVDS1dSZXZRbmovZEN3RFE4YTB3MzhTK2FsMGE3SlpHMDA3?= =?utf-8?B?Q1l5aCtKaFExcGZvTDZKVGtPMEtxM1lTc0FQMzVPK0JzeEEyR2JhQzRZQXJN?= =?utf-8?B?NjJtQVJVSURRMFh0RnBCS01odTNEc1RTUWd0U0diaW5nNVlRRTJlY1hBSzlr?= =?utf-8?B?QUVIMzRNZkkvUjE0SmNwRTl0Q1ovcDJpQW1oMkRuRngrR1F2NlhlNmVoRENq?= =?utf-8?B?encxS0srYjN6elNLMjcydjZtTnBPMkJGeks2SzdCcFdJTXFaYUlWOFlyZmJz?= =?utf-8?B?RzRXRmJleStERFUxdWEveVd2djlSVytZalNmS1RFQkxoRUtsYVVycWJqQ0Fh?= =?utf-8?B?TkhFVGY5QjU3eU0zTW9XSytsVEEwTFFjTlA4d0hkeEFiM3ZESnRvTDAxaUxO?= =?utf-8?B?eWtrQmhlSkQwd1d1Mi9mZjJUVjBuTmtKdVpCOUhzaEFUUjZXLzRzTEJ0bWh4?= =?utf-8?B?WEFhRWpyTkVTM1dzR3ZPZDdqSjZ4NEdsdUg2cUNNTzQ0OWhGOUQ3dWhkbEkr?= =?utf-8?B?Q0djV2VsRGJtOERjOU82RFozVUpYT1lhbFJDSnlYRTRlb1p4YWN1blM5Z0V6?= =?utf-8?B?S0FZeFptckxSQStTcFNyVUNrSmdqdmxtbWVtbVllWHpUR0RpbElZdzAyRnBU?= =?utf-8?B?NDhiYkVaQ3gvRnFwTWR4aTBRd2RWS2lrQllUaXBuOGdjeW1PWGlnMCtDZktV?= =?utf-8?B?VE5EemF4MGpBdTZGanJHenltN0twcHZFUEZPTG1PRzM4UEZrRDVUV3NycDdx?= =?utf-8?B?Y1FiSnlLbklGdVE5U2lNOHI4bWFoeGxRRzhWSG9DNFdrUHBaRnNlVVF4WnJs?= =?utf-8?Q?x+g10j4JkRrIP20N9Ukj62dmrjo5c3l8zJbHWHVWAXl4=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR02MB1311;6:m6RubAEwnpry/v2pGQDBegy27iGcQvSuYrrGkBA7/MoDskqgA7fmANbcbH7k22oiUhyHPRyqHklwe5klc4JgxEpM4KVVPd8SKRSMxf/x1OT+TLgyrMbT7pU1aQ8C0WeS+QdwfWePNRuevWtMKfWZ43DOScnkHslY/QrgThnNQrks48bp7f2XGOhwqZcbTPGsBwY+U2fWpTENOAPA7DwrB7iqt/625C3rqXacM4jtZ8QlQRpW5L6O6UEr1uqk84CjQyyxU6UfWKzQVTrGuXX4l256CNfP1P0ErNUnsEP9mvAb45bXBp5zcqG8zBO/QxnZ9TgwY/5zByncPhgAIzEqXw==;5:P2H/JmZuwUmVJhK1yi4zt9qlGl7ChO0qPWTNtucQfmDAYYPRJ3JH3V0pcjuarloUJvxQWE9755H8Me3hLfd3Em5BcaAldbAfaGCV8jX4uv7gp88Bq0HDglEl0ZpA/dXr9zRzzJR9cyZHqxYqMrPiuA==;24:KhT2we6bkPTbydJVwX595IMFMo2sQtjEZ7BPi4otOgwG3qkZEvY3GF5Byulhg1ZxYUEws/N/eumyJkPtwqPtqo9HnhkBvJzpoOn7ajuHY+E=;7:oJgHt+OZ6MCE7Rd6ArPXceTmGlhqXqhpWmHMom1M1qd8kfPbATnqi8MIIFNdf3JDQqvke89Yxw9EKhkQ6Tb8A48Eb2H5Ax5sMC2SCP3LQ4f4+xL4uQZxwTgOLqZdjB6Jg7qATHwcSBsI8wDuU6buJHz3+AoKmxEM7jcdr6VSkJH3XDB2ShcvWYEgAxC6vuHazGEazjQg1+SpSMvEGHJSRJ0ssGVvME2TWAG7H49DQTL5LEtX6+YsfZ/+iNAHxvgh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR02MB1311;20:nL1LjE3vFvXphXLNEa96z9SO7i60+m+tH0lTw5eMaBNWt88UM2ImMmvdRP8hBBQ5lC7hyBtVknQ+nJIxPqM8LAS1nDu6smbh5+hASromZbhfwm+xeIDPRStoqGGxXpw1t+SpPpZ+JX+MkB/U7GmBSK7jdXN1t0Jd1lYUWbXcj7Inx/9wH1PymgRH4nar6fXO2o7gj17QRVeExijwgym1aA5T2COlS9rH2FnKx/If9Ab4SzFsmTkIfFMmR8Tzz/gJ X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2016 16:35:10.2695 (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.225];Helo=[milsmgep14.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR02MB1311 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If try_to_wakeup() reads the task state before abort_exclusive_wait() sets the task state and if autoremove_wake_function() is called after abort_exclusive_wait() has removed a task from a wait list then the cascading mechanism for exclusive wakeups in abort_exclusive_wait() won't be triggered. Avoid this by serializing the task state change in abort_exclusive_wait() and try_to_wakeup(). 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") Signed-off-by: Bart Van Assche Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Andrew Morton Cc: Johannes Weiner Cc: Neil Brown Cc: Michael Shaver Cc: # v2.6.33+ --- kernel/sched/wait.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c index f15d6b6..93d1f50 100644 --- a/kernel/sched/wait.c +++ b/kernel/sched/wait.c @@ -277,10 +277,17 @@ void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, unsigned int mode, void *key) { unsigned long flags; + long wake_up; + + /* Serialize against try_to_wake_up() */ + raw_spin_lock_irqsave(¤t->pi_lock, flags); + wake_up = current->state & (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE); + if (wake_up) + __set_current_state(TASK_RUNNING); + raw_spin_unlock_irqrestore(¤t->pi_lock, flags); - __set_current_state(TASK_RUNNING); spin_lock_irqsave(&q->lock, flags); - if (!list_empty(&wait->task_list)) + if (wake_up) list_del_init(&wait->task_list); else if (waitqueue_active(q)) __wake_up_locked_key(q, mode, key); -- 2.9.2