mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 20:10:23 +09:00
NFSv4.x: Don't return NFS4ERR_NOMATCHING_LAYOUT if we're unmounting
[ Upstream commit8926cc8302] 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:58ac3e5923("NFSv4/pnfs: Clean up nfs_layout_find_inode()") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5d254e17ca
commit
b4bf335aca
@@ -132,12 +132,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;
|
||||
@@ -171,9 +171,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;
|
||||
|
||||
Reference in New Issue
Block a user