aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulian Schroeder <jumaco@amazon.com>2022-05-23 18:52:26 +0000
committerChuck Lever <chuck.lever@oracle.com>2022-05-23 15:22:17 -0400
commitfd5e363eac77ef81542db77ddad0559fa0f9204e (patch)
treef1cf441a789754d474b448a7b8f0faf7d8b0838c
parentnfsd: Fix null-ptr-deref in nfsd_fill_super() (diff)
downloadlinux-dev-fd5e363eac77ef81542db77ddad0559fa0f9204e.tar.xz
linux-dev-fd5e363eac77ef81542db77ddad0559fa0f9204e.zip
nfsd: destroy percpu stats counters after reply cache shutdown
Upon nfsd shutdown any pending DRC cache is freed. DRC cache use is tracked via a percpu counter. In the current code the percpu counter is destroyed before. If any pending cache is still present, percpu_counter_add is called with a percpu counter==NULL. This causes a kernel crash. The solution is to destroy the percpu counter after the cache is freed. Fixes: e567b98ce9a4b (“nfsd: protect concurrent access to nfsd stats counters”) Signed-off-by: Julian Schroeder <jumaco@amazon.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
-rw-r--r--fs/nfsd/nfscache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
index 0b3f12aa37ff..7da88bdc0d6c 100644
--- a/fs/nfsd/nfscache.c
+++ b/fs/nfsd/nfscache.c
@@ -206,7 +206,6 @@ void nfsd_reply_cache_shutdown(struct nfsd_net *nn)
struct svc_cacherep *rp;
unsigned int i;
- nfsd_reply_cache_stats_destroy(nn);
unregister_shrinker(&nn->nfsd_reply_cache_shrinker);
for (i = 0; i < nn->drc_hashsize; i++) {
@@ -217,6 +216,7 @@ void nfsd_reply_cache_shutdown(struct nfsd_net *nn)
rp, nn);
}
}
+ nfsd_reply_cache_stats_destroy(nn);
kvfree(nn->drc_hashtbl);
nn->drc_hashtbl = NULL;