NFSD: Re-organize nfsd_file_gc_worker()
authorChuck Lever <chuck.lever@oracle.com>
Tue, 18 Feb 2025 15:39:32 +0000 (10:39 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 10 Mar 2025 13:11:05 +0000 (09:11 -0400)
commit1601e2fde937a8abf29c9f62743d22c3eaeccb58
tree1259b62764e831c4d5695901edc2cbbd89a3c960
parentf77ce2e5708b3201244fcc61e4a22acb44fd919b
NFSD: Re-organize nfsd_file_gc_worker()

Dave opines:

IMO, there is no need to do this unnecessary work on every object
that is added to the LRU.  Changing the gc worker to always run
every 2s and check if it has work to do like so:

 static void
 nfsd_file_gc_worker(struct work_struct *work)
 {
- nfsd_file_gc();
- if (list_lru_count(&nfsd_file_lru))
- nfsd_file_schedule_laundrette();
+ if (list_lru_count(&nfsd_file_lru))
+ nfsd_file_gc();
+ nfsd_file_schedule_laundrette();
 }

means that nfsd_file_gc() will be run the same way and have the same
behaviour as the current code. When the system it idle, it does a
list_lru_count() check every 2 seconds and goes back to sleep.
That's going to be pretty much unnoticable on most machines that run
NFS servers.

Suggested-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/filecache.c