SUNRPC: Simplify lookup code

We no longer need to worry about whether or not the entry is hashed in
order to figure out if the contents are valid. We only care whether or
not the refcount is non-zero.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Trond Myklebust 2018-10-12 13:28:26 -04:00
parent 95cd623250
commit 07d02a67b7
2 changed files with 13 additions and 18 deletions

View File

@ -208,9 +208,9 @@ char * rpcauth_stringify_acceptor(struct rpc_cred *);
static inline
struct rpc_cred *get_rpccred(struct rpc_cred *cred)
{
if (cred != NULL)
atomic_inc(&cred->cr_count);
if (cred != NULL && atomic_inc_not_zero(&cred->cr_count))
return cred;
return NULL;
}
/**
@ -226,9 +226,7 @@ struct rpc_cred * get_rpccred(struct rpc_cred *cred)
static inline struct rpc_cred *
get_rpccred_rcu(struct rpc_cred *cred)
{
if (atomic_inc_not_zero(&cred->cr_count))
return cred;
return NULL;
return get_rpccred(cred);
}
#endif /* __KERNEL__ */

View File

@ -588,18 +588,14 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,
if (!entry->cr_ops->crmatch(acred, entry, flags))
continue;
if (flags & RPCAUTH_LOOKUP_RCU) {
if (test_bit(RPCAUTH_CRED_HASHED, &entry->cr_flags) &&
!test_bit(RPCAUTH_CRED_NEW, &entry->cr_flags))
if (test_bit(RPCAUTH_CRED_NEW, &entry->cr_flags) ||
atomic_read(&entry->cr_count) == 0)
continue;
cred = entry;
break;
}
spin_lock(&cache->lock);
if (test_bit(RPCAUTH_CRED_HASHED, &entry->cr_flags) == 0) {
spin_unlock(&cache->lock);
continue;
}
cred = get_rpccred(entry);
spin_unlock(&cache->lock);
if (cred)
break;
}
rcu_read_unlock();
@ -621,6 +617,7 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,
if (!entry->cr_ops->crmatch(acred, entry, flags))
continue;
cred = get_rpccred(entry);
if (cred)
break;
}
if (cred == NULL) {