Don't queue delegation request, if ve init is exiting. https://jira.sw.ru/browse/PSBM-77061
Inspired-by: Kirill Tkhai <ktk...@virtuozzo.com> Signed-off-by: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com> --- fs/nfs/delegation.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c index 66af497..2422754 100644 --- a/fs/nfs/delegation.c +++ b/fs/nfs/delegation.c @@ -189,15 +189,29 @@ void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred, nfs_inode_set_delegation(inode, cred, res); } +static bool ve_abort_delegation(struct inode *inode) +{ + struct nfs_client *clp = NFS_SERVER(inode)->nfs_client; + struct rpc_xprt *xprt; + + rcu_read_lock(); + xprt = rcu_dereference(clp->cl_rpcclient->cl_xprt); + rcu_read_unlock(); + + return xprt->xprt_net->owner_ve->ve_netns == NULL; +} + static int nfs_do_return_delegation(struct inode *inode, struct nfs_delegation *delegation, int issync) { int res = 0; - if (!test_bit(NFS_DELEGATION_REVOKED, &delegation->flags)) + if (!test_bit(NFS_DELEGATION_REVOKED, &delegation->flags) && + !ve_abort_delegation(inode)) { res = nfs4_proc_delegreturn(inode, delegation->cred, &delegation->stateid, issync); + } nfs_free_delegation(delegation); return res; } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel