Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp3736351pxv; Tue, 13 Jul 2021 02:30:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxNJ0dcaV3bX/U1kSrf5rClsf7FIpXtcrzXRJT4CqdOesQxS6rxEodG5ed2ClSJ+haOYy9R X-Received: by 2002:a92:d9ce:: with SMTP id n14mr2246626ilq.29.1626168643340; Tue, 13 Jul 2021 02:30:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626168643; cv=none; d=google.com; s=arc-20160816; b=Vc3FuPyi8TG7AfYAvfIN9ienZ0p1dJkAbaW6MVc1z/CptIkashlvrNY2du5aeYzfTc bp2roE5pwxccwJwwlInz+VCynOK8sLSdZYh/BEqP+7f//7dNVVMESdz4ruUnLhQGcwKQ BQVsBM5v5PHVx/Si39zE9/Xw3XVACKcBYqrPOBmWa6tU2ko/bDlc1y5Vi3ihNojzao9U eu4v8it47VxOSRmSsli/w4IbMtk2TryECDoivDC3L+G5/Zf88tIrzL4NhS6WljDvE4z2 9OWsU0EXPRQ1lPpsbPgsvGklFZ/5KOBKGuY3hDiLTvTwnbBF5Tthhfqdw6HrPmRRkMP/ 3XGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=I/J2/UiguEr0jFQAYedFx/kIGIxEJ75yFpnTbLlSPxY=; b=SKMNdAhVO4UY8uB39u3T6lXR7n08Zk6hTJ+2T90T7tU7SXMAc6zdE2Rp1q0gDoN6NB Xe+IQRINJ5jLWEnOWIH0k+zY+i26ZreSbyanH4YuzwOVN4EDCsP0bKSAh6eAVrfhDz7H K7vYRLEJ2yAgIbEk+NhzJcTrt3VTtnO4eW/Q4gzGPniXdKvx7S0MVe9siXHxsUGU1ZCw lyjvDlA2Dh1L7AR/6hof1vvf6Jv0b82/O/Lra58DZyzgo/zvTAaJj/W3oV83iT2cWewO eGYTU0iYx2/YaoHzlqL4zVUKujvDvT7vLt/lTFBEyavRUIvVWQMtJzLiidTO4W8Yvr5f vrfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m16si3171886jaj.53.2021.07.13.02.30.29; Tue, 13 Jul 2021 02:30:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235178AbhGMJcp (ORCPT + 99 others); Tue, 13 Jul 2021 05:32:45 -0400 Received: from szxga03-in.huawei.com ([45.249.212.189]:11294 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235128AbhGMJco (ORCPT ); Tue, 13 Jul 2021 05:32:44 -0400 Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.57]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4GPFbn3pfbz78wB; Tue, 13 Jul 2021 17:25:25 +0800 (CST) Received: from dggpemm500002.china.huawei.com (7.185.36.229) by dggemv711-chm.china.huawei.com (10.1.198.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Tue, 13 Jul 2021 17:29:53 +0800 Received: from linux-ibm.site (10.175.102.37) by dggpemm500002.china.huawei.com (7.185.36.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Tue, 13 Jul 2021 17:29:52 +0800 From: Hanjun Guo To: CC: , Greg Kroah-Hartman , Sasha Levin , Mike Christie , Gulam Mohamed , "Martin K. Petersen" , Hanjun Guo Subject: [Backport for 5.10.y PATCH 7/7] scsi: iscsi: Fix iSCSI cls conn state Date: Tue, 13 Jul 2021 17:18:37 +0800 Message-ID: <1626167917-11972-8-git-send-email-guohanjun@huawei.com> X-Mailer: git-send-email 1.7.12.4 In-Reply-To: <1626167917-11972-1-git-send-email-guohanjun@huawei.com> References: <1626167917-11972-1-git-send-email-guohanjun@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.102.37] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggpemm500002.china.huawei.com (7.185.36.229) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mike Christie commit 0dcf8febcb7b9d42bec98bc068e01d1a6ea578b8 upstream. In commit 9e67600ed6b8 ("scsi: iscsi: Fix race condition between login and sync thread") I missed that libiscsi was now setting the iSCSI class state, and that patch ended up resetting the state during conn stoppage and using the wrong state value during ep_disconnect. This patch moves the setting of the class state to the class module and then fixes the two issues above. Link: https://lore.kernel.org/r/20210406171746.5016-1-michael.christie@oracle.com Fixes: 9e67600ed6b8 ("scsi: iscsi: Fix race condition between login and sync thread") Cc: Gulam Mohamed Signed-off-by: Mike Christie Signed-off-by: Martin K. Petersen Signed-off-by: Hanjun Guo --- drivers/scsi/libiscsi.c | 26 +++----------------------- drivers/scsi/scsi_transport_iscsi.c | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 41b8192..41023fc 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c @@ -3089,9 +3089,10 @@ int iscsi_conn_start(struct iscsi_cls_conn *cls_conn) } } -static void iscsi_start_session_recovery(struct iscsi_session *session, - struct iscsi_conn *conn, int flag) +void iscsi_conn_stop(struct iscsi_cls_conn *cls_conn, int flag) { + struct iscsi_conn *conn = cls_conn->dd_data; + struct iscsi_session *session = conn->session; int old_stop_stage; mutex_lock(&session->eh_mutex); @@ -3149,27 +3150,6 @@ static void iscsi_start_session_recovery(struct iscsi_session *session, spin_unlock_bh(&session->frwd_lock); mutex_unlock(&session->eh_mutex); } - -void iscsi_conn_stop(struct iscsi_cls_conn *cls_conn, int flag) -{ - struct iscsi_conn *conn = cls_conn->dd_data; - struct iscsi_session *session = conn->session; - - switch (flag) { - case STOP_CONN_RECOVER: - cls_conn->state = ISCSI_CONN_FAILED; - break; - case STOP_CONN_TERM: - cls_conn->state = ISCSI_CONN_DOWN; - break; - default: - iscsi_conn_printk(KERN_ERR, conn, - "invalid stop flag %d\n", flag); - return; - } - - iscsi_start_session_recovery(session, conn, flag); -} EXPORT_SYMBOL_GPL(iscsi_conn_stop); int iscsi_conn_bind(struct iscsi_cls_session *cls_session, diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index cb7b74a0..2735178 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -2479,10 +2479,22 @@ static void iscsi_if_stop_conn(struct iscsi_cls_conn *conn, int flag) * it works. */ mutex_lock(&conn_mutex); + switch (flag) { + case STOP_CONN_RECOVER: + conn->state = ISCSI_CONN_FAILED; + break; + case STOP_CONN_TERM: + conn->state = ISCSI_CONN_DOWN; + break; + default: + iscsi_cls_conn_printk(KERN_ERR, conn, + "invalid stop flag %d\n", flag); + goto unlock; + } + conn->transport->stop_conn(conn, flag); - conn->state = ISCSI_CONN_DOWN; +unlock: mutex_unlock(&conn_mutex); - } static void stop_conn_work_fn(struct work_struct *work) @@ -2973,7 +2985,7 @@ static int iscsi_if_ep_disconnect(struct iscsi_transport *transport, mutex_lock(&conn->ep_mutex); conn->ep = NULL; mutex_unlock(&conn->ep_mutex); - conn->state = ISCSI_CONN_DOWN; + conn->state = ISCSI_CONN_FAILED; } transport->ep_disconnect(ep); -- 1.7.12.4