]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
nfsd: fix up the filecache laundrette scheduling
authorJeff Layton <jlayton@kernel.org>
Wed, 2 Nov 2022 18:44:50 +0000 (14:44 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:23 +0000 (16:19 +0200)
[ Upstream commit 22ae4c114f77b55a4c5036e8f70409a0799a08f8 ]

We don't really care whether there are hashed entries when it comes to
scheduling the laundrette. They might all be non-gc entries, after all.
We only want to schedule it if there are entries on the LRU.

Switch to using list_lru_count, and move the check into
nfsd_file_gc_worker. The other callsite in nfsd_file_put doesn't need to
count entries, since it only schedules the laundrette after adding an
entry to the LRU.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/filecache.c

index fb7ada3f7410ed093682eb2abf3d24c1355c0347..522e900a886054bfcbc9eacce7f2273c748d9ba8 100644 (file)
@@ -210,12 +210,9 @@ static const struct rhashtable_params nfsd_file_rhash_params = {
 static void
 nfsd_file_schedule_laundrette(void)
 {
-       if ((atomic_read(&nfsd_file_rhash_tbl.nelems) == 0) ||
-           test_bit(NFSD_FILE_CACHE_UP, &nfsd_file_flags) == 0)
-               return;
-
-       queue_delayed_work(system_wq, &nfsd_filecache_laundrette,
-                       NFSD_LAUNDRETTE_DELAY);
+       if (test_bit(NFSD_FILE_CACHE_UP, &nfsd_file_flags))
+               queue_delayed_work(system_wq, &nfsd_filecache_laundrette,
+                                  NFSD_LAUNDRETTE_DELAY);
 }
 
 static void
@@ -665,7 +662,8 @@ static void
 nfsd_file_gc_worker(struct work_struct *work)
 {
        nfsd_file_gc();
-       nfsd_file_schedule_laundrette();
+       if (list_lru_count(&nfsd_file_lru))
+               nfsd_file_schedule_laundrette();
 }
 
 static unsigned long