aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/lockd/grace.c14
-rw-r--r--fs/lockd/netns.h1
-rw-r--r--fs/lockd/svc.c1
3 files changed, 13 insertions, 3 deletions
diff --git a/fs/lockd/grace.c b/fs/lockd/grace.c
index 183cc1f0af1c..8dbaff782098 100644
--- a/fs/lockd/grace.c
+++ b/fs/lockd/grace.c
@@ -4,8 +4,10 @@
4 4
5#include <linux/module.h> 5#include <linux/module.h>
6#include <linux/lockd/bind.h> 6#include <linux/lockd/bind.h>
7#include <net/net_namespace.h>
8
9#include "netns.h"
7 10
8static LIST_HEAD(grace_list);
9static DEFINE_SPINLOCK(grace_lock); 11static DEFINE_SPINLOCK(grace_lock);
10 12
11/** 13/**
@@ -21,8 +23,11 @@ static DEFINE_SPINLOCK(grace_lock);
21 */ 23 */
22void locks_start_grace(struct lock_manager *lm) 24void locks_start_grace(struct lock_manager *lm)
23{ 25{
26 struct net *net = &init_net;
27 struct lockd_net *ln = net_generic(net, lockd_net_id);
28
24 spin_lock(&grace_lock); 29 spin_lock(&grace_lock);
25 list_add(&lm->list, &grace_list); 30 list_add(&lm->list, &ln->grace_list);
26 spin_unlock(&grace_lock); 31 spin_unlock(&grace_lock);
27} 32}
28EXPORT_SYMBOL_GPL(locks_start_grace); 33EXPORT_SYMBOL_GPL(locks_start_grace);
@@ -54,6 +59,9 @@ EXPORT_SYMBOL_GPL(locks_end_grace);
54 */ 59 */
55int locks_in_grace(void) 60int locks_in_grace(void)
56{ 61{
57 return !list_empty(&grace_list); 62 struct net *net = &init_net;
63 struct lockd_net *ln = net_generic(net, lockd_net_id);
64
65 return !list_empty(&ln->grace_list);
58} 66}
59EXPORT_SYMBOL_GPL(locks_in_grace); 67EXPORT_SYMBOL_GPL(locks_in_grace);
diff --git a/fs/lockd/netns.h b/fs/lockd/netns.h
index e78650cb937c..4eee248ba96e 100644
--- a/fs/lockd/netns.h
+++ b/fs/lockd/netns.h
@@ -11,6 +11,7 @@ struct lockd_net {
11 11
12 struct delayed_work grace_period_end; 12 struct delayed_work grace_period_end;
13 struct lock_manager lockd_manager; 13 struct lock_manager lockd_manager;
14 struct list_head grace_list;
14}; 15};
15 16
16extern int lockd_net_id; 17extern int lockd_net_id;
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
index a9c436bc450c..834dfe2ed2e9 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
@@ -596,6 +596,7 @@ static int lockd_init_net(struct net *net)
596 struct lockd_net *ln = net_generic(net, lockd_net_id); 596 struct lockd_net *ln = net_generic(net, lockd_net_id);
597 597
598 INIT_DELAYED_WORK(&ln->grace_period_end, grace_ender); 598 INIT_DELAYED_WORK(&ln->grace_period_end, grace_ender);
599 INIT_LIST_HEAD(&ln->grace_list);
599 return 0; 600 return 0;
600} 601}
601 602