From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755265AbbIWW24 (ORCPT ); Wed, 23 Sep 2015 18:28:56 -0400 Received: from mail-by2on0075.outbound.protection.outlook.com ([207.46.100.75]:33358 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754680AbbIWW2y (ORCPT ); Wed, 23 Sep 2015 18:28:54 -0400 X-Greylist: delayed 974 seconds by postgrey-1.27 at vger.kernel.org; Wed, 23 Sep 2015 18:28:53 EDT Authentication-Results: spf=pass (sender IP is 63.163.107.173) smtp.mailfrom=sandisk.com; fb.com; dkim=none (message not signed) header.d=none;fb.com; dmarc=bestguesspass action=none header.from=sandisk.com; X-AuditID: ac160a69-f79f76d000007db2-48-56032432efba Subject: [PATCH 3/3] blk-mq: Fix the queue freezing mechanism To: Jens Axboe References: <560323AB.80900@sandisk.com> CC: Christoph Hellwig , Tejun Heo , "linux-kernel@vger.kernel.org" From: Bart Van Assche Message-ID: <56032432.6080006@sandisk.com> Date: Wed, 23 Sep 2015 15:14:10 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <560323AB.80900@sandisk.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrOLMWRmVeSWpSXmKPExsWyRoxnka6RCnOYwcTrRhb/9xxjs1i5+iiT xeVdc9gsfi0/yujA4jGx+R27x6ZVnWweu282sHl83iQXwBLFZZOSmpNZllqkb5fAlbFkzQO2 gge8FZf//mVqYFzM3cXIwSEhYCLxbUdcFyMnkCkmceHeerYuRi4OIYETjBLvdm+FcnYwSuyc Mo0RospEYsfJzSwQiU2MEt//PWUGSQgL2Eps3vEGrEhEQFbi++7XbCC2kICGxKyGq+wgNrNA ncTaBavAatgEjCS+vZ/JAmLzCmhJXPt8DSzOIqAqsex0G1hcVCBC4tTZt2wQNYISJ2c+YQG5 mlNAU+LFU0UQkxnIXL9LH2K6vMT2t3OYQU6TEFjFKjGj/SITxAnqEieXzGeawCgyC8mkWQjt s5C0L2BkXsUolpuZU5ybnlpgaKRXnJiXklmcrZecn7uJERwdXJk7GFdMMj/EKMDBqMTDa/Gd MUyINbGsuDL3EKMEB7OSCK+oHHOYEG9KYmVValF+fFFpTmrxIUZpDhYlcd7eXJ1QIYH0xJLU 7NTUgtQimCwTB6dUA2O7j5d9von1D/acsDVigneXzzw7d9l/d6+uE+zcEefiGF7rqmd92vjh 1p7ytuVzhGau8DGe297MptH9gdc0NC1iG8eSLS9rkj7VRqxaYRTxRHQpX+jfXx2aHv+e+Ux7 +KczoCQqcdppF55vuW8zuWUl0wwCX88QktaQuPyqppVzj/XKpkCXECWW4oxEQy3mouJEAMj4 o9KKAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHJMWRmVeSWpSXmKPExsXCtZEjRddIhTnM4FavhsX/PcfYLFauPspk cXnXHDaLX8uPMjqweExsfsfusWlVJ5vH7psNbB6fN8kFsERx2aSk5mSWpRbp2yVwZSxZ84Ct 4AFvxeW/f5kaGBdzdzFyckgImEjsOLmZBcIWk7hwbz0biC0ksIFRYsEZTxBbWMBWYvOON4wg toiArMT33a+hajQkZjVcZQexmQXqJLY/3gkWZxMwkvj2fibYTF4BLYlrn6+B9bIIqEosO90G FhcViJA4dfYtG0SNoMTJmU+A4hwcnAKaEi+eKkKMVJf4M+8SM4QtL7H97RzmCYz8s5B0zEJS NgtJ2QJG5lWMYrmZOcW56ZkFhkZ6xYl5KZnF2XrJ+bmbGMEhyhm1g/H6RPNDjEwcnFINjCqT pq4N61yu6ZlUy7CkNu1KgBXPfIP0jfsWtz8X4F/ZPNdHfNtJPp66bpmYlI3Z2s48J5Od5v7h t9jJ/P7ZLq7ZOzYuuCVb+vLj2U9yWh8NV9rVL5PYeV/LJ7znhq1eqnKLeVzv9cnMB3vOP9CM NXNe9afrV/Ku2/qfyzff+L64d92Jtr8MCUosxRmJhlrMRcWJAAsanuEBAgAA X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11OLC010;1:/qSglfIPAj8sJLO/zpMFmht6SCh3U9W2utgJko+kh2nB/7Zy9yqb4wnoKynyCMToZ4tVADPbLt2hixsdHgF8nDzTfr4S8Slp3Yqyx24QqL7kbs45Hl6XIsHtmUC2XSARrsPAZMO/qVVXhPeIumToRQC1Ts5/wwINNCMGKWoOyL6MEKAtJ7FpMWqrg0K6nYLKSUNemzP6UsAu55h2xpsH83YgaX9Z/sWRgtxNblMo/qD8oOKzI/xfur9hdfoixSUULJMBHiofVedxR24Ht8PjostshzOLiL/9YsdSW5P27STK7nMuYDoX/oyoDz5NempqvtcgZKhsQLugV1Zxywco/A== X-Forefront-Antispam-Report: CIP:63.163.107.173;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(438002)(199003)(189002)(11100500001)(23676002)(65806001)(229853001)(69596002)(5001960100002)(106466001)(5001920100001)(5007970100001)(19580395003)(110136002)(83506001)(50466002)(19580405001)(64126003)(99136001)(189998001)(575784001)(86362001)(76176999)(50986999)(47776003)(59896002)(65816999)(54356999)(65956001)(81156007)(64706001)(87266999)(87936001)(97736004)(68736005)(77096005)(4001350100001)(46102003)(4001540100001)(62966003)(117636001)(92566002)(77156002)(36756003)(5001860100001)(2950100001)(5001830100001)(62816006);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR02MB1249;H:milsmgep12.sandisk.com;FPR:;SPF:Pass;PTR:ErrorRetry;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1249;2:3bBJF2hAniVWZ/IXeF008YfNC2Ft5ujmXWklGVnJzIFPamuK0fDN55Hl/XLLLVPACh/o3v+GjyjKx54Cgkl6Da4hgogT4gPebBVSRMxx7VJCCM67Et/wBOtbbVq3X0uKMvAQtMckytUJbpah34RaAuT4oBQkyz+nImr+tLhcLvA=;3:+BZgw4kyXoRtazzqhP96tnqgVS306T3tQBpVnxTZZyfP3ixwGHK5D/7uCAZJV0pBx9yZwCrG+azL1Ik0H9/NhnTKU9D3FZT0DoUKiudcH62CAgnRJ2YN7MPY79iOEhIBmfF7nX8825arnZKz+wNA8/vImNOexfFUKO+e/yYEkSgL7MfLstlweydYL0h8+30zWR5nKVbUeZ4AYup+mgZRxA8qgZokfg2CDEa7tKEV4uNe+oSzHYpdgNaGy5vs5CrjaXCw9nzStNNrSpGODT+9UQ==;25:7TnHOv1ZeTzhyE7C4jLmhDDPpH2QsyrT0tAdneVIWGePjGtHpgrlKGGhPdB1xD8jsQ7Nr80FE3XqTKqQIJ3Wl+dEM4q6QpRc/XtTUANahVqNjH62IovrQKjVU6lkvYaM8dpSYs3bGC7eD+bP5iPRj/3WR2WXMmR0qcTa8gukq1l95kGMV3WIU2qz9j+SSINV8YgUpXH+u9ao8dAT08SOMZv9jJgvXFRnNa6zjP8vq/HuXbUxCEMpGkxIYkGQn2+ergfLUGKjKvqHpLyFJDDz6Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501001);SRVR:BLUPR02MB1249; X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1249;20:MwoerfRPKO5cHXw8Q2O0z+a6+rgFOfk0aLvHNQbl+uCxZeNVjfZM3yWSgqk+Zmm9qS7gTZ8fum3EBayl6vuRbEiNxDRg+5nqF1WSzrwJC9jXL/mBBACEVJGaZQ4Q1W16XnSjpUALtZAi5fpZFvpiUGqBq3BfR7meJSI2YBUFt2Mmnejqdmm9fc0FfI8Yu+wz0cY79y32py9vMzklOS68XadH9wc+tKvV9e/PQ7wj1u4/VTDmTSQL1wYarj4kouVTcPbk/mVFN36AumIY3mtuLw8SS80ZvW8MK/luOCGKvl/dxNmqrSBBb5Ab/VPUVQQTPHR0gAuDgfDWaL4RQC9luFVHXUIp69Zq4YtyYgog30C4rodycaTh22FYR7u8rBWVyfyDx7OdYQkqFM/SEQ97WwtOFmcLl0oVt2JaUBHlDLSgyYbq8v/GPo9F0Z+f2oePK5hnWzPFA2B2l9fW0xwTU9/bWTJKsNlKtzE3p2yVioWSpJ10tNA6sGG4QdITKv/3;4:w8DHu5d4ZgQ7EJRonfO1qm/648gU65EFb0Vi6MJ9vUNjlzsqV/BV7VIggLK/c2SvukG5fkQrjBgdHywe+WZcQoCnyrnnSODT2FG8//HpEhF+/Nyu4rgOo/7Fj7Irt71fNkLjHmey9+2R35P0/3J2RJ823TxT4jgT32Aep8el3WtxlAdVKu+KBCe8gIbElie6wQzhYzobFdp3SfDTfB8NK2+k8NaCVEUZiQrbVSyYtOQ/D1M90CmrWzFUjB5bsFyUGQQCj2afwPlze+0vp5gr2QVl4fdZW9FFuEE+yU4tVn66GNbKAWnF5Ht1jhi3Ehr48SajQU/jVFyztsxTTzXx/tKU3379duo9klCEtvoRJuE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001);SRVR:BLUPR02MB1249;BCL:0;PCL:0;RULEID:;SRVR:BLUPR02MB1249; X-Forefront-PRVS: 07083FF734 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTFVQUjAyTUIxMjQ5OzIzOkUvNHM5NXYzNFlTTXVyR3RBQ0RsNko1Q1Vr?= =?utf-8?B?TURiaEtZaFNPZVpOT0pCVS9yenc5cFpKQTYya2RYeEhkYnd4L0oyNnMvUk01?= =?utf-8?B?L2FkZUZqU2VlSytyZGhHMU5XcmliWlM4YXJZTWU5bTFOZDJHZWRvY3RGRmYx?= =?utf-8?B?eTVtZDNhdHFaRUVFOXBwY2IrazVaT3lZSWZ1bklnVGErcjVXL0V5SkpNK2c0?= =?utf-8?B?V3JOOXF6amllald4ZTFkcmpUZXEranQwYUkvempWcit5eTg0aDZqcUtlVGpj?= =?utf-8?B?UUhuc0hDcWlpM2cwR0FvMjJiZ05BcitNc01COTlCcWNSL3AwUjhKdmlXUXNw?= =?utf-8?B?eFRSNWREcTl5Nks1Z0FRSXlNSFVOc0VBUk5oYVRNeVBPVkVDbkNiUWpVS1Zt?= =?utf-8?B?QkZ1V2p2QVFmZGdnWktWcndHeEJTUVNDV3Yxd0J2aDBIVDNDR1E4NFhWdkRw?= =?utf-8?B?NEhua3VVek5uN0h5azh3ZTRCR2RrQm1yQTZXQlNCOUlPMlE3T1IrejdGek5z?= =?utf-8?B?TEIyaVpoNUduVGthNUtRRklnUHVPN2JjaHBlYTNJSndsdHZrczlEa29DUlhq?= =?utf-8?B?dUdzUUtoUUtkMVl2V3hKRWxYZjRrc1h1akZvdjRLR3c2dnpvN1hRUnF4WDJ1?= =?utf-8?B?NUZ0N3NqQ0cvNm15dTUvY3RCY2JFcGFlVDBLRWtiajhOMEtPNUZqNlBJZmx0?= =?utf-8?B?aTg1SXNvNG15Z3lsUzA3VVMrR2FoYVpwZkFQcG5ndDcxdEFLTU1kQUdGdlZS?= =?utf-8?B?Q3E2NzA3M29jYjR6eEpNWThsK0ljbHJ6SDBNMit5R3dBZ2p5ZHJpVDF5ZXQy?= =?utf-8?B?bzg5WmNYekgrNGRCWXVLR0lyemVyU0FsMHFpQUhWYUN1ZWlORnpEZHdjSTJj?= =?utf-8?B?UitoQk5iK2JWSWNtKzBtRml5MHhvMlg5VDlKY1Jjc2JjQmgvYTJpRC9zRE13?= =?utf-8?B?bmM1NklUZGtIenYvUGNzb2JEZDhyU1IxS1FEb1dCemFDNWNQNUdOOUlsUkhF?= =?utf-8?B?Mk1lNG1uMi8wMC9FcCtxRmQ5Q1ZaZXJ5OG5zN3VOSmxSc3VRVFV6ZzFlUjN0?= =?utf-8?B?a21zRVVwTDZPOUhBc1lMSzBzNStqTUlNWHg1VjIrL2lXbVowRlR5VTBraUpL?= =?utf-8?B?RXF4QmpqQ2FtWUh0TTV6dEVyVjg5OUZLZERTUGVDUWo5UjJ1MFdqQXl0MG82?= =?utf-8?B?UjVOLzNKN3E4ZCs1SHgvOW05eEhpSWZ4SHQzMVdHbHd1YXhibVVxT3hWd1lv?= =?utf-8?B?V3hxRjd3WWZFOGdZczZyQjJzOTR0dlgwTU5wVGU5cUdpMXU4MGZ5UWdhNGZl?= =?utf-8?B?ckFhc1BmeG5YZEwyRS9xejh2RDdkTmVLc3FBKzJudGcvSU5SVEVuL21JTUlt?= =?utf-8?B?UVN1RjNFMGVGSnNzU3BOUGY0Nk9ubHkvL3ZTOHdZYlF4STA0Q2IrUjJVWk13?= =?utf-8?B?RkhETzhmUDdTMkFEcGIvckNoU2dNRmVHVDJEdFU2Rm9FRFpHSWs5MWYxaWYv?= =?utf-8?B?NXVKMjloZlMyd0J2dnNISW5WYTlVQXU0UlNnWFl2NXZ3aGhKMndKeE5IdzBK?= =?utf-8?B?YXVDdkJka2QxazR6NklWSHBZbFYzVEZzSDBNWi8vZDhiL01HS0pQRDM1cWlS?= =?utf-8?B?MXpFS0c3cGo1SzhWaUlWTnhtRE5vTEQybjdNTUt4d3NzOVBwdFBhcndJcmti?= =?utf-8?B?cGtzdi9kUW0wSHhoQVVIV1A3ZjNCL0l2empGV1hZeUJFVDlhejJ2ZGpKa3g4?= =?utf-8?B?aHlDZ09ocmduNWJxREhGUHVNajN6R1JMTDNLRHN3Vk8vQUwvTm1STzMxTmVR?= =?utf-8?Q?L/YsQ7mJD9F9f?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1249;5:w3t+zFqEpkQT9Hio8v12m9E0GgLAQ4xZwqZBD0z/fXte5ix92FTXWjkyoLBaATkUttONb+38JQWlu0Dv4C3pRb/JoMt72/kATI4G4tdG3pG/FDzeBuBXjbydVSnqiLT7dDvABL4QU0X4QNlV0kPDcg==;24:1RuMAgH+/Wn419ErjbWfLeFpiHY6PNHRNxNLu6rKP+VDmoqsik6ooAAvrzhT99/AsXBMm2EjGHeVHpMMOEarvfzSSXIKfxGTtnFXn2MdryI=;20:2QxXRLil6GWjqTOedwRbD5dIux6ggxAg1pBYYg1W/XZX6S6riM4lCndP8byWZNIx2elVmnTKiBIXqb68ZM8L+dy9MPMK4Rq4d7tcerx+/684M/LEc2ONAq5wakTEhRHbXYb7mW/vFJUBD6MoYUlWJ/rHtEuVZxufF8n2QbnyLnCpn8nOS27u+dvAJKotLeq9eIQFKMC6+7yITslIur2YyQHNbA4qs1nGgwjUSFyi6C3TXeREjsbyQQ/tfDWtNrBl SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2015 22:14:11.2248 (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.173];Helo=[milsmgep12.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR02MB1249 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ensure that blk_mq_queue_enter() waits if mq_freeze_depth is not zero. Ensure that the update of mq_freeze_depth by blk_mq_freeze_queue() is visible by all CPU cores before that function waits on mq_usage_counter. It is unfortunate that this patch introduces an smp_mb() in the hot path (blk_mq_queue_enter()) but I have not yet found a way to avoid this. I came across this code while analyzing a lockup triggered by deleting a SCSI host created by the SRP initiator immediately followed by a relogin. Signed-off-by: Bart Van Assche Cc: Christoph Hellwig Cc: Tejun Heo Cc: --- block/blk-mq.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index 2077f0d..e3ad411 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -83,8 +83,13 @@ static int blk_mq_queue_enter(struct request_queue *q, gfp_t gfp) while (true) { int ret; - if (percpu_ref_tryget_live(&q->mq_usage_counter)) - return 0; + if (percpu_ref_tryget_live(&q->mq_usage_counter)) { + /* Order mq_use_counter and mq_freeze_depth accesses */ + smp_mb(); + if (!atomic_read(&q->mq_freeze_depth)) + return 0; + percpu_ref_put(&q->mq_usage_counter); + } if (!(gfp & __GFP_WAIT)) return -EBUSY; @@ -136,6 +141,11 @@ static void blk_mq_freeze_queue_wait(struct request_queue *q) void blk_mq_freeze_queue(struct request_queue *q) { blk_mq_freeze_queue_start(q); + /* + * Ensure that the mq_freeze_depth update is visiable before + * mq_use_counter is read. + */ + smp_mb(); blk_mq_freeze_queue_wait(q); } EXPORT_SYMBOL_GPL(blk_mq_freeze_queue); -- 2.1.4