mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
NFSD: Fix a memory leak if nfsd4_recdir_load fail
Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
c2236f141e
commit
15d176c195
1 changed files with 17 additions and 13 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -546,22 +559,13 @@ nfsd4_legacy_tracking_init(struct net *net)
|
|||
return status;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue