]> Pileus Git - ~andy/linux/commitdiff
LockD: manage grace list per network namespace
authorStanislav Kinsbursky <skinsbursky@parallels.com>
Wed, 25 Jul 2012 12:57:13 +0000 (16:57 +0400)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 27 Jul 2012 20:49:22 +0000 (16:49 -0400)
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/lockd/grace.c
fs/lockd/netns.h
fs/lockd/svc.c

index 183cc1f0af1cf6be225053e2032f47a063be25d3..8dbaff7820982aeeaff2e8ec4f90dfc3f7302e04 100644 (file)
@@ -4,8 +4,10 @@
 
 #include <linux/module.h>
 #include <linux/lockd/bind.h>
+#include <net/net_namespace.h>
+
+#include "netns.h"
 
-static LIST_HEAD(grace_list);
 static DEFINE_SPINLOCK(grace_lock);
 
 /**
@@ -21,8 +23,11 @@ static DEFINE_SPINLOCK(grace_lock);
  */
 void locks_start_grace(struct lock_manager *lm)
 {
+       struct net *net = &init_net;
+       struct lockd_net *ln = net_generic(net, lockd_net_id);
+
        spin_lock(&grace_lock);
-       list_add(&lm->list, &grace_list);
+       list_add(&lm->list, &ln->grace_list);
        spin_unlock(&grace_lock);
 }
 EXPORT_SYMBOL_GPL(locks_start_grace);
@@ -54,6 +59,9 @@ EXPORT_SYMBOL_GPL(locks_end_grace);
  */
 int locks_in_grace(void)
 {
-       return !list_empty(&grace_list);
+       struct net *net = &init_net;
+       struct lockd_net *ln = net_generic(net, lockd_net_id);
+
+       return !list_empty(&ln->grace_list);
 }
 EXPORT_SYMBOL_GPL(locks_in_grace);
index e78650cb937cfec858d31790dc59cadbc2bb46df..4eee248ba96e441eb54e460130d3dde2f20d6ca1 100644 (file)
@@ -11,6 +11,7 @@ struct lockd_net {
 
        struct delayed_work grace_period_end;
        struct lock_manager lockd_manager;
+       struct list_head grace_list;
 };
 
 extern int lockd_net_id;
index a9c436bc450c351e219e8ea42ae703b8000fcc84..834dfe2ed2e9136673c156a0dbb2724c94f63f95 100644 (file)
@@ -596,6 +596,7 @@ static int lockd_init_net(struct net *net)
        struct lockd_net *ln = net_generic(net, lockd_net_id);
 
        INIT_DELAYED_WORK(&ln->grace_period_end, grace_ender);
+       INIT_LIST_HEAD(&ln->grace_list);
        return 0;
 }