Skip to content

Commit

Permalink
SUNRPC: Simplify lookup code
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Trond Myklebust committed Oct 23, 2018
1 parent 95cd623 commit 07d02a6
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
12 changes: 5 additions & 7 deletions include/linux/sunrpc/auth.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,11 +206,11 @@ bool rpcauth_cred_key_to_expire(struct rpc_auth *, struct rpc_cred *);
char * rpcauth_stringify_acceptor(struct rpc_cred *);

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(&cred->cr_count);
return cred;
if (cred != NULL && atomic_inc_not_zero(&cred->cr_count))
return cred;
return NULL;
}

/**
Expand All @@ -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__ */
Expand Down
19 changes: 8 additions & 11 deletions net/sunrpc/auth.c
Original file line number Diff line number Diff line change
Expand Up @@ -588,19 +588,15 @@ 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))
cred = entry;
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);
break;
if (cred)
break;
}
rcu_read_unlock();

Expand All @@ -621,7 +617,8 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,
if (!entry->cr_ops->crmatch(acred, entry, flags))
continue;
cred = get_rpccred(entry);
break;
if (cred)
break;
}
if (cred == NULL) {
cred = new;
Expand Down

0 comments on commit 07d02a6

Please sign in to comment.