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

Commit 08d44a35 authored by Stanislav Kinsbursky's avatar Stanislav Kinsbursky Committed by J. Bruce Fields
Browse files

LockD: make lockd manager allocated per network namespace

parent 66547b02
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
#ifndef __LOCKD_NETNS_H__
#define __LOCKD_NETNS_H__

#include <linux/fs.h>
#include <net/netns/generic.h>

struct lockd_net {
@@ -9,6 +10,7 @@ struct lockd_net {
	unsigned long nrhosts;

	struct delayed_work grace_period_end;
	struct lock_manager lockd_manager;
};

extern int lockd_net_id;
+10 −8
Original line number Diff line number Diff line
@@ -87,12 +87,14 @@ static unsigned long get_lockd_grace_period(void)
		return nlm_timeout * 5 * HZ;
}

static struct lock_manager lockd_manager = {
};

static void grace_ender(struct work_struct *not_used)
static void grace_ender(struct work_struct *grace)
{
	locks_end_grace(&lockd_manager);
	struct delayed_work *dwork = container_of(grace, struct delayed_work,
						  work);
	struct lockd_net *ln = container_of(dwork, struct lockd_net,
					    grace_period_end);

	locks_end_grace(&ln->lockd_manager);
}

static void set_grace_period(void)
@@ -100,7 +102,7 @@ static void set_grace_period(void)
	unsigned long grace_period = get_lockd_grace_period();
	struct lockd_net *ln = net_generic(&init_net, lockd_net_id);

	locks_start_grace(&lockd_manager);
	locks_start_grace(&ln->lockd_manager);
	cancel_delayed_work_sync(&ln->grace_period_end);
	schedule_delayed_work(&ln->grace_period_end, grace_period);
}
@@ -111,7 +113,7 @@ static void restart_grace(void)
		struct lockd_net *ln = net_generic(&init_net, lockd_net_id);

		cancel_delayed_work_sync(&ln->grace_period_end);
		locks_end_grace(&lockd_manager);
		locks_end_grace(&ln->lockd_manager);
		nlmsvc_invalidate_all();
		set_grace_period();
	}
@@ -187,7 +189,7 @@ lockd(void *vrqstp)
	}
	flush_signals(current);
	cancel_delayed_work_sync(&ln->grace_period_end);
	locks_end_grace(&lockd_manager);
	locks_end_grace(&ln->lockd_manager);
	if (nlmsvc_ops)
		nlmsvc_invalidate_all();
	nlm_shutdown_hosts();