Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2280553ybl; Thu, 19 Dec 2019 10:56:54 -0800 (PST) X-Google-Smtp-Source: APXvYqxruTEGNbD17AxbagnHm1nf3oW5+eu5pihgIdGgca0M9jrsbgFxIy01XmeZnnlGGVWCj+AQ X-Received: by 2002:a05:6830:1bf2:: with SMTP id k18mr10104861otb.36.1576781813882; Thu, 19 Dec 2019 10:56:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576781813; cv=none; d=google.com; s=arc-20160816; b=EpTPSCYH/RnsxDF+3Up0cOXNOcH3UcyrZWkYq2EGGCQEQ5peRW/xnnJ/iFxCueghyp 0MnjxmGF/yZCxVZU8nKLVh4S4PJL+UnkO1IKhFqH2bcIwkmj8bRwc5cTH84476U1Vph/ tuYYSs6BoqHIUNJnRZJozEnlv/HVVW0wa/PeMdqfVPNkpfTSExNs9FDpXNVzPZydLrk3 YbwaZWtOmBmR5Y0Q4CgwZ4qG1mIGo3UPirbZ52nquCYPU8aYznH8AmqfKs3JEwfUGS1d /+unPBBuxZKXD4hFyhaEP7P2Pp7sne+Pi49g3xgSnrJt4ThWUUqPsyvHQm/x3oZUIcOx gEAQ== 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=iDlVSGEAOVsCnjhb0sggOB335V6wio5Dd2uOys+h86k=; b=FG0hg4ecnIsWzSwrWJWR7u8niADDzyBjOVeMJp2f96/bLvMzmP/pnz5BIQXqq91rDo 5IgqLPBVf7VCiMYtXvy7SxcZd1q7uiToKTZ/inc7SIAmt6aN2Fbz7Kz/Zjx7Umrxrjma 75UzFVr5XCquBgG5LyM5QbEk8i6kivLpMvPNMPx2g5eewMlIFdY67ouGUynYHhUOUykn Yuk7oHy/S9hLl+1RksEVuhIjWa+GlcDWG3bG9QkjfFq9RmPe8zhHjg8KJXaYbUiwghhR Vp2cVsjiMddW7SMVhZWs17iC36thD4N0HUudzaHMrfOhEafiCDxneg0sb5JNs7wOL1oq vLQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VveEhlI9; 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 t28si3710331otr.16.2019.12.19.10.56.41; Thu, 19 Dec 2019 10:56:53 -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=VveEhlI9; 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 S1730103AbfLSSzh (ORCPT + 99 others); Thu, 19 Dec 2019 13:55:37 -0500 Received: from mail.kernel.org ([198.145.29.99]:51728 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730323AbfLSSzg (ORCPT ); Thu, 19 Dec 2019 13:55:36 -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 5229C24689; Thu, 19 Dec 2019 18:55:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1576781735; bh=3kMk/6+SFGtrVB5KH8H8fXTgxTZmZcp64HGVqP3ntaI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VveEhlI93U6DxbGABsvZXcguAZgo+7dsgfA2IOcjBIhn679J/BD/ulezc+ulYOTBs c3GEQ2xRUdJniosyOI4yi9PlASOs9N4ToURPpxegpjcdhlLfoMTzZB2YAgWQNodg7J uFIXYLN5YX/Q6LjNlLKu/zl2jDxxh4e4dXynqAmY= 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 5.4 59/80] scsi: iscsi: Fix a potential deadlock in the timeout handler Date: Thu, 19 Dec 2019 19:34:51 +0100 Message-Id: <20191219183131.918040857@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191219183031.278083125@linuxfoundation.org> References: <20191219183031.278083125@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 @@ -1945,7 +1945,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) { /* @@ -2072,7 +2072,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;