Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp750491ybl; Wed, 4 Dec 2019 10:14:13 -0800 (PST) X-Google-Smtp-Source: APXvYqzqAbn/Ouj7NXhPSRo/cpBo4QwAfVK/ZmIiwQAprJ9FkcGan2RKLgog3aDj8g+Os70yq8Xs X-Received: by 2002:a9d:73c4:: with SMTP id m4mr3305625otk.87.1575483253597; Wed, 04 Dec 2019 10:14:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575483253; cv=none; d=google.com; s=arc-20160816; b=ARkiQlmBaTm3SQgru3pkGuj2nbIjYH1LGwh/IR8wZ1QgBTcz+R50xMjdAAW1F8Ddxi +paRHMvWJI4SGlAxx06Y4odvuyWSUUQ7w3i+A2lwXr7/q+ZnGc8BHvkJWwMLkZFlZM76 gNUjmDL0IGtcgBuMlsQ5p2rVRnd1JQQjcITEKpzp0uDpf8seDUWJpsDK8r+Y4gFcICdZ Jaz94/B5h9Ap6wrgn65cErDz19bTZ0d30Z/DjikIIVMAtE9c1vZh5CXqof0pdgFBLJDF hr+q6XnkCY5zMN6BvsLZxSj0dRHk1xypU7RBb+P3QlIKuqlS4ZkbIvyngJ90XEyZqezR 5AtA== 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=4B6oeEuHJH/h37thJ2FRSxZ8ZSlgra2VO6tFoH8Xw5o=; b=CLLYpbVPtKSDZaJtWzMirOcjM/76FiJGYfmhYOt5R959V4GSH+f/mhJp1wlgvje+gh qPEpIxIhRym4JLaLX2eTsmdTOGvHnqhUJ5j1T3jOCmYCL+b0EWkgkbtO4+s0UDWU9fbA 167u9gDCZNugjnggctxgEtal8lxlnknmvTr/Btyp1NexOJ4jb4FbxEX+XiGi1ew2dAnH bM96e4b/CQ6qiMKfqPI/BWTkOXoIY22Ru9Las+fNcszuU7MxUI9sRdzWHD+LC7Em5gtd Yo0m47YPg8m4Abtv6E6am5kl9421ooLKuThBFR6nwWLpL7UWXG45ETGpfoRYmPURvCdE /GuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=eDQZqyuL; 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 h22si3552700otk.294.2019.12.04.10.14.01; Wed, 04 Dec 2019 10:14:13 -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=eDQZqyuL; 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 S1730995AbfLDSLy (ORCPT + 99 others); Wed, 4 Dec 2019 13:11:54 -0500 Received: from mail.kernel.org ([198.145.29.99]:40278 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731526AbfLDSLw (ORCPT ); Wed, 4 Dec 2019 13:11:52 -0500 Received: from localhost (unknown [217.68.49.72]) (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 A39A920833; Wed, 4 Dec 2019 18:11:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1575483111; bh=l9e2hJ799Qd1hFw0Io07yRAavMXghgoO0DXnzV0L1FI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eDQZqyuLc3eIsFBsJexe1WbGr87hHRebMWLmU/OXaQstTUu/y8CwcK8OBw1oaVHZA IYS2X3FFlOq3uKia0KVrAY9xF/67hh3lkx8oLI5kfKvxNGr4q9mWJ4l7xQSaRjo9hL FxXuSLa2Np2ofWEi7Uvp/N9jowLBqaXqKR/DwZLw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Anatoliy Glagolev , Himanshu Madhani , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 4.9 056/125] scsi: qla2xxx: deadlock by configfs_depend_item Date: Wed, 4 Dec 2019 18:56:01 +0100 Message-Id: <20191204175322.378579807@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191204175308.377746305@linuxfoundation.org> References: <20191204175308.377746305@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: Anatoliy Glagolev [ Upstream commit 17b18eaa6f59044a5172db7d07149e31ede0f920 ] The intent of invoking configfs_depend_item in commit 7474f52a82d51 ("tcm_qla2xxx: Perform configfs depend/undepend for base_tpg") was to prevent a physical Fibre Channel port removal when virtual (NPIV) ports announced through that physical port are active. The change does not work as expected: it makes enabled physical port dependent on target configfs subsystem (the port's parent), something the configfs guarantees anyway. Besides, scheduling work in a worker thread and waiting for the work's completion is not really a valid workaround for the requirement not to call configfs_depend_item from a configfs callback: the call occasionally deadlocks. Thus, removing configfs_depend_item calls does not break anything and fixes the deadlock problem. Signed-off-by: Anatoliy Glagolev Acked-by: Himanshu Madhani Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 48 +++++------------------------- drivers/scsi/qla2xxx/tcm_qla2xxx.h | 3 -- 2 files changed, 8 insertions(+), 43 deletions(-) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index 0ad8ecef1e302..abdd6f93c8fe5 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -821,38 +821,14 @@ static ssize_t tcm_qla2xxx_tpg_enable_show(struct config_item *item, atomic_read(&tpg->lport_tpg_enabled)); } -static void tcm_qla2xxx_depend_tpg(struct work_struct *work) -{ - struct tcm_qla2xxx_tpg *base_tpg = container_of(work, - struct tcm_qla2xxx_tpg, tpg_base_work); - struct se_portal_group *se_tpg = &base_tpg->se_tpg; - struct scsi_qla_host *base_vha = base_tpg->lport->qla_vha; - - if (!target_depend_item(&se_tpg->tpg_group.cg_item)) { - atomic_set(&base_tpg->lport_tpg_enabled, 1); - qlt_enable_vha(base_vha); - } - complete(&base_tpg->tpg_base_comp); -} - -static void tcm_qla2xxx_undepend_tpg(struct work_struct *work) -{ - struct tcm_qla2xxx_tpg *base_tpg = container_of(work, - struct tcm_qla2xxx_tpg, tpg_base_work); - struct se_portal_group *se_tpg = &base_tpg->se_tpg; - struct scsi_qla_host *base_vha = base_tpg->lport->qla_vha; - - if (!qlt_stop_phase1(base_vha->vha_tgt.qla_tgt)) { - atomic_set(&base_tpg->lport_tpg_enabled, 0); - target_undepend_item(&se_tpg->tpg_group.cg_item); - } - complete(&base_tpg->tpg_base_comp); -} - static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item, const char *page, size_t count) { struct se_portal_group *se_tpg = to_tpg(item); + struct se_wwn *se_wwn = se_tpg->se_tpg_wwn; + struct tcm_qla2xxx_lport *lport = container_of(se_wwn, + struct tcm_qla2xxx_lport, lport_wwn); + struct scsi_qla_host *vha = lport->qla_vha; struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, struct tcm_qla2xxx_tpg, se_tpg); unsigned long op; @@ -871,24 +847,16 @@ static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item, if (atomic_read(&tpg->lport_tpg_enabled)) return -EEXIST; - INIT_WORK(&tpg->tpg_base_work, tcm_qla2xxx_depend_tpg); + atomic_set(&tpg->lport_tpg_enabled, 1); + qlt_enable_vha(vha); } else { if (!atomic_read(&tpg->lport_tpg_enabled)) return count; - INIT_WORK(&tpg->tpg_base_work, tcm_qla2xxx_undepend_tpg); + atomic_set(&tpg->lport_tpg_enabled, 0); + qlt_stop_phase1(vha->vha_tgt.qla_tgt); } - init_completion(&tpg->tpg_base_comp); - schedule_work(&tpg->tpg_base_work); - wait_for_completion(&tpg->tpg_base_comp); - if (op) { - if (!atomic_read(&tpg->lport_tpg_enabled)) - return -ENODEV; - } else { - if (atomic_read(&tpg->lport_tpg_enabled)) - return -EPERM; - } return count; } diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.h b/drivers/scsi/qla2xxx/tcm_qla2xxx.h index 37e026a4823d6..8b70fa3105bd7 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.h +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.h @@ -48,9 +48,6 @@ struct tcm_qla2xxx_tpg { struct tcm_qla2xxx_tpg_attrib tpg_attrib; /* Returned by tcm_qla2xxx_make_tpg() */ struct se_portal_group se_tpg; - /* Items for dealing with configfs_depend_item */ - struct completion tpg_base_comp; - struct work_struct tpg_base_work; }; struct tcm_qla2xxx_fc_loopid { -- 2.20.1