#define TARGET_BUCKET_SIZE 64
struct nfsd_drc_bucket {
- struct hlist_head cache_hash;
struct list_head lru_head;
};
rp->c_state = RC_UNUSED;
rp->c_type = RC_NOCACHE;
INIT_LIST_HEAD(&rp->c_lru);
- INIT_HLIST_NODE(&rp->c_hash);
}
return rp;
}
drc_mem_usage -= rp->c_replvec.iov_len;
kfree(rp->c_replvec.iov_base);
}
- if (!hlist_unhashed(&rp->c_hash))
- hlist_del(&rp->c_hash);
list_del(&rp->c_lru);
--num_drc_entries;
drc_mem_usage -= sizeof(*rp);
schedule_delayed_work(&cache_cleaner, RC_EXPIRE);
}
-/*
- * Move a cache entry from one hash list to another
- */
-static void
-hash_refile(struct nfsd_drc_bucket *b, struct svc_cacherep *rp)
-{
- hlist_del_init(&rp->c_hash);
- hlist_add_head(&rp->c_hash, &b->cache_hash);
-}
-
static long
prune_bucket(struct nfsd_drc_bucket *b)
{
__wsum csum)
{
struct svc_cacherep *rp, *ret = NULL;
- struct hlist_head *rh = &b->cache_hash;
+ struct list_head *rh = &b->lru_head;
unsigned int entries = 0;
- hlist_for_each_entry(rp, rh, c_hash) {
+ list_for_each_entry(rp, rh, c_lru) {
++entries;
if (nfsd_cache_match(rqstp, csum, rp)) {
ret = rp;
rp->c_len = rqstp->rq_arg.len;
rp->c_csum = csum;
- hash_refile(b, rp);
lru_put_end(b, rp);
/* release any buffer */