diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-10-12 13:28:26 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-10-23 12:24:33 -0400 |
commit | 07d02a67b7faae56e184f6c35f78de47f06da37f (patch) | |
tree | 8f5ecac1aeccf696c6098572afc8629537ff2ece /net | |
parent | 95cd623250adce2269e71cfeaf1d487cf4b0d088 (diff) | |
download | op-kernel-dev-07d02a67b7faae56e184f6c35f78de47f06da37f.zip op-kernel-dev-07d02a67b7faae56e184f6c35f78de47f06da37f.tar.gz |
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/auth.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index c1576b1..77748e5 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -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(); @@ -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; |