From patchwork Mon Sep 21 16:27:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "gregkh@linuxfoundation.org" X-Patchwork-Id: 263741 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A2C4C43465 for ; Mon, 21 Sep 2020 16:35:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 44AA4238EE for ; Mon, 21 Sep 2020 16:35:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600706145; bh=MaFMx5gO+2NKZffy8/3R82fJO4iXfuEe2l+wzPWVhs0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=EFurTW+6L5xd7kIAQqXsusNOMUQOf7WTrAxigOwoP6ZmvVRBcdQftsrrlwpBzONfG VgDQufxK4rJpy9N98k7Q9QsDKwpTHNZueGvCsteS4ovzkgCnWkFKa4AkR7ekDg9sSr 4mwFV4kS8weIGQtS6EIi9NmOnu7+QIxOLk60zRK0= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728103AbgIUQfa (ORCPT ); Mon, 21 Sep 2020 12:35:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:34724 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728861AbgIUQf3 (ORCPT ); Mon, 21 Sep 2020 12:35:29 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 0651C2399C; Mon, 21 Sep 2020 16:35:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600706129; bh=MaFMx5gO+2NKZffy8/3R82fJO4iXfuEe2l+wzPWVhs0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JH1QNfpfTOaXtoV5rvjfsD5kJyo1de04ugbB+hrlUXGK4qFUm+pF6rx7Kh1ntnrdk 2gplaE6bJ1JDmTO4nEPu8WRdQdRqCGa7wrinpHOJPhrNkqPg31yXg+1O/cnimMEHTZ hId0E4JVWtBYpl4j8MZ+7l6Src5iggJH2t7ECDSU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Olga Kornievskaia , Trond Myklebust , Sasha Levin Subject: [PATCH 4.9 49/70] NFSv4.1 handle ERR_DELAY error reclaiming locking state on delegation recall Date: Mon, 21 Sep 2020 18:27:49 +0200 Message-Id: <20200921162037.360450384@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200921162035.136047591@linuxfoundation.org> References: <20200921162035.136047591@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Olga Kornievskaia [ Upstream commit 3d7a9520f0c3e6a68b6de8c5812fc8b6d7a52626 ] A client should be able to handle getting an ERR_DELAY error while doing a LOCK call to reclaim state due to delegation being recalled. This is a transient error that can happen due to server moving its volumes and invalidating its file location cache and upon reference to it during the LOCK call needing to do an expensive lookup (leading to an ERR_DELAY error on a PUTFH). Signed-off-by: Olga Kornievskaia Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- fs/nfs/nfs4proc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 714457bb1440a..4e2f18c26535d 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -6527,7 +6527,12 @@ int nfs4_lock_delegation_recall(struct file_lock *fl, struct nfs4_state *state, err = nfs4_set_lock_state(state, fl); if (err != 0) return err; - err = _nfs4_do_setlk(state, F_SETLK, fl, NFS_LOCK_NEW); + do { + err = _nfs4_do_setlk(state, F_SETLK, fl, NFS_LOCK_NEW); + if (err != -NFS4ERR_DELAY) + break; + ssleep(1); + } while (err == -NFS4ERR_DELAY); return nfs4_handle_delegation_recall_error(server, state, stateid, fl, err); }