forked from Minki/linux
NFSv4: Keep dropped state owners on the LRU list for a while
To ensure that we don't reuse their identifiers. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c77365c963
commit
7bf97bc273
@ -521,6 +521,14 @@ out:
|
||||
/**
|
||||
* nfs4_put_state_owner - Release a nfs4_state_owner
|
||||
* @sp: state owner data to release
|
||||
*
|
||||
* Note that we keep released state owners on an LRU
|
||||
* list.
|
||||
* This caches valid state owners so that they can be
|
||||
* reused, to avoid the OPEN_CONFIRM on minor version 0.
|
||||
* It also pins the uniquifier of dropped state owners for
|
||||
* a while, to ensure that those state owner names are
|
||||
* never reused.
|
||||
*/
|
||||
void nfs4_put_state_owner(struct nfs4_state_owner *sp)
|
||||
{
|
||||
@ -530,15 +538,9 @@ void nfs4_put_state_owner(struct nfs4_state_owner *sp)
|
||||
if (!atomic_dec_and_lock(&sp->so_count, &clp->cl_lock))
|
||||
return;
|
||||
|
||||
if (!RB_EMPTY_NODE(&sp->so_server_node)) {
|
||||
sp->so_expires = jiffies;
|
||||
list_add_tail(&sp->so_lru, &server->state_owners_lru);
|
||||
spin_unlock(&clp->cl_lock);
|
||||
} else {
|
||||
nfs4_remove_state_owner_locked(sp);
|
||||
spin_unlock(&clp->cl_lock);
|
||||
nfs4_free_state_owner(sp);
|
||||
}
|
||||
sp->so_expires = jiffies;
|
||||
list_add_tail(&sp->so_lru, &server->state_owners_lru);
|
||||
spin_unlock(&clp->cl_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user