Commit edead3a5 authored by Chuck Lever's avatar Chuck Lever

NFSD: Fix the filecache LRU shrinker

Without LRU item rotation, the shrinker visits only a few items on
the end of the LRU list, and those would always be long-term OPEN
files for NFSv4 workloads. That makes the filecache shrinker
completely ineffective.

Adopt the same strategy as the inode LRU by using LRU_ROTATE.
Suggested-by: default avatarDave Chinner <david@fromorbit.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 4a0e73e6
...@@ -446,6 +446,7 @@ nfsd_file_dispose_list_delayed(struct list_head *dispose) ...@@ -446,6 +446,7 @@ nfsd_file_dispose_list_delayed(struct list_head *dispose)
* *
* Return values: * Return values:
* %LRU_REMOVED: @item was removed from the LRU * %LRU_REMOVED: @item was removed from the LRU
* %LRU_ROTATE: @item is to be moved to the LRU tail
* %LRU_SKIP: @item cannot be evicted * %LRU_SKIP: @item cannot be evicted
*/ */
static enum lru_status static enum lru_status
...@@ -484,7 +485,7 @@ nfsd_file_lru_cb(struct list_head *item, struct list_lru_one *lru, ...@@ -484,7 +485,7 @@ nfsd_file_lru_cb(struct list_head *item, struct list_lru_one *lru,
if (test_and_clear_bit(NFSD_FILE_REFERENCED, &nf->nf_flags)) { if (test_and_clear_bit(NFSD_FILE_REFERENCED, &nf->nf_flags)) {
trace_nfsd_file_gc_referenced(nf); trace_nfsd_file_gc_referenced(nf);
return LRU_SKIP; return LRU_ROTATE;
} }
if (!test_and_clear_bit(NFSD_FILE_HASHED, &nf->nf_flags)) { if (!test_and_clear_bit(NFSD_FILE_HASHED, &nf->nf_flags)) {
...@@ -526,7 +527,7 @@ nfsd_file_gc(void) ...@@ -526,7 +527,7 @@ nfsd_file_gc(void)
unsigned long ret; unsigned long ret;
ret = list_lru_walk(&nfsd_file_lru, nfsd_file_lru_cb, ret = list_lru_walk(&nfsd_file_lru, nfsd_file_lru_cb,
&dispose, LONG_MAX); &dispose, list_lru_count(&nfsd_file_lru));
trace_nfsd_file_gc_removed(ret, list_lru_count(&nfsd_file_lru)); trace_nfsd_file_gc_removed(ret, list_lru_count(&nfsd_file_lru));
nfsd_file_gc_dispose_list(&dispose); nfsd_file_gc_dispose_list(&dispose);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment