Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp2272730pxb; Fri, 8 Oct 2021 04:41:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz+hBEMl1bspWCfaxL6xRczyihz66HookT0jLGD3wLwgJrWetOgkREm9XFXvTaKmDYA7PZT X-Received: by 2002:a17:90a:1f4a:: with SMTP id y10mr10960055pjy.225.1633693277009; Fri, 08 Oct 2021 04:41:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633693277; cv=none; d=google.com; s=arc-20160816; b=Gul3+0WVhYUPReED4kTB6NhIM+NKV+ukWVNjCAGan6vKPILXW1xYO51tO2BEsWG7jv l7cHI8+DWs+2O6/Ek6YjfEK0TfjxBpDhy5wTOMUDr6youyq0/DzujZVTJt9TygnJv6lA SG1eo94Ht+S6KZW0KCNif5g5e+wb0P/32HNE4t+fZrylZwj6ZyFxBoARjdjisJt6eZtW NJpaYbeiKqK7Cvl9O3hS6mgN/saryzenCv/SEbLiykj57/WO0XC0jOyx15lc05u/c2tW 2GDyYMWQKBJt411AIFNq58a7b5bl3+doLbYmSjgDv41nVpaRVaE0ylRH0ZB4VjZ5J/Qp GDIQ== 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=qoKTipM08mRNqUW3MT4bijPIAuEMMgMBZGDZsuRXXkk=; b=cNERrNJl8bZ6StbhxAPZElBCsNu1VK1QHJmdzp6qD4oDL9akrwnxf8cbWN49Fi60Sf Q/LK44T5cewN5vYliG8rEpa57l3J/hDg3G7o7WmwZthTJSNM0A4qKUTG/JtIZv3kcTHB jq/ZTyAKh6q9rpDZq930PNttuWXApvTDpG4r5DQnvchFjHNDRqGHwoxZtvhWZnw6itD0 NJpZVqmfs/8XJRmLuVkvZYyaxPT1EQtF3Swo5F2UJ7M6oSOMC3oS/sJFhAVglIclULCX uskFccBFRKq8GP7Wg0anIOJT92ZhTR3SDP85Wx9CRDNPaam7hJ879lUYCUqIUO8P5lij 7Hzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xTTNdCso; 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 k20si2747956pls.358.2021.10.08.04.41.03; Fri, 08 Oct 2021 04:41:16 -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=xTTNdCso; 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 S241456AbhJHLk6 (ORCPT + 99 others); Fri, 8 Oct 2021 07:40:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:39522 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240463AbhJHLh5 (ORCPT ); Fri, 8 Oct 2021 07:37:57 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6F0F1613A7; Fri, 8 Oct 2021 11:32:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633692764; bh=8hgJn1Ih+9Ernuswh+NV/WK81g7IXRnOXBF10QK3Gsg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xTTNdCso78M/LwQG2KZH+AHBV/5ljaLwNuKIM0235McXR8J+kkAtykSeOdADW2uPJ Tcya+o33Tgk+d1t3g3f4oeb/GMC1dvhc9OXmBce+D626yFeZWF6+X63QaUsdoujTah zjOLvegL4uim+z1AeMIcXFZt5LrZqtyzvJLZ7Ga8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dai Ngo , Chuck Lever , Sasha Levin Subject: [PATCH 5.14 05/48] nfsd: back channel stuck in SEQ4_STATUS_CB_PATH_DOWN Date: Fri, 8 Oct 2021 13:27:41 +0200 Message-Id: <20211008112720.196748309@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211008112720.008415452@linuxfoundation.org> References: <20211008112720.008415452@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: Dai Ngo [ Upstream commit 02579b2ff8b0becfb51d85a975908ac4ab15fba8 ] When the back channel enters SEQ4_STATUS_CB_PATH_DOWN state, the client recovers by sending BIND_CONN_TO_SESSION but the server fails to recover the back channel and leaves it as NFSD4_CB_DOWN. Fix by enhancing nfsd4_bind_conn_to_session to probe the back channel by calling nfsd4_probe_callback. Signed-off-by: Dai Ngo Signed-off-by: Chuck Lever Signed-off-by: Sasha Levin --- fs/nfsd/nfs4state.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 3d805f5b1f5d..1c33a5255893 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -3570,7 +3570,7 @@ static struct nfsd4_conn *__nfsd4_find_conn(struct svc_xprt *xpt, struct nfsd4_s } static __be32 nfsd4_match_existing_connection(struct svc_rqst *rqst, - struct nfsd4_session *session, u32 req) + struct nfsd4_session *session, u32 req, struct nfsd4_conn **conn) { struct nfs4_client *clp = session->se_client; struct svc_xprt *xpt = rqst->rq_xprt; @@ -3593,6 +3593,8 @@ static __be32 nfsd4_match_existing_connection(struct svc_rqst *rqst, else status = nfserr_inval; spin_unlock(&clp->cl_lock); + if (status == nfs_ok && conn) + *conn = c; return status; } @@ -3617,8 +3619,16 @@ __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp, status = nfserr_wrong_cred; if (!nfsd4_mach_creds_match(session->se_client, rqstp)) goto out; - status = nfsd4_match_existing_connection(rqstp, session, bcts->dir); - if (status == nfs_ok || status == nfserr_inval) + status = nfsd4_match_existing_connection(rqstp, session, + bcts->dir, &conn); + if (status == nfs_ok) { + if (bcts->dir == NFS4_CDFC4_FORE_OR_BOTH || + bcts->dir == NFS4_CDFC4_BACK) + conn->cn_flags |= NFS4_CDFC4_BACK; + nfsd4_probe_callback(session->se_client); + goto out; + } + if (status == nfserr_inval) goto out; status = nfsd4_map_bcts_dir(&bcts->dir); if (status) -- 2.33.0