NFSD: Fix a memory leak of file if nfsd4_recdir_load failed
Subsystems (2)
PATCH 2/4 NFSD: Fix a memory leak of file if nfsd4_recdir_load failed
Signed-off-by Kinglong Mee <[email protected]>
--- fs/nfsd/nfs4recover.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)
fs/nfsd/nfs4recover.c +17 -13
@@ -480,6 +480,16 @@ nfsd4_init_recdir(struct net *net)return status; } +static void +nfsd4_shutdown_recdir (struct net *net) +{ +struct nfsd_net *nn =net_generic (net, nfsd_net_id); + +if (!nn->rec_file) +return ; +fput (nn->rec_file); + nn->rec_file =NULL ; +}static int nfs4_legacy_state_init (struct net *net)
@@ -513,10 +523,13 @@ nfsd4_load_reboot_recovery_data(struct net *net)int status; status =nfsd4_init_recdir (net); -if (!status) - status =nfsd4_recdir_load (net);if (status) -printk (KERN_ERR "NFSD: Failure reading reboot recovery data\n" ); +return status; + + status =nfsd4_recdir_load (net); +if (status) +nfsd4_shutdown_recdir (net); +return status; }
@@ -547,21 +560,12 @@ err: }static void -nfsd4_shutdown_recdir (struct nfsd_net *nn) -{ -if (!nn->rec_file) -return ; -fput (nn->rec_file); - nn->rec_file =NULL ; -} - -static void nfsd4_legacy_tracking_exit (struct net *net) {struct nfsd_net *nn =net_generic (net, nfsd_net_id);nfs4_release_reclaim (nn); -nfsd4_shutdown_recdir (nn); +nfsd4_shutdown_recdir (net);nfs4_legacy_state_shutdown (net); }
Signature · 1 line
1.9.3