From patchwork Fri Apr 16 12:51:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12207587 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=-19.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 20D27C433B4 for ; Fri, 16 Apr 2021 12:51:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E55C661107 for ; Fri, 16 Apr 2021 12:51:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235196AbhDPMvr (ORCPT ); Fri, 16 Apr 2021 08:51:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:35714 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234914AbhDPMvr (ORCPT ); Fri, 16 Apr 2021 08:51:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 40ED361107 for ; Fri, 16 Apr 2021 12:51:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618577482; bh=XwhwI5O70I53p3eCI1cotWC82Z5xWdWRLUHkXEBNUUg=; h=From:To:Subject:Date:From; b=q3uZ4Ibfl1XpnuPzzsNYybk02s4OOyvKdzc+u0DafHjBxbccr6FO/C8LsIu+QhhDC 138e1z/PqYTc17UrUm4aH30X184em+V7KphVZAK/dxiO99xhCTU+7S37pIJkpUF3lj RCmiEjiOAt/0ThR5+MIWrza0EEP5EQzogudVjk/4PvUjTTimaXfZJyUlq3pL+38LpF x6uf64dqwew+2hzbwwAd9SCzWwGVJxeLMg15sxThvUeICmks23v0wojP/hkQJpzQqS zHe6vAoWt+f2J5BrCG2sgwf9HR6C9bRg+EYxkw0XQA1CIhbvlOTCIpUuBAoveqAUQ9 u9t3poqpZFq6g== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 1/3] NFSv4.x: Don't return NFS4ERR_NOMATCHING_LAYOUT if we're unmounting Date: Fri, 16 Apr 2021 08:51:19 -0400 Message-Id: <20210416125121.5753-1-trondmy@kernel.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust If the NFS super block is being unmounted, then we currently may end up telling the server that we've forgotten the layout while it is actually still in use by the client. In that case, just assume that the client will soon return the layout anyway, and so return NFS4ERR_DELAY in response to the layout recall. Fixes: 58ac3e59235f ("NFSv4/pnfs: Clean up nfs_layout_find_inode()") Signed-off-by: Trond Myklebust --- fs/nfs/callback_proc.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index f7786e00a6a7..ed9d580826f5 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c @@ -137,12 +137,12 @@ static struct inode *nfs_layout_find_inode_by_stateid(struct nfs_client *clp, list_for_each_entry_rcu(lo, &server->layouts, plh_layouts) { if (!pnfs_layout_is_valid(lo)) continue; - if (stateid != NULL && - !nfs4_stateid_match_other(stateid, &lo->plh_stateid)) + if (!nfs4_stateid_match_other(stateid, &lo->plh_stateid)) continue; - if (!nfs_sb_active(server->super)) - continue; - inode = igrab(lo->plh_inode); + if (nfs_sb_active(server->super)) + inode = igrab(lo->plh_inode); + else + inode = ERR_PTR(-EAGAIN); rcu_read_unlock(); if (inode) return inode; @@ -176,9 +176,10 @@ static struct inode *nfs_layout_find_inode_by_fh(struct nfs_client *clp, continue; if (nfsi->layout != lo) continue; - if (!nfs_sb_active(server->super)) - continue; - inode = igrab(lo->plh_inode); + if (nfs_sb_active(server->super)) + inode = igrab(lo->plh_inode); + else + inode = ERR_PTR(-EAGAIN); rcu_read_unlock(); if (inode) return inode; From patchwork Fri Apr 16 12:51:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12207591 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=-19.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 E0513C43460 for ; Fri, 16 Apr 2021 12:51:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B5D3B6103D for ; Fri, 16 Apr 2021 12:51:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235380AbhDPMvt (ORCPT ); Fri, 16 Apr 2021 08:51:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:35716 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235074AbhDPMvr (ORCPT ); Fri, 16 Apr 2021 08:51:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B569A6103D for ; Fri, 16 Apr 2021 12:51:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618577483; bh=ijex2z8/kODg4PSt5ZQiK6w+Q97FqhwamqOjaJNPeos=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Si1goF+nSejSEsGwNCnea8g5ezJnN3j9epLbHKpv+gxaDpxv63k2B0HXsyuDXkJAF 2xwlSnWI0NBsEtjGARrvqukw21rW0P/UPq+toKayI++Z2hOYy/TFvABmDmSXPlTob8 VZyjcIht1slna51uKOabCMdE0cBEHXIpdx131w/DsUWzjb65gjO9VWM8R0pa8PjHDy sNI/v3KZWSQ8BPMJmoy5Kr+f3+atES6crEbDMmZ0S7Fb8QFhSlQQdLwnQU3qsRpxGg uLGgHeHhpTwPAgPPb8xdifx1/6+5+7CxE2aurC3Pum15ELEhwGN4o7FVCZ/663/sLd no4QU1YSwYaLg== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 2/3] NFS: Don't discard pNFS layout segments that are marked for return Date: Fri, 16 Apr 2021 08:51:20 -0400 Message-Id: <20210416125121.5753-2-trondmy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210416125121.5753-1-trondmy@kernel.org> References: <20210416125121.5753-1-trondmy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust If the pNFS layout segment is marked with the NFS_LSEG_LAYOUTRETURN flag, then the assumption is that it has some reporting requirement to perform through a layoutreturn (e.g. flexfiles layout stats or error information). Fixes: e0b7d420f72a ("pNFS: Don't discard layout segments that are marked for return") Cc: stable@vger.kernel.org Signed-off-by: Trond Myklebust --- fs/nfs/pnfs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 102b66e0bdef..33574f47601f 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -2468,6 +2468,9 @@ pnfs_mark_matching_lsegs_return(struct pnfs_layout_hdr *lo, assert_spin_locked(&lo->plh_inode->i_lock); + if (test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags)) + tmp_list = &lo->plh_return_segs; + list_for_each_entry_safe(lseg, next, &lo->plh_segs, pls_list) if (pnfs_match_lseg_recall(lseg, return_range, seq)) { dprintk("%s: marking lseg %p iomode %d " @@ -2475,6 +2478,8 @@ pnfs_mark_matching_lsegs_return(struct pnfs_layout_hdr *lo, lseg, lseg->pls_range.iomode, lseg->pls_range.offset, lseg->pls_range.length); + if (test_bit(NFS_LSEG_LAYOUTRETURN, &lseg->pls_flags)) + tmp_list = &lo->plh_return_segs; if (mark_lseg_invalid(lseg, tmp_list)) continue; remaining++; From patchwork Fri Apr 16 12:51:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12207589 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=-19.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 A3A12C433ED for ; Fri, 16 Apr 2021 12:51:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 70F1C6103D for ; Fri, 16 Apr 2021 12:51:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234914AbhDPMvs (ORCPT ); Fri, 16 Apr 2021 08:51:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:35718 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235380AbhDPMvs (ORCPT ); Fri, 16 Apr 2021 08:51:48 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3CCD2611AF for ; Fri, 16 Apr 2021 12:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618577483; bh=cOdIbZKTeK6rt2Pws0vFZ/fMa+bF1QPSomfPQeBo/Kk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=JUjMz9iwiEfrgBOCT45FTIb2yJE15DHmGw4PWUsYwOhKjx6XlmQtJXpOaT8VJmIyu psvpK0x0xfTxYFxJpx2ENp1soQFr7Rua0G72XHfJuDCFP4mXJVWTKq3yJwUYX1rIst U/h5iW/htcvhQNa4x1iFb0aUM7GggfTIp9SFsi2az1UDD1AI0MEZC9XRC3HtJvdzv1 /0uOYqbzWKgQy9nxcHZa+5SqcycWB2vPHjIqSi3xWiD9R6HU27KTO7AbZgvIdtjyMa ie1LTncUlFLCqftS50hSMy+Yre9A4rOuegDPLOLXOC74AGPgRh7wwY5zNJLSd4eRDE U6ZNi618FgugA== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 3/3] NFSv4.1: Simplify layout return in pnfs_layout_process() Date: Fri, 16 Apr 2021 08:51:21 -0400 Message-Id: <20210416125121.5753-3-trondmy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210416125121.5753-2-trondmy@kernel.org> References: <20210416125121.5753-1-trondmy@kernel.org> <20210416125121.5753-2-trondmy@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust If the server hands us a layout that does not match the one we currently hold, then have pnfs_mark_matching_lsegs_return() just ditch the old layout if NFS_LSEG_LAYOUTRETURN is not set. Signed-off-by: Trond Myklebust --- fs/nfs/pnfs.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 33574f47601f..fa22b4be9212 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -2410,9 +2410,7 @@ pnfs_layout_process(struct nfs4_layoutget *lgp) .iomode = IOMODE_ANY, .length = NFS4_MAX_UINT64, }; - pnfs_set_plh_return_info(lo, IOMODE_ANY, 0); - pnfs_mark_matching_lsegs_return(lo, &lo->plh_return_segs, - &range, 0); + pnfs_mark_matching_lsegs_return(lo, &free_me, &range, 0); goto out_forget; } else { /* We have a completely new layout */