diff options
author | Stanislav Kinsbursky <skinsbursky@parallels.com> | 2012-07-25 08:56:50 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-07-27 16:48:44 -0400 |
commit | 08d44a35a9e71a132c8e8abb0451b7b5e5b3dfee (patch) | |
tree | 11e081fb3db6c850b79969ff24e91fa863184534 | |
parent | 66547b0251b0b62dcb637631f566410a0e1e47a8 (diff) |
LockD: make lockd manager allocated per network namespace
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r-- | fs/lockd/netns.h | 2 | ||||
-rw-r--r-- | fs/lockd/svc.c | 18 |
2 files changed, 12 insertions, 8 deletions
diff --git a/fs/lockd/netns.h b/fs/lockd/netns.h index 94653aecfffb..e78650cb937c 100644 --- a/fs/lockd/netns.h +++ b/fs/lockd/netns.h | |||
@@ -1,6 +1,7 @@ | |||
1 | #ifndef __LOCKD_NETNS_H__ | 1 | #ifndef __LOCKD_NETNS_H__ |
2 | #define __LOCKD_NETNS_H__ | 2 | #define __LOCKD_NETNS_H__ |
3 | 3 | ||
4 | #include <linux/fs.h> | ||
4 | #include <net/netns/generic.h> | 5 | #include <net/netns/generic.h> |
5 | 6 | ||
6 | struct lockd_net { | 7 | struct lockd_net { |
@@ -9,6 +10,7 @@ struct lockd_net { | |||
9 | unsigned long nrhosts; | 10 | unsigned long nrhosts; |
10 | 11 | ||
11 | struct delayed_work grace_period_end; | 12 | struct delayed_work grace_period_end; |
13 | struct lock_manager lockd_manager; | ||
12 | }; | 14 | }; |
13 | 15 | ||
14 | extern int lockd_net_id; | 16 | extern int lockd_net_id; |
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index 70c417758eb9..a9c436bc450c 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c | |||
@@ -87,12 +87,14 @@ static unsigned long get_lockd_grace_period(void) | |||
87 | return nlm_timeout * 5 * HZ; | 87 | return nlm_timeout * 5 * HZ; |
88 | } | 88 | } |
89 | 89 | ||
90 | static struct lock_manager lockd_manager = { | 90 | static void grace_ender(struct work_struct *grace) |
91 | }; | ||
92 | |||
93 | static void grace_ender(struct work_struct *not_used) | ||
94 | { | 91 | { |
95 | locks_end_grace(&lockd_manager); | 92 | struct delayed_work *dwork = container_of(grace, struct delayed_work, |
93 | work); | ||
94 | struct lockd_net *ln = container_of(dwork, struct lockd_net, | ||
95 | grace_period_end); | ||
96 | |||
97 | locks_end_grace(&ln->lockd_manager); | ||
96 | } | 98 | } |
97 | 99 | ||
98 | static void set_grace_period(void) | 100 | static void set_grace_period(void) |
@@ -100,7 +102,7 @@ static void set_grace_period(void) | |||
100 | unsigned long grace_period = get_lockd_grace_period(); | 102 | unsigned long grace_period = get_lockd_grace_period(); |
101 | struct lockd_net *ln = net_generic(&init_net, lockd_net_id); | 103 | struct lockd_net *ln = net_generic(&init_net, lockd_net_id); |
102 | 104 | ||
103 | locks_start_grace(&lockd_manager); | 105 | locks_start_grace(&ln->lockd_manager); |
104 | cancel_delayed_work_sync(&ln->grace_period_end); | 106 | cancel_delayed_work_sync(&ln->grace_period_end); |
105 | schedule_delayed_work(&ln->grace_period_end, grace_period); | 107 | schedule_delayed_work(&ln->grace_period_end, grace_period); |
106 | } | 108 | } |
@@ -111,7 +113,7 @@ static void restart_grace(void) | |||
111 | struct lockd_net *ln = net_generic(&init_net, lockd_net_id); | 113 | struct lockd_net *ln = net_generic(&init_net, lockd_net_id); |
112 | 114 | ||
113 | cancel_delayed_work_sync(&ln->grace_period_end); | 115 | cancel_delayed_work_sync(&ln->grace_period_end); |
114 | locks_end_grace(&lockd_manager); | 116 | locks_end_grace(&ln->lockd_manager); |
115 | nlmsvc_invalidate_all(); | 117 | nlmsvc_invalidate_all(); |
116 | set_grace_period(); | 118 | set_grace_period(); |
117 | } | 119 | } |
@@ -187,7 +189,7 @@ lockd(void *vrqstp) | |||
187 | } | 189 | } |
188 | flush_signals(current); | 190 | flush_signals(current); |
189 | cancel_delayed_work_sync(&ln->grace_period_end); | 191 | cancel_delayed_work_sync(&ln->grace_period_end); |
190 | locks_end_grace(&lockd_manager); | 192 | locks_end_grace(&ln->lockd_manager); |
191 | if (nlmsvc_ops) | 193 | if (nlmsvc_ops) |
192 | nlmsvc_invalidate_all(); | 194 | nlmsvc_invalidate_all(); |
193 | nlm_shutdown_hosts(); | 195 | nlm_shutdown_hosts(); |