Commit 2f55dbe4 authored by Yang Erkun's avatar Yang Erkun Committed by Chuck Lever
Browse files

SUNRPC: introduce cache_check_rcu to help check in rcu context



This is a prepare patch to add cache_check_rcu, will use it with follow
patch.

Suggested-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarYang Erkun <yangerkun@huawei.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent cb80ecf7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -222,6 +222,8 @@ static inline bool cache_is_expired(struct cache_detail *detail, struct cache_he
	return detail->flush_time >= h->last_refresh;
}

extern int cache_check_rcu(struct cache_detail *detail,
		       struct cache_head *h, struct cache_req *rqstp);
extern int cache_check(struct cache_detail *detail,
		       struct cache_head *h, struct cache_req *rqstp);
extern void cache_flush(void);
+26 −15
Original line number Diff line number Diff line
@@ -281,21 +281,7 @@ static int try_to_negate_entry(struct cache_detail *detail, struct cache_head *h
	return rv;
}

/*
 * This is the generic cache management routine for all
 * the authentication caches.
 * It checks the currency of a cache item and will (later)
 * initiate an upcall to fill it if needed.
 *
 *
 * Returns 0 if the cache_head can be used, or cache_puts it and returns
 * -EAGAIN if upcall is pending and request has been queued
 * -ETIMEDOUT if upcall failed or request could not be queue or
 *           upcall completed but item is still invalid (implying that
 *           the cache item has been replaced with a newer one).
 * -ENOENT if cache entry was negative
 */
int cache_check(struct cache_detail *detail,
int cache_check_rcu(struct cache_detail *detail,
		    struct cache_head *h, struct cache_req *rqstp)
{
	int rv;
@@ -336,6 +322,31 @@ int cache_check(struct cache_detail *detail,
				rv = -ETIMEDOUT;
		}
	}

	return rv;
}
EXPORT_SYMBOL_GPL(cache_check_rcu);

/*
 * This is the generic cache management routine for all
 * the authentication caches.
 * It checks the currency of a cache item and will (later)
 * initiate an upcall to fill it if needed.
 *
 *
 * Returns 0 if the cache_head can be used, or cache_puts it and returns
 * -EAGAIN if upcall is pending and request has been queued
 * -ETIMEDOUT if upcall failed or request could not be queue or
 *           upcall completed but item is still invalid (implying that
 *           the cache item has been replaced with a newer one).
 * -ENOENT if cache entry was negative
 */
int cache_check(struct cache_detail *detail,
		struct cache_head *h, struct cache_req *rqstp)
{
	int rv;

	rv = cache_check_rcu(detail, h, rqstp);
	if (rv)
		cache_put(h, detail);
	return rv;