Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 372162
b: refs/heads/master
c: 98d821b
h: refs/heads/master
v: v3
  • Loading branch information
Jeff Layton authored and J. Bruce Fields committed Apr 3, 2013
1 parent 5cf953a commit b29fc8d
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a2f999a37ebb77e857d3a178bd6f52d1163cd980
refs/heads/master: 98d821bda189ba2bfcb3877ea3064da3403698ae
31 changes: 27 additions & 4 deletions trunk/fs/nfsd/nfscache.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ static unsigned int payload_misses;
/* amount of memory (in bytes) currently consumed by the DRC */
static unsigned int drc_mem_usage;

/* longest hash chain seen */
static unsigned int longest_chain;

/* size of cache when we saw the longest hash chain */
static unsigned int longest_chain_cachesize;

/*
* Calculate the hash index from an XID.
*/
Expand Down Expand Up @@ -319,15 +325,30 @@ nfsd_cache_match(struct svc_rqst *rqstp, __wsum csum, struct svc_cacherep *rp)
static struct svc_cacherep *
nfsd_cache_search(struct svc_rqst *rqstp, __wsum csum)
{
struct svc_cacherep *rp;
struct svc_cacherep *rp, *ret = NULL;
struct hlist_head *rh;
unsigned int entries = 0;

rh = &cache_hash[request_hash(rqstp->rq_xid)];
hlist_for_each_entry(rp, rh, c_hash) {
if (nfsd_cache_match(rqstp, csum, rp))
return rp;
++entries;
if (nfsd_cache_match(rqstp, csum, rp)) {
ret = rp;
break;
}
}

/* tally hash chain length stats */
if (entries > longest_chain) {
longest_chain = entries;
longest_chain_cachesize = num_drc_entries;
} else if (entries == longest_chain) {
/* prefer to keep the smallest cachesize possible here */
longest_chain_cachesize = min(longest_chain_cachesize,
num_drc_entries);
}
return NULL;

return ret;
}

/*
Expand Down Expand Up @@ -573,6 +594,8 @@ static int nfsd_reply_cache_stats_show(struct seq_file *m, void *v)
seq_printf(m, "cache misses: %u\n", nfsdstats.rcmisses);
seq_printf(m, "not cached: %u\n", nfsdstats.rcnocache);
seq_printf(m, "payload misses: %u\n", payload_misses);
seq_printf(m, "longest chain len: %u\n", longest_chain);
seq_printf(m, "cachesize at longest: %u\n", longest_chain_cachesize);
spin_unlock(&cache_lock);
return 0;
}
Expand Down

0 comments on commit b29fc8d

Please sign in to comment.