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

Commit a6d6b781 authored by Jeff Layton's avatar Jeff Layton Committed by J. Bruce Fields
Browse files

nfsd4: fix recovery-dir leak on nfsd startup failure



The current code never calls nfsd4_shutdown_recdir if nfs4_state_start
returns an error. Also, it's better to go ahead and consolidate these
functions since one is just a trivial wrapper around the other.

Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 393d8ed8
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -4677,21 +4677,26 @@ set_max_delegations(void)

/* initialization to perform when the nfsd service is started: */

static int
__nfs4_state_start(void)
int
nfs4_state_start(void)
{
	int ret;

	nfsd4_load_reboot_recovery_data();
	boot_time = get_seconds();
	locks_start_grace(&nfsd4_manager);
	printk(KERN_INFO "NFSD: starting %ld-second grace period\n",
	       nfsd4_grace);
	ret = set_callback_cred();
	if (ret)
		return -ENOMEM;
	if (ret) {
		ret = -ENOMEM;
		goto out_recovery;
	}
	laundry_wq = create_singlethread_workqueue("nfsd4");
	if (laundry_wq == NULL)
		return -ENOMEM;
	if (laundry_wq == NULL) {
		ret = -ENOMEM;
		goto out_recovery;
	}
	ret = nfsd4_create_callback_queue();
	if (ret)
		goto out_free_laundry;
@@ -4700,16 +4705,11 @@ __nfs4_state_start(void)
	return 0;
out_free_laundry:
	destroy_workqueue(laundry_wq);
out_recovery:
	nfsd4_shutdown_recdir();
	return ret;
}

int
nfs4_state_start(void)
{
	nfsd4_load_reboot_recovery_data();
	return __nfs4_state_start();
}

static void
__nfs4_state_shutdown(void)
{