[PATCH] knfsd: Convert sunrpc_cache to use krefs
.. it makes some of the code nicer. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
ebd0cb1af3
commit
baab935ff3
@ -102,13 +102,11 @@ int exp_rootfh(struct auth_domain *,
|
||||
int exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq);
|
||||
int nfserrno(int errno);
|
||||
|
||||
extern void expkey_put(struct cache_head *item, struct cache_detail *cd);
|
||||
extern void svc_export_put(struct cache_head *item, struct cache_detail *cd);
|
||||
extern struct cache_detail svc_export_cache, svc_expkey_cache;
|
||||
|
||||
static inline void exp_put(struct svc_export *exp)
|
||||
{
|
||||
svc_export_put(&exp->h, &svc_export_cache);
|
||||
cache_put(&exp->h, &svc_export_cache);
|
||||
}
|
||||
|
||||
static inline void exp_get(struct svc_export *exp)
|
||||
|
@ -50,7 +50,7 @@ struct cache_head {
|
||||
time_t last_refresh; /* If CACHE_PENDING, this is when upcall
|
||||
* was sent, else this is when update was received
|
||||
*/
|
||||
atomic_t refcnt;
|
||||
struct kref ref;
|
||||
unsigned long flags;
|
||||
};
|
||||
#define CACHE_VALID 0 /* Entry contains valid data */
|
||||
@ -68,8 +68,7 @@ struct cache_detail {
|
||||
atomic_t inuse; /* active user-space update or lookup */
|
||||
|
||||
char *name;
|
||||
void (*cache_put)(struct cache_head *,
|
||||
struct cache_detail*);
|
||||
void (*cache_put)(struct kref *);
|
||||
|
||||
void (*cache_request)(struct cache_detail *cd,
|
||||
struct cache_head *h,
|
||||
@ -151,17 +150,17 @@ extern void cache_clean_deferred(void *owner);
|
||||
|
||||
static inline struct cache_head *cache_get(struct cache_head *h)
|
||||
{
|
||||
atomic_inc(&h->refcnt);
|
||||
kref_get(&h->ref);
|
||||
return h;
|
||||
}
|
||||
|
||||
|
||||
static inline int cache_put(struct cache_head *h, struct cache_detail *cd)
|
||||
static inline void cache_put(struct cache_head *h, struct cache_detail *cd)
|
||||
{
|
||||
if (atomic_read(&h->refcnt) <= 2 &&
|
||||
if (atomic_read(&h->ref.refcount) <= 2 &&
|
||||
h->expiry_time < cd->nextcheck)
|
||||
cd->nextcheck = h->expiry_time;
|
||||
return atomic_dec_and_test(&h->refcnt);
|
||||
kref_put(&h->ref, cd->cache_put);
|
||||
}
|
||||
|
||||
extern void cache_init(struct cache_head *h);
|
||||
|
Reference in New Issue
Block a user