From patchwork Mon Apr 19 14:47:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12212009 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 3D3F3C433ED for ; Mon, 19 Apr 2021 14:48:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1092E611CE for ; Mon, 19 Apr 2021 14:48:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240270AbhDSOsa (ORCPT ); Mon, 19 Apr 2021 10:48:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:37830 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240158AbhDSOsa (ORCPT ); Mon, 19 Apr 2021 10:48:30 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 72C2360FEF for ; Mon, 19 Apr 2021 14:48:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618843680; bh=T97p+6570ccrtjZwCyLc7/y2oqyNhjOf8D40hUaSDX8=; h=From:To:Subject:Date:From; b=YVq6BlkBJHdDMdrOPIV/cNnFqhbCd/nNzsyvI0VGMpz4GfPsWa3o3OKa2ft37ax0U py02zP3OkA3BhrpcsMzWTUj+C5DnckpYtUqdUleNylN15q7OMuoz2SaMBHrgBbubdA wHUI+fO6ov6HbrB34kwhAVnHxoprmjF1dsFEDvm+uP2z0oLW3Nobvsmq99H03uGYyV LFnDkDVftbkHPxVOgt82G3BQlI/E36mghz+xofB9ZUwuOtDbFbX4HLPt6lhaNP06AF gD8jV5XMW1UuUx63e3AKo+kOfeCq9n7HqJRbG/Vx6E0MzXxN6MMc2AH1lzAl+jcqKy gr+/wML42s5hg== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH v2 1/4] NFSv4.x: Don't return NFS4ERR_NOMATCHING_LAYOUT if we're unmounting Date: Mon, 19 Apr 2021 10:47:56 -0400 Message-Id: <20210419144759.41900-1-trondmy@kernel.org> X-Mailer: git-send-email 2.31.1 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 Mon Apr 19 14:47:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12212011 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 DA64AC433B4 for ; Mon, 19 Apr 2021 14:48:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AD05F611CE for ; Mon, 19 Apr 2021 14:48:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240377AbhDSOsb (ORCPT ); Mon, 19 Apr 2021 10:48:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:37834 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240158AbhDSOsb (ORCPT ); Mon, 19 Apr 2021 10:48:31 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 08B08611CE for ; Mon, 19 Apr 2021 14:48:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618843681; bh=S/4BQn47RBXS/z6C9WL4z+GqX6Vb07vbeLClbH0BmpU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=VExfY+1ZzaXDPAiQIow32Woz81LPuBZ/MnhbNH6HQo4KzBTVDWg8EOT0m4fQPHUcK Yc9yeJyt3JVAHoR5QwcTJ+rO25wT0uwoPQXuQCaFZM7eEynruE89wrPO4RcIf6tPDv ++ROIUigcaLJ6SnZg3lm4LHIERrBhLWOq1WtCm0FjYip3aPZfBR2e8l8kJ4Szpfxbs u5nivvey6HakijJxy5o/RAikgcIszFYoWOoo60AdsHiGaS7+EQBjdDPHb9pvaV6YHx RbSXaOZWtj8twk6hD3wP25DAhuHdgKIkX8NNvMDHme1Qhh+d2by8aVfznz8lD3pwFT iIxrPfdHiU/yw== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH v2 2/4] NFS: Don't discard pNFS layout segments that are marked for return Date: Mon, 19 Apr 2021 10:47:57 -0400 Message-Id: <20210419144759.41900-2-trondmy@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210419144759.41900-1-trondmy@kernel.org> References: <20210419144759.41900-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 Mon Apr 19 14:47:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12212013 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 915C6C43461 for ; Mon, 19 Apr 2021 14:48:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7220661245 for ; Mon, 19 Apr 2021 14:48:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240434AbhDSOsc (ORCPT ); Mon, 19 Apr 2021 10:48:32 -0400 Received: from mail.kernel.org ([198.145.29.99]:37842 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240158AbhDSOsc (ORCPT ); Mon, 19 Apr 2021 10:48:32 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id DA59F61245 for ; Mon, 19 Apr 2021 14:48:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618843682; bh=pvb/THyD1+647NAO7H2Hx6b2RD1W8HE3vmnp13DWcWQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=PMAzGPejnrEhm91N7x4tQdCuBE9FQbsIQmrDsg+2T0rQX437INsR7xhBoxjuvih45 lrxkUqVwE2qUZKfgWYTyvcX4OxVA7RSa09pTPaeNu2zX6chevCl91wQuEcE/3mCaUw xl9Nsain8Qjr0fB1czNJ1DeNv8F7DYb8G7lq4yDx1ynVzWiiHn1iOjFusTOELo+zfY bWoHsoSz0f9Z5TqYi6hqpJ2wcB/1C6nt5ANklsn/aAjIT+NlpvxdZOt8YclarJsO1t ULlDsFDfYZWB6/bt2/5qblaWWViPLz9IZuqULUkFnrsjSdCtk1fq0ENw1j+VeMpc+k lmmtgiQvsbC1g== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH v2 3/4] NFSv4: Don't discard segments marked for return in _pnfs_return_layout() Date: Mon, 19 Apr 2021 10:47:58 -0400 Message-Id: <20210419144759.41900-3-trondmy@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210419144759.41900-2-trondmy@kernel.org> References: <20210419144759.41900-1-trondmy@kernel.org> <20210419144759.41900-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 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: 6d597e175012 ("pnfs: only tear down lsegs that precede seqid in LAYOUTRETURN args") Cc: stable@vger.kernel.org Signed-off-by: Trond Myklebust --- fs/nfs/pnfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 33574f47601f..f726f8b12b7e 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -1344,7 +1344,7 @@ _pnfs_return_layout(struct inode *ino) } valid_layout = pnfs_layout_is_valid(lo); pnfs_clear_layoutcommit(ino, &tmp_list); - pnfs_mark_matching_lsegs_invalid(lo, &tmp_list, NULL, 0); + pnfs_mark_matching_lsegs_return(lo, &tmp_list, NULL, 0); if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { struct pnfs_layout_range range = { From patchwork Mon Apr 19 14:47:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 12212015 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 81AA7C433B4 for ; Mon, 19 Apr 2021 14:48:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 654D260FEF for ; Mon, 19 Apr 2021 14:48:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240506AbhDSOse (ORCPT ); Mon, 19 Apr 2021 10:48:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:37856 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240158AbhDSOsd (ORCPT ); Mon, 19 Apr 2021 10:48:33 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id BFD4960FEF for ; Mon, 19 Apr 2021 14:48:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618843683; bh=NyE7lgW7JS68D+jqPJw5rVuyTCrhw4jAOADTQwHAVl0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=kBOXRZxqZ9ipDpYyQmG0cZvq6cm05EvG0tH/GfRToTgDL5HwTwUWBf9wSYxM6mNV2 8N3c7FI8exFio/r5bnYe+c8FmrQ0GdVg9v7kxa7m355t9KBg+M7gL3zSMyJe8YHjpg 51VCCubfgoEegR0XvVzanb7fuYnJ+rOzS1+g78xuP3bsTvzKqldKSaxZiby7U8Trdm UISqcIysiMys94NkGmW7kQSCtHabAyNc3+s7preRUGUCoeRar2zli+HVEmX5JJToHs G2R9yhRya1jdZIAtRUjEGG/nlDaWYjVBwhXNSTTrM4oDKOxD/PvUkYis3Jsj03Gurp e/59qB+jWXmSw== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH v2 4/4] NFSv4.1: Simplify layout return in pnfs_layout_process() Date: Mon, 19 Apr 2021 10:47:59 -0400 Message-Id: <20210419144759.41900-4-trondmy@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210419144759.41900-3-trondmy@kernel.org> References: <20210419144759.41900-1-trondmy@kernel.org> <20210419144759.41900-2-trondmy@kernel.org> <20210419144759.41900-3-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 f726f8b12b7e..03e0b34c4a64 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 */