Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp5224487ybl; Tue, 27 Aug 2019 01:05:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqw6yvnmceXCZfYuH+u94HcpC/7qUEMVBcxEoI4FfHkhEGPdhZ/RIeOBpJ07pG1F1pN4ho1D X-Received: by 2002:a17:90a:2841:: with SMTP id p1mr24424766pjf.101.1566893126577; Tue, 27 Aug 2019 01:05:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566893126; cv=none; d=google.com; s=arc-20160816; b=ZOkZvux6+oNH9PD+2uXYrygYzfJN8eezf03XQpWCN0cwnxBAqVShckyjlAz4tcIAaM eJrF+BujPwRcvS3RBZxFh3Ok+pq2Cr67pvX5YxuHVtBLvy4HXgeja69HG1FmE14q20fA 7ogHr/sTzPsDAtw52zMk0PciV2ByX3h+gIMTSHUGFyYdJGbCsbpZMatIpLvQSekEBZae zH+My+iYSPCgUxlTf02zaMkvo/wA9i879NI/236x4Fjr9ColdKZobVSQolmwhMcOoNGV NYfIHQNaXV14NjbxeZfdz0WoPbBiK8q7UNIeN7F6Or+QgRxOLjXUxPYuaiLwEyokHIun hLGA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=rD0rdK51VbBFf1zv4X0VYlpODQ1hOL1iA+sfWZ9K3Kc=; b=HKSgX6CLi0LSmsZ/117n/z0ZDLO2ffliCN3LC5w61U6hDxC+3D+HgUkrL3zmJGm28o d+f9jsWDvfuIFczaD5zmCNTXZpdy7IVAXqXhLXqONSK6tavsPBzZm8VT5ht9W7IHiKnq SPW3iM1nCwjh59wcC+Fyr0QQ6kxGqxvBP6S4Wk5YSI/kb+eGlRXQGQr9tKEukikdmpgY +IYMWHtmE4OpMWA/eTi75WJnaHcG6157l0VVIJhwDUgZlYR5dcrE4B0CPEZ60K6j996T 0FibioRpdUygjqep/c+iQqvaqypbo6GNstqEttWWHgY5dVDtz9gp1+ijArbqqYyq903A Vs2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=OoXyzm8D; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e1si12056504plt.276.2019.08.27.01.05.11; Tue, 27 Aug 2019 01:05:26 -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=OoXyzm8D; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732435AbfH0IEG (ORCPT + 99 others); Tue, 27 Aug 2019 04:04:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:33142 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730764AbfH0IDx (ORCPT ); Tue, 27 Aug 2019 04:03:53 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 44FF8206BF; Tue, 27 Aug 2019 08:03:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1566893032; bh=RC199nhAYZRtj3va6zftvMHOLXIDuyiqPEEpAliMEkk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OoXyzm8DG395oCe1crAKyEX1RvIE1wEqAMaQmBHfmEWEOagkj9mH+E/eSFLrjll6/ lmtFMzwwXICfIQUPOiF6TN64AuNl8+SMHM2DYojRKJIa0YmITzbZ7z0cdYTVOVTLii lNNxv9k+w00A3H9bV19pz0mfRGG2/cDf9wSWSrjs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Trond Myklebust , Sasha Levin Subject: [PATCH 5.2 096/162] NFSv4: Ensure state recovery handles ETIMEDOUT correctly Date: Tue, 27 Aug 2019 09:50:24 +0200 Message-Id: <20190827072741.557647315@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190827072738.093683223@linuxfoundation.org> References: <20190827072738.093683223@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 67e7b52d44e3d539dfbfcd866c3d3d69da23a909 ] Ensure that the state recovery code handles ETIMEDOUT correctly, and also that we set RPC_TASK_TIMEOUT when recovering open state. Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- fs/nfs/nfs4proc.c | 2 ++ fs/nfs/nfs4state.c | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 74e1732a4bd01..2023011c7a8fe 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -2150,6 +2150,7 @@ static int nfs4_handle_delegation_recall_error(struct nfs_server *server, struct case -ENOENT: case -EAGAIN: case -ESTALE: + case -ETIMEDOUT: break; case -NFS4ERR_BADSESSION: case -NFS4ERR_BADSLOT: @@ -2470,6 +2471,7 @@ static int nfs4_run_open_task(struct nfs4_opendata *data, if (!ctx) { nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, 1); data->is_recover = true; + task_setup_data.flags |= RPC_TASK_TIMEOUT; } else { nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, 0); pnfs_lgopen_prepare(data, ctx); diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 261de26d897f7..0e69cd846afb5 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -1528,6 +1528,7 @@ restart: switch (status) { case 0: break; + case -ETIMEDOUT: case -ESTALE: case -NFS4ERR_ADMIN_REVOKED: case -NFS4ERR_STALE_STATEID: @@ -1681,11 +1682,13 @@ restart: case -NFS4ERR_EXPIRED: case -NFS4ERR_NO_GRACE: nfs4_state_mark_reclaim_nograce(sp->so_server->nfs_client, state); + /* Fall through */ case -NFS4ERR_STALE_CLIENTID: case -NFS4ERR_BADSESSION: case -NFS4ERR_BADSLOT: case -NFS4ERR_BAD_HIGH_SLOT: case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION: + case -ETIMEDOUT: goto out_err; } nfs4_put_open_state(state); @@ -1970,7 +1973,6 @@ static int nfs4_handle_reclaim_lease_error(struct nfs_client *clp, int status) return -EPERM; case -EACCES: case -NFS4ERR_DELAY: - case -ETIMEDOUT: case -EAGAIN: ssleep(1); break; @@ -2599,7 +2601,7 @@ static void nfs4_state_manager(struct nfs_client *clp) } /* Now recover expired state... */ - if (test_and_clear_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) { + if (test_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) { section = "reclaim nograce"; status = nfs4_do_reclaim(clp, clp->cl_mvops->nograce_recovery_ops); @@ -2607,6 +2609,7 @@ static void nfs4_state_manager(struct nfs_client *clp) continue; if (status < 0) goto out_error; + clear_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state); } nfs4_end_drain_session(clp); -- 2.20.1