Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2285128ybl; Thu, 19 Dec 2019 11:01:15 -0800 (PST) X-Google-Smtp-Source: APXvYqwX5o8A0AfNCs87aVZdFqf9onJNH//Fs/DqHeJ8szwiV6W7LZ85dqbnuwI6Q/Lr/Igz+7tq X-Received: by 2002:aca:4b4a:: with SMTP id y71mr2715389oia.90.1576782075179; Thu, 19 Dec 2019 11:01:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576782075; cv=none; d=google.com; s=arc-20160816; b=slNmwBGkA8k6feSe5y7OTxKOauANZXUbiEmtVkj7BpEepgkOiiMIgE2dU/UQhVGq1U hPle/ETVghJEjkotXOnhR+yH92C2bAM2B8Exjxa2tAIWgXwc+bSdrnt4gEcvcWWQGrjz fBkRm3Ynmmvhdvy3wqAYPRgE+9Ut5AuYoscHMerBiUqfuKCtQTngOPvD2dUl25M6RyLR WpYvEFOYqJjjr310iHhWp7a9aA7FltNnOVZymzI//+s68D24unCHDAZ0Un1Y3vwPS/Qx iiWjpDR+CUrqvY1IIa4tE8aCpPxchVkBmRpzb1tvOr9ZofKqLzQHnud3/E/FW1uuZ6Xm TcCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=E5YF8qOkMuRLqKygyCPi2bmfD37qEZunz/Aul76orVk=; b=C0eF7xPlBo4YsGFlIaBKqQ2yys6q0e4gJXdGxy7v+u3V3XdRk67NYjSZjNRNQfbQwy MjWgPocxhS3Bl1tGGJKM5m5VdmrBE8XpNTQZcWReUXrpYJ69JF4MF8EvrXCFSBgClZPB cQ3sDKWP+PWJnX4CBK2gmscavBpVtIXn/v62ahpN0Ugn2ZujiaX+8EblcguChtz8TDtU PqySu+3T82757pIjWsSGKE94PQi1EW0GyrjxNkxqy4dYylK1coIUgQDBBEVHnLwKv83r aoBsbiTBnq79OaZZAgqczyUvzirHh1RcseObDQusbII3jtOq76NezL+unClysACKoeYB LHGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DXFp4MCl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o128si3427940oih.66.2019.12.19.11.01.00; Thu, 19 Dec 2019 11:01:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DXFp4MCl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730027AbfLSS7n (ORCPT + 99 others); Thu, 19 Dec 2019 13:59:43 -0500 Received: from mail.kernel.org ([198.145.29.99]:47848 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728282AbfLSSxC (ORCPT ); Thu, 19 Dec 2019 13:53:02 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A563924682; Thu, 19 Dec 2019 18:53:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1576781581; bh=p8dB0fu0e6zGFu9JknCYcoZlcc9X7MljYCt2XpIyreY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DXFp4MClZQuxpfgPYJoiI1ki9ODBKQ5tbtfrEEQ3i9bgSDJKNTX/t9C/yLjiq052c lhB03s/1xSwcLB71TlRq/2Mj8y8kcYcX0wtj6ipM+T66K9w2GExiv4CsIL5QdCz3Ea g08f0t5CY8Y9/uYKdFnkd5tVqlW7gwNHcVN2Tzbs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christoph Hellwig , Keith Busch , Lee Duncan , Chris Leech , Bart Van Assche , "Martin K. Petersen" Subject: [PATCH 4.19 44/47] scsi: iscsi: Fix a potential deadlock in the timeout handler Date: Thu, 19 Dec 2019 19:34:58 +0100 Message-Id: <20191219182952.440917660@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191219182857.659088743@linuxfoundation.org> References: <20191219182857.659088743@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Bart Van Assche commit 5480e299b5ae57956af01d4839c9fc88a465eeab upstream. Some time ago the block layer was modified such that timeout handlers are called from thread context instead of interrupt context. Make it safe to run the iSCSI timeout handler in thread context. This patch fixes the following lockdep complaint: ================================ WARNING: inconsistent lock state 5.5.1-dbg+ #11 Not tainted -------------------------------- inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage. kworker/7:1H/206 [HC0[0]:SC0[0]:HE1:SE1] takes: ffff88802d9827e8 (&(&session->frwd_lock)->rlock){+.?.}, at: iscsi_eh_cmd_timed_out+0xa6/0x6d0 [libiscsi] {IN-SOFTIRQ-W} state was registered at: lock_acquire+0x106/0x240 _raw_spin_lock+0x38/0x50 iscsi_check_transport_timeouts+0x3e/0x210 [libiscsi] call_timer_fn+0x132/0x470 __run_timers.part.0+0x39f/0x5b0 run_timer_softirq+0x63/0xc0 __do_softirq+0x12d/0x5fd irq_exit+0xb3/0x110 smp_apic_timer_interrupt+0x131/0x3d0 apic_timer_interrupt+0xf/0x20 default_idle+0x31/0x230 arch_cpu_idle+0x13/0x20 default_idle_call+0x53/0x60 do_idle+0x38a/0x3f0 cpu_startup_entry+0x24/0x30 start_secondary+0x222/0x290 secondary_startup_64+0xa4/0xb0 irq event stamp: 1383705 hardirqs last enabled at (1383705): [] _raw_spin_unlock_irq+0x2c/0x50 hardirqs last disabled at (1383704): [] _raw_spin_lock_irq+0x18/0x50 softirqs last enabled at (1383690): [] iscsi_queuecommand+0x76a/0xa20 [libiscsi] softirqs last disabled at (1383682): [] iscsi_queuecommand+0x118/0xa20 [libiscsi] other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&(&session->frwd_lock)->rlock); lock(&(&session->frwd_lock)->rlock); *** DEADLOCK *** 2 locks held by kworker/7:1H/206: #0: ffff8880d57bf928 ((wq_completion)kblockd){+.+.}, at: process_one_work+0x472/0xab0 #1: ffff88802b9c7de8 ((work_completion)(&q->timeout_work)){+.+.}, at: process_one_work+0x476/0xab0 stack backtrace: CPU: 7 PID: 206 Comm: kworker/7:1H Not tainted 5.5.1-dbg+ #11 Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011 Workqueue: kblockd blk_mq_timeout_work Call Trace: dump_stack+0xa5/0xe6 print_usage_bug.cold+0x232/0x23b mark_lock+0x8dc/0xa70 __lock_acquire+0xcea/0x2af0 lock_acquire+0x106/0x240 _raw_spin_lock+0x38/0x50 iscsi_eh_cmd_timed_out+0xa6/0x6d0 [libiscsi] scsi_times_out+0xf4/0x440 [scsi_mod] scsi_timeout+0x1d/0x20 [scsi_mod] blk_mq_check_expired+0x365/0x3a0 bt_iter+0xd6/0xf0 blk_mq_queue_tag_busy_iter+0x3de/0x650 blk_mq_timeout_work+0x1af/0x380 process_one_work+0x56d/0xab0 worker_thread+0x7a/0x5d0 kthread+0x1bc/0x210 ret_from_fork+0x24/0x30 Fixes: 287922eb0b18 ("block: defer timeouts to a workqueue") Cc: Christoph Hellwig Cc: Keith Busch Cc: Lee Duncan Cc: Chris Leech Cc: Link: https://lore.kernel.org/r/20191209173457.187370-1-bvanassche@acm.org Signed-off-by: Bart Van Assche Reviewed-by: Lee Duncan Signed-off-by: Martin K. Petersen Signed-off-by: Greg Kroah-Hartman --- drivers/scsi/libiscsi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c @@ -1983,7 +1983,7 @@ enum blk_eh_timer_return iscsi_eh_cmd_ti ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc); - spin_lock(&session->frwd_lock); + spin_lock_bh(&session->frwd_lock); task = (struct iscsi_task *)sc->SCp.ptr; if (!task) { /* @@ -2110,7 +2110,7 @@ enum blk_eh_timer_return iscsi_eh_cmd_ti done: if (task) task->last_timeout = jiffies; - spin_unlock(&session->frwd_lock); + spin_unlock_bh(&session->frwd_lock); ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? "timer reset" : "shutdown or nh"); return rc;