Commit 8017afd6 authored by NeilBrown's avatar NeilBrown Committed by Chuck Lever
Browse files

nfsd: filecache: use list_lru_walk_node() in nfsd_file_gc()



list_lru_walk() is only useful when the aim is to remove all elements
from the list_lru.  It will repeatedly visit rotated elements of the
first per-node sublist before proceeding to subsequent sublists.

This patch changes nfsd_file_gc() to use list_lru_walk_node() and
list_lru_count_node() on each NUMA node.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent e8e6f5cd
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -537,11 +537,16 @@ nfsd_file_lru_cb(struct list_head *item, struct list_lru_one *lru,
static void
nfsd_file_gc(void)
{
	unsigned long ret = 0;
	LIST_HEAD(dispose);
	unsigned long ret;
	int nid;

	for_each_node_state(nid, N_NORMAL_MEMORY) {
		unsigned long nr = list_lru_count_node(&nfsd_file_lru, nid);

	ret = list_lru_walk(&nfsd_file_lru, nfsd_file_lru_cb,
			    &dispose, list_lru_count(&nfsd_file_lru));
		ret += list_lru_walk_node(&nfsd_file_lru, nid, nfsd_file_lru_cb,
					  &dispose, &nr);
	}
	trace_nfsd_file_gc_removed(ret, list_lru_count(&nfsd_file_lru));
	nfsd_file_dispose_list_delayed(&dispose);
}