Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15d176c1 authored by Kinglong Mee's avatar Kinglong Mee Committed by J. Bruce Fields
Browse files

NFSD: Fix a memory leak if nfsd4_recdir_load fail

parent c2236f14
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -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)
	if (status)
		return status;

	status = nfsd4_recdir_load(net);
	if (status)
		printk(KERN_ERR "NFSD: Failure reading reboot recovery data\n");
		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);
}