From a726d1d36830d35c0cc2b083eae4b225058920d4 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Tue, 11 May 2021 16:33:08 +0800 Subject: [PATCH] pNFS/NFSv4: Try to return invalid layout in pnfs_layout_process() stable inclusion from linux-4.19.176 commit 682821d905f77005b1b85684608dfc75e75422a9 -------------------------------- [ Upstream commit 08bd8dbe88825760e953759d7ec212903a026c75 ] If the server returns a new stateid that does not match the one in our cache, then try to return the one we hold instead of just invalidating it on the client side. This ensures that both client and server will agree that the stateid is invalid. Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin Signed-off-by: Yang Yingliang Reviewed-by: Hou Tao Signed-off-by: Yang Yingliang --- fs/nfs/pnfs.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 4b165aa5a256..55965e8e9a2e 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -2301,7 +2301,13 @@ pnfs_layout_process(struct nfs4_layoutget *lgp) * We got an entirely new state ID. Mark all segments for the * inode invalid, and retry the layoutget */ - pnfs_mark_layout_stateid_invalid(lo, &free_me); + struct pnfs_layout_range range = { + .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); goto out_forget; } -- GitLab