Commit bad4c585 authored by Dai Ngo's avatar Dai Ngo Committed by Chuck Lever

NFSD: send OP_CB_RECALL_ANY to clients when number of delegations reaches its limit

The NFS server should ask clients to voluntarily return unused
delegations when the number of granted delegations reaches the
max_delegations. This is so that the server can continue to
grant delegations for new requests.
Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Tested-by: default avatarChen Hanxiao <chenhx.fnst@fujitsu.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 7d5a352c
...@@ -87,6 +87,7 @@ static void nfs4_free_ol_stateid(struct nfs4_stid *stid); ...@@ -87,6 +87,7 @@ static void nfs4_free_ol_stateid(struct nfs4_stid *stid);
void nfsd4_end_grace(struct nfsd_net *nn); void nfsd4_end_grace(struct nfsd_net *nn);
static void _free_cpntf_state_locked(struct nfsd_net *nn, struct nfs4_cpntf_state *cps); static void _free_cpntf_state_locked(struct nfsd_net *nn, struct nfs4_cpntf_state *cps);
static void nfsd4_file_hash_remove(struct nfs4_file *fi); static void nfsd4_file_hash_remove(struct nfs4_file *fi);
static void deleg_reaper(struct nfsd_net *nn);
/* Locking: */ /* Locking: */
...@@ -6550,6 +6551,8 @@ nfs4_laundromat(struct nfsd_net *nn) ...@@ -6550,6 +6551,8 @@ nfs4_laundromat(struct nfsd_net *nn)
/* service the server-to-server copy delayed unmount list */ /* service the server-to-server copy delayed unmount list */
nfsd4_ssc_expire_umount(nn); nfsd4_ssc_expire_umount(nn);
#endif #endif
if (atomic_long_read(&num_delegations) >= max_delegations)
deleg_reaper(nn);
out: out:
return max_t(time64_t, lt.new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT); return max_t(time64_t, lt.new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment