Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp2992802yba; Mon, 22 Apr 2019 17:21:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqz6Cc8UdooDUgRTneCchCIMIq0b/YWNgokZHY1qb4pUdKVvyuvqiXhEGHAitoz8avNEXGa+ X-Received: by 2002:a17:902:6ac2:: with SMTP id i2mr657209plt.260.1555978919750; Mon, 22 Apr 2019 17:21:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555978919; cv=none; d=google.com; s=arc-20160816; b=TFN9fGDrx4yRm8hrK9BYi5GdACwDu7NXZ1bMez+5Qk9LEhSIDY9p4DUqLl5OqHodDW nESl7GTRvUhNl7sAEPy3oIGVd3COpATsWuLaubcMnTvpte4XpQjhz81pGuQt5KXIyjnF QzG0QUXBuhkQaXasX712O+piaUU8WMQz6n8drnMVIrovpLFkq6RNwLiG8AHZGS9Vd3PR Ujg1Nhh+fEvlnPQtIpKtvzLxQeJAwQ0fcY/NJm3Mr3Tb3k2ChfUtstMyadXs3a62nSFO 0LmmwxaDg3JjcLUjwheykE96Di0MKKZkyMmq4a3rTajYLxu98xjB7fSVJJZkOuoVFs2c Cb3w== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/mpDuJNjxWAabXJstGltRw1wr+BmKcdov5zpSYDRFyw=; b=KndVMzix11pNI42KwOAeNYgsSBEXId5KyGtobYXLUb4cSHMj/7GxZMP8QiHCJLRT+B t8EcK0EwwIclApyhEqSlyFH+jfXjsy85fIx8ou4gFD87oG6zoDSC3l8FfVNVkjbAYUUT MkL5TD5yb3mYLFOVYTq1fJzF+Bt7I6HDOsKbasLkBwPYrXeHsrRuM/cux95GJyJigKzA aHZfl8w7aFQPQROM6bo6apbIC9xS4yq4zdx1zpP+Za8FtSRkgXe85kzR/g2Qu4m9omuZ 07A7BWiBfYPlzPrR9Na+F2ekmdVic8rty/6ZZ8QwGo1l/BqbV9B0VA7bryJPrLlIW5UZ 47DQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=gGZHBlha; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e7si14674117pfc.152.2019.04.22.17.21.45; Mon, 22 Apr 2019 17:21:59 -0700 (PDT) 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=gGZHBlha; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732361AbfDVUHD (ORCPT + 99 others); Mon, 22 Apr 2019 16:07:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:45456 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729434AbfDVToX (ORCPT ); Mon, 22 Apr 2019 15:44:23 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 13956218FD; Mon, 22 Apr 2019 19:44:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1555962262; bh=4zkFSQB55IgAdZlz0p/B/bZZ2mYz6c4f4DoI8DK36eQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gGZHBlha2Hxn7XpVllwpvl0AuhiYf4CwUgQlJ//6KloIsLsi7kRl3w7MEmR7WdWXK ySDgE0LEGFSBd8QDFSeagGdxP3wkax9k4hDZS2GP+nZ8NB/W5cCay+9M5WknZIS80K PiUTlLNJyvhSrZqE+lT3Bc7W4XYFPbTnrb0DhPss= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Steffen Maier , "Martin K . Petersen" , Sasha Levin , linux-s390@vger.kernel.org Subject: [PATCH AUTOSEL 5.0 72/98] scsi: zfcp: reduce flood of fcrscn1 trace records on multi-element RSCN Date: Mon, 22 Apr 2019 15:41:39 -0400 Message-Id: <20190422194205.10404-72-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190422194205.10404-1-sashal@kernel.org> References: <20190422194205.10404-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Steffen Maier [ Upstream commit c8206579175c34a2546de8a74262456278a7795a ] If an incoming ELS of type RSCN contains more than one element, zfcp suboptimally causes repeated erp trigger NOP trace records for each previously failed port. These could be ports that went away. It loops over each RSCN element, and for each of those in an inner loop over all zfcp_ports. The trigger to recover failed ports should be just the reception of some RSCN, no matter how many elements it has. So we can loop over failed ports separately, and only then loop over each RSCN element to handle the non-failed ports. The call chain was: zfcp_fc_incoming_rscn for (i = 1; i < no_entries; i++) _zfcp_fc_incoming_rscn list_for_each_entry(port, &adapter->port_list, list) if (masked port->d_id match) zfcp_fc_test_link if (!port->d_id) zfcp_erp_port_reopen "fcrscn1" <=== In order the reduce the "flooding" of the REC trace area in such cases, we factor out handling the failed ports to be outside of the entries loop: zfcp_fc_incoming_rscn if (no_entries > 1) <=== list_for_each_entry(port, &adapter->port_list, list) <=== if (!port->d_id) zfcp_erp_port_reopen "fcrscn1" <=== for (i = 1; i < no_entries; i++) _zfcp_fc_incoming_rscn list_for_each_entry(port, &adapter->port_list, list) if (masked port->d_id match) zfcp_fc_test_link Abbreviated example trace records before this code change: Tag : fcrscn1 WWPN : 0x500507630310d327 ERP want : 0x02 ERP need : 0x02 Tag : fcrscn1 WWPN : 0x500507630310d327 ERP want : 0x02 ERP need : 0x00 NOP => superfluous trace record The last trace entry repeats if there are more than 2 RSCN elements. Signed-off-by: Steffen Maier Reviewed-by: Benjamin Block Reviewed-by: Jens Remus Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin (Microsoft) --- drivers/s390/scsi/zfcp_fc.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index db00b5e3abbe..33eddb02ee30 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c @@ -239,10 +239,6 @@ static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, list_for_each_entry(port, &adapter->port_list, list) { if ((port->d_id & range) == (ntoh24(page->rscn_fid) & range)) zfcp_fc_test_link(port); - if (!port->d_id) - zfcp_erp_port_reopen(port, - ZFCP_STATUS_COMMON_ERP_FAILED, - "fcrscn1"); } read_unlock_irqrestore(&adapter->port_list_lock, flags); } @@ -250,6 +246,7 @@ static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req) { struct fsf_status_read_buffer *status_buffer = (void *)fsf_req->data; + struct zfcp_adapter *adapter = fsf_req->adapter; struct fc_els_rscn *head; struct fc_els_rscn_page *page; u16 i; @@ -263,6 +260,22 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req) no_entries = be16_to_cpu(head->rscn_plen) / sizeof(struct fc_els_rscn_page); + if (no_entries > 1) { + /* handle failed ports */ + unsigned long flags; + struct zfcp_port *port; + + read_lock_irqsave(&adapter->port_list_lock, flags); + list_for_each_entry(port, &adapter->port_list, list) { + if (port->d_id) + continue; + zfcp_erp_port_reopen(port, + ZFCP_STATUS_COMMON_ERP_FAILED, + "fcrscn1"); + } + read_unlock_irqrestore(&adapter->port_list_lock, flags); + } + for (i = 1; i < no_entries; i++) { /* skip head and start with 1st element */ page++; -- 2.19.1