From patchwork Thu Feb 27 21:13:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Simmons X-Patchwork-Id: 11410209 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3387B138D for ; Thu, 27 Feb 2020 21:32:45 +0000 (UTC) Received: from pdx1-mailman02.dreamhost.com (pdx1-mailman02.dreamhost.com [64.90.62.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1C2DB24677 for ; Thu, 27 Feb 2020 21:32:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1C2DB24677 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lustre-devel-bounces@lists.lustre.org Received: from pdx1-mailman02.dreamhost.com (localhost [IPv6:::1]) by pdx1-mailman02.dreamhost.com (Postfix) with ESMTP id 40E46349B28; Thu, 27 Feb 2020 13:27:46 -0800 (PST) X-Original-To: lustre-devel@lists.lustre.org Delivered-To: lustre-devel-lustre.org@pdx1-mailman02.dreamhost.com Received: from smtp3.ccs.ornl.gov (smtp3.ccs.ornl.gov [160.91.203.39]) by pdx1-mailman02.dreamhost.com (Postfix) with ESMTP id 7D33621FF02 for ; Thu, 27 Feb 2020 13:19:55 -0800 (PST) Received: from star.ccs.ornl.gov (star.ccs.ornl.gov [160.91.202.134]) by smtp3.ccs.ornl.gov (Postfix) with ESMTP id 0DD9F8A51; Thu, 27 Feb 2020 16:18:17 -0500 (EST) Received: by star.ccs.ornl.gov (Postfix, from userid 2004) id 0CA9E468; Thu, 27 Feb 2020 16:18:17 -0500 (EST) From: James Simmons To: Andreas Dilger , Oleg Drokin , NeilBrown Date: Thu, 27 Feb 2020 16:13:04 -0500 Message-Id: <1582838290-17243-317-git-send-email-jsimmons@infradead.org> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1582838290-17243-1-git-send-email-jsimmons@infradead.org> References: <1582838290-17243-1-git-send-email-jsimmons@infradead.org> Subject: [lustre-devel] [PATCH 316/622] lnet: recovery event handling broken X-BeenThere: lustre-devel@lists.lustre.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "For discussing Lustre software development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Amir Shehata , Lustre Development List MIME-Version: 1.0 Errors-To: lustre-devel-bounces@lists.lustre.org Sender: "lustre-devel" From: Amir Shehata Don't increment health on unlink event. If a SEND fails an unlink will follow so no need to do any special processing on SEND event. If SEND succeeds then we wait for the reply. When queuing a message on the NI recovery queue only do so if the MT thread is still running. WC-bug-id: https://jira.whamcloud.com/browse/LU-12080 Lustre-commit: 5409e620e025 ("LU-12080 lnet: recovery event handling broken") Signed-off-by: Amir Shehata Reviewed-on: https://review.whamcloud.com/34445 Reviewed-by: Olaf Weber Reviewed-by: Sebastien Buisson Reviewed-by: Chris Horn Signed-off-by: James Simmons --- net/lnet/lnet/lib-move.c | 9 +++++---- net/lnet/lnet/lib-msg.c | 5 +++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/net/lnet/lnet/lib-move.c b/net/lnet/lnet/lib-move.c index 809d2b6..a6df9ba 100644 --- a/net/lnet/lnet/lib-move.c +++ b/net/lnet/lnet/lib-move.c @@ -3197,7 +3197,7 @@ struct lnet_mt_event_info { static void lnet_handle_recovery_reply(struct lnet_mt_event_info *ev_info, - int status) + int status, bool unlink_event) { lnet_nid_t nid = ev_info->mt_nid; @@ -3228,7 +3228,8 @@ struct lnet_mt_event_info { * carry forward too much information. * In the peer case, it'll naturally be incremented */ - lnet_inc_healthv(&ni->ni_healthv); + if (!unlink_event) + lnet_inc_healthv(&ni->ni_healthv); } else { struct lnet_peer_ni *lpni; int cpt; @@ -3273,14 +3274,14 @@ struct lnet_mt_event_info { libcfs_nid2str(ev_info->mt_nid)); /* fall-through */ case LNET_EVENT_REPLY: - lnet_handle_recovery_reply(ev_info, event->status); + lnet_handle_recovery_reply(ev_info, event->status, + event->type == LNET_EVENT_UNLINK); break; case LNET_EVENT_SEND: CDEBUG(D_NET, "%s recovery message sent %s:%d\n", libcfs_nid2str(ev_info->mt_nid), (event->status) ? "unsuccessfully" : "successfully", event->status); - lnet_handle_recovery_reply(ev_info, event->status); break; default: CERROR("Unexpected event: %d\n", event->type); diff --git a/net/lnet/lnet/lib-msg.c b/net/lnet/lnet/lib-msg.c index 0738bf7..146e23c 100644 --- a/net/lnet/lnet/lib-msg.c +++ b/net/lnet/lnet/lib-msg.c @@ -521,6 +521,11 @@ return; lnet_net_lock(0); + /* the mt could've shutdown and cleaned up the queues */ + if (the_lnet.ln_mt_state != LNET_MT_STATE_RUNNING) { + lnet_net_unlock(0); + return; + } lnet_handle_remote_failure_locked(lpni); lnet_net_unlock(0); }