mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 01:30:30 -04:00
NFSv4 server: Re-establish the delegation recall timeout
Commit7a606f280aallowed the server to do retries of CB_RECALL callbacks every couple of seconds. This was needed to allow the Linux client to re-establish the back channel. However this patch broke the delegation timeout check, such that it would just keep retrying CB_RECALLS. If the client has crashed or been network patitioned from the server, this continues until the client TCP reconnects to the server and re-establishes the back channel. This patch modifies the code such that it still times out the delegation recall after some minutes, so that the server will allow the conflicting client request once the delegation times out. This patch only affects the NFSv4 server when delegations are enabled and a NFSv4 client that holds a delegation has crashed or been network partitioned from the server for at least several minutes when a delegation needs to be recalled. (cherry picked from commit46269d66ed)
This commit is contained in:
parent
5f7ceb78f5
commit
4a4a174959
1 changed files with 3 additions and 2 deletions
|
|
@ -5292,8 +5292,9 @@ nfsrv_delegconflict(struct nfsstate *stp, int *haslockp, NFSPROC_T *p,
|
|||
* - check to see if the delegation has expired
|
||||
* - if so, get the v4root lock and then expire it
|
||||
*/
|
||||
if ((stp->ls_flags & NFSLCK_DELEGRECALL) == 0 || stp->ls_lastrecall <
|
||||
time_uptime) {
|
||||
if ((stp->ls_flags & NFSLCK_DELEGRECALL) == 0 || (stp->ls_lastrecall <
|
||||
NFSD_MONOSEC && clp->lc_expiry >= NFSD_MONOSEC &&
|
||||
stp->ls_delegtime >= NFSD_MONOSEC)) {
|
||||
/*
|
||||
* - do a recall callback, since not yet done
|
||||
* For now, never allow truncate to be set. To use
|
||||
|
|
|
|||
Loading…
Reference in a new issue