]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
nfsd: don't destroy global nfs4_file table in per-net shutdown
authorJeff Layton <jlayton@kernel.org>
Sat, 11 Feb 2023 12:50:08 +0000 (07:50 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:25 +0000 (16:19 +0200)
[ Upstream commit 4102db175b5d884d133270fdbd0e59111ce688fc ]

The nfs4_file table is global, so shutting it down when a containerized
nfsd is shut down is wrong and can lead to double-frees. Tear down the
nfs4_file_rhltable in nfs4_state_shutdown instead of
nfs4_state_shutdown_net.

Fixes: d47b295e8d76 ("NFSD: Use rhashtable for managing nfs4_file objects")
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2169017
Reported-by: JianHong Yin <jiyin@redhat.com>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4state.c

index 22799f5ce686ee4a2479b47aa456298ca43d9785..5c261cc807e8e3b4520c0250e024644009b6bc40 100644 (file)
@@ -8183,7 +8183,6 @@ nfs4_state_shutdown_net(struct net *net)
 
        nfsd4_client_tracking_exit(net);
        nfs4_state_destroy_net(net);
-       rhltable_destroy(&nfs4_file_rhltable);
 #ifdef CONFIG_NFSD_V4_2_INTER_SSC
        nfsd4_ssc_shutdown_umount(nn);
 #endif
@@ -8193,6 +8192,7 @@ void
 nfs4_state_shutdown(void)
 {
        nfsd4_destroy_callback_queue();
+       rhltable_destroy(&nfs4_file_rhltable);
 }
 
 static void