afs: Fix double inc of vnode->cb_break
When __afs_break_callback() clears the CB_PROMISED flag, it increments
vnode->cb_break to trigger a future refetch of the status and callback -
however it also calls afs_clear_permits(), which also increments
vnode->cb_break.
Fix this by removing the increment from afs_clear_permits().
Whilst we're at it, fix the conditional call to afs_put_permits() as the
function checks to see if the argument is NULL, so the check is redundant.
Fixes: be080a6f43
("afs: Overhaul permit caching");
Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
c7226e407b
commit
fd711586bb
|
@ -87,11 +87,9 @@ void afs_clear_permits(struct afs_vnode *vnode)
|
||||||
permits = rcu_dereference_protected(vnode->permit_cache,
|
permits = rcu_dereference_protected(vnode->permit_cache,
|
||||||
lockdep_is_held(&vnode->lock));
|
lockdep_is_held(&vnode->lock));
|
||||||
RCU_INIT_POINTER(vnode->permit_cache, NULL);
|
RCU_INIT_POINTER(vnode->permit_cache, NULL);
|
||||||
vnode->cb_break++;
|
|
||||||
spin_unlock(&vnode->lock);
|
spin_unlock(&vnode->lock);
|
||||||
|
|
||||||
if (permits)
|
afs_put_permits(permits);
|
||||||
afs_put_permits(permits);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue