sunrpc: add a get_rpccred_rcu inline
Sometimes we might have a RCU managed credential pointer and don't want to use locking to handle it. Add a function that will take a reference to the cred iff the refcount is not already zero. Callers can dereference the pointer under the rcu_read_lock and use that function to take a reference only if the cred is not on its way to destruction. Signed-off-by: Jeff Layton <jeff.layton@primarydata.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
c065d229e3
commit
62dbef2ae4
|
@ -206,5 +206,23 @@ struct rpc_cred * get_rpccred(struct rpc_cred *cred)
|
|||
return cred;
|
||||
}
|
||||
|
||||
/**
|
||||
* get_rpccred_rcu - get a reference to a cred using rcu-protected pointer
|
||||
* @cred: cred of which to take a reference
|
||||
*
|
||||
* In some cases, we may have a pointer to a credential to which we
|
||||
* want to take a reference, but don't already have one. Because these
|
||||
* objects are freed using RCU, we can access the cr_count while its
|
||||
* on its way to destruction and only take a reference if it's not already
|
||||
* zero.
|
||||
*/
|
||||
static inline struct rpc_cred *
|
||||
get_rpccred_rcu(struct rpc_cred *cred)
|
||||
{
|
||||
if (atomic_inc_not_zero(&cred->cr_count))
|
||||
return cred;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_SUNRPC_AUTH_H */
|
||||
|
|
Loading…
Reference in New Issue