SUNRPC: Convert auth creds to use refcount_t

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Trond Myklebust 2018-10-14 10:34:31 -04:00
parent 07d02a67b7
commit 79b1818102
3 changed files with 10 additions and 10 deletions

View File

@ -67,7 +67,7 @@ struct rpc_cred {
const struct rpc_credops *cr_ops; const struct rpc_credops *cr_ops;
unsigned long cr_expire; /* when to gc */ unsigned long cr_expire; /* when to gc */
unsigned long cr_flags; /* various flags */ unsigned long cr_flags; /* various flags */
atomic_t cr_count; /* ref count */ refcount_t cr_count; /* ref count */
kuid_t cr_uid; kuid_t cr_uid;
@ -208,7 +208,7 @@ char * rpcauth_stringify_acceptor(struct rpc_cred *);
static inline static inline
struct rpc_cred *get_rpccred(struct rpc_cred *cred) struct rpc_cred *get_rpccred(struct rpc_cred *cred)
{ {
if (cred != NULL && atomic_inc_not_zero(&cred->cr_count)) if (cred != NULL && refcount_inc_not_zero(&cred->cr_count))
return cred; return cred;
return NULL; return NULL;
} }

View File

@ -495,7 +495,7 @@ rpcauth_prune_expired(struct list_head *free, int nr_to_scan)
if (nr_to_scan-- == 0) if (nr_to_scan-- == 0)
break; break;
if (atomic_read(&cred->cr_count) > 1) { if (refcount_read(&cred->cr_count) > 1) {
rpcauth_lru_remove_locked(cred); rpcauth_lru_remove_locked(cred);
continue; continue;
} }
@ -589,7 +589,7 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,
continue; continue;
if (flags & RPCAUTH_LOOKUP_RCU) { if (flags & RPCAUTH_LOOKUP_RCU) {
if (test_bit(RPCAUTH_CRED_NEW, &entry->cr_flags) || if (test_bit(RPCAUTH_CRED_NEW, &entry->cr_flags) ||
atomic_read(&entry->cr_count) == 0) refcount_read(&entry->cr_count) == 0)
continue; continue;
cred = entry; cred = entry;
break; break;
@ -623,7 +623,7 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,
if (cred == NULL) { if (cred == NULL) {
cred = new; cred = new;
set_bit(RPCAUTH_CRED_HASHED, &cred->cr_flags); set_bit(RPCAUTH_CRED_HASHED, &cred->cr_flags);
atomic_inc(&cred->cr_count); refcount_inc(&cred->cr_count);
hlist_add_head_rcu(&cred->cr_hash, &cache->hashtable[nr]); hlist_add_head_rcu(&cred->cr_hash, &cache->hashtable[nr]);
} else } else
list_add_tail(&new->cr_lru, &free); list_add_tail(&new->cr_lru, &free);
@ -670,7 +670,7 @@ rpcauth_init_cred(struct rpc_cred *cred, const struct auth_cred *acred,
{ {
INIT_HLIST_NODE(&cred->cr_hash); INIT_HLIST_NODE(&cred->cr_hash);
INIT_LIST_HEAD(&cred->cr_lru); INIT_LIST_HEAD(&cred->cr_lru);
atomic_set(&cred->cr_count, 1); refcount_set(&cred->cr_count, 1);
cred->cr_auth = auth; cred->cr_auth = auth;
cred->cr_ops = ops; cred->cr_ops = ops;
cred->cr_expire = jiffies; cred->cr_expire = jiffies;
@ -739,9 +739,9 @@ put_rpccred(struct rpc_cred *cred)
if (cred == NULL) if (cred == NULL)
return; return;
rcu_read_lock(); rcu_read_lock();
if (atomic_dec_and_test(&cred->cr_count)) if (refcount_dec_and_test(&cred->cr_count))
goto destroy; goto destroy;
if (atomic_read(&cred->cr_count) != 1 || if (refcount_read(&cred->cr_count) != 1 ||
!test_bit(RPCAUTH_CRED_HASHED, &cred->cr_flags)) !test_bit(RPCAUTH_CRED_HASHED, &cred->cr_flags))
goto out; goto out;
if (test_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags) != 0) { if (test_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags) != 0) {
@ -752,7 +752,7 @@ put_rpccred(struct rpc_cred *cred)
rpcauth_lru_remove(cred); rpcauth_lru_remove(cred);
} else if (rpcauth_unhash_cred(cred)) { } else if (rpcauth_unhash_cred(cred)) {
rpcauth_lru_remove(cred); rpcauth_lru_remove(cred);
if (atomic_dec_and_test(&cred->cr_count)) if (refcount_dec_and_test(&cred->cr_count))
goto destroy; goto destroy;
} }
out: out:

View File

@ -138,6 +138,6 @@ struct rpc_cred null_cred = {
.cr_lru = LIST_HEAD_INIT(null_cred.cr_lru), .cr_lru = LIST_HEAD_INIT(null_cred.cr_lru),
.cr_auth = &null_auth, .cr_auth = &null_auth,
.cr_ops = &null_credops, .cr_ops = &null_credops,
.cr_count = ATOMIC_INIT(2), .cr_count = REFCOUNT_INIT(2),
.cr_flags = 1UL << RPCAUTH_CRED_UPTODATE, .cr_flags = 1UL << RPCAUTH_CRED_UPTODATE,
}; };