Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp635258pxv; Thu, 15 Jul 2021 12:05:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwlFs50kfl3zlOcyDCj6sfxF10yA3R1jIvoK3eWwgURJUYZnj899rdmg4MlqAQSNk5QyqsH X-Received: by 2002:a17:906:c20d:: with SMTP id d13mr6961264ejz.259.1626375921059; Thu, 15 Jul 2021 12:05:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626375921; cv=none; d=google.com; s=arc-20160816; b=GuS4gOPwfqWdZVcJOEB6Xg2DWricCMldE6U9WMWta3sVY0XTGnwk769iSR6xbclsqA JBSCUXDpN/xI24H94D3pFo5a8E5QdzV6SEgW6lD+ZSyAw8V2Ssx5DqGpuAzDIHa2fPJK kv9FVD+W374zjDYNfP0G7SlRJg+aWOquaGZZj+SFJdxlKltaUWBKEPRSqXAGYNMItDtB Onp2hPfMhvHVjVjuzVz2Ug8tor3ci29Rd7LV4WTNnwWqOcOU26UO7U6fn1eXV0DQJn94 H3vxm6dJQRDlHTY714MA/N1JOt4wNDx1tK+o6jRpteQ0KnzM/46XxxhRrQN46veuF2OE QHbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=+ROiWGnwW1hW9jNDp5FEZVPzBnRUtp+YUTNYnjSZTJU=; b=Io/rT/ZR7YaU2uLARaAXorZo2BJZ9k3ZNsb9EPzMbT+F1bnOawr/+jzgJwZ/2qNbxB 5J/ge2YrjQ5Lbfc6DowHDt1tUoAUN7AVisK3fsccRp8mO8AXf76kfYujbA6rbmifhswo ubb7qj7GpnWnwSLQC36kuUK4TDNXqDUBmdrl0bbcm40CYLsMqn52PYisc+acsWGGWpOH azOi0EtGuaixuj+4/itZIbQCrcTBmdMftzQwDiihTESUCpST+mhXW8hAk6P5hyGfyQpE OEmtEMJDz8S6zDRi+yzOXKpFi71ZEBsMn58A7t++rttDlKj1yb8kkFKGNHdtRHlf5Hdc M/Rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=GmPfx9DV; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w21si8646337edx.566.2021.07.15.12.04.56; Thu, 15 Jul 2021 12:05:21 -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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=GmPfx9DV; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242818AbhGOTFx (ORCPT + 99 others); Thu, 15 Jul 2021 15:05:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:59882 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240120AbhGOS4F (ORCPT ); Thu, 15 Jul 2021 14:56:05 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 65032613D1; Thu, 15 Jul 2021 18:53:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626375190; bh=dyshn5kvxDEI0SM2myXYKNppDxlJZf63QS5mPCGGb8c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GmPfx9DVbmXFryobMV/UeDc8143EwZ+AAeI2vkcr/gHfFK6Pd5wYW3cd4n9cRcdxN NJmN/q8dHUprKpLbzEVx6FY9WGF3oFhn2fU8q1OnzQQAkMPScq1JYC95NDhfpeF9DD vICvaUss/H7DFCVnp07HNHmuBfLKCOyFIVZ5oV+g= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Greg Kroah-Hartman , Gulam Mohamed , Mike Christie , "Martin K. Petersen" , Hanjun Guo Subject: [PATCH 5.10 145/215] scsi: iscsi: Fix iSCSI cls conn state Date: Thu, 15 Jul 2021 20:38:37 +0200 Message-Id: <20210715182625.263662643@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210715182558.381078833@linuxfoundation.org> References: <20210715182558.381078833@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Greg Kroah-Hartman --- drivers/scsi/libiscsi.c | 26 +++----------------------- drivers/scsi/scsi_transport_iscsi.c | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 26 deletions(-) --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c @@ -3089,9 +3089,10 @@ fail_mgmt_tasks(struct iscsi_session *se } } -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 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, --- 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 is * 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 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);