Commit 07d02a67 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 95cd6232
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -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__ */
+8 −11
Original line number Diff line number Diff line
@@ -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) {