forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lockd: move lockd's grace period handling into its own module
Currently, all of the grace period handling is part of lockd. Eventually though we'd like to be able to build v4-only servers, at which point we'll need to put all of this elsewhere. Move the code itself into fs/nfs_common and have it build a grace.ko module. Then, rejigger the Kconfig options so that both nfsd and lockd enable it automatically. Signed-off-by: Jeff Layton <[email protected]>
- Loading branch information
Jeff Layton
authored and
J. Bruce Fields
committed
Sep 17, 2014
1 parent
f0c6312
commit f779002
Showing
8 changed files
with
70 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,5 +3,6 @@ | |
# | ||
|
||
obj-$(CONFIG_NFS_ACL_SUPPORT) += nfs_acl.o | ||
|
||
nfs_acl-objs := nfsacl.o | ||
|
||
obj-$(CONFIG_GRACE_PERIOD) += grace.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,20 @@ | ||
/* | ||
* Common code for control of lockd and nfsv4 grace periods. | ||
* | ||
* Transplanted from lockd code | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/lockd/bind.h> | ||
#include <net/net_namespace.h> | ||
#include <net/netns/generic.h> | ||
#include <linux/fs.h> | ||
|
||
#include "netns.h" | ||
|
||
static int grace_net_id; | ||
static DEFINE_SPINLOCK(grace_lock); | ||
|
||
/** | ||
* locks_start_grace | ||
* @net: net namespace that this lock manager belongs to | ||
* @lm: who this grace period is for | ||
* | ||
* A grace period is a period during which locks should not be given | ||
|
@@ -21,18 +24,20 @@ static DEFINE_SPINLOCK(grace_lock); | |
* | ||
* This function is called to start a grace period. | ||
*/ | ||
void locks_start_grace(struct net *net, struct lock_manager *lm) | ||
void | ||
locks_start_grace(struct net *net, struct lock_manager *lm) | ||
{ | ||
struct lockd_net *ln = net_generic(net, lockd_net_id); | ||
struct list_head *grace_list = net_generic(net, grace_net_id); | ||
|
||
spin_lock(&grace_lock); | ||
list_add(&lm->list, &ln->grace_list); | ||
list_add(&lm->list, grace_list); | ||
spin_unlock(&grace_lock); | ||
} | ||
EXPORT_SYMBOL_GPL(locks_start_grace); | ||
|
||
/** | ||
* locks_end_grace | ||
* @net: net namespace that this lock manager belongs to | ||
* @lm: who this grace period is for | ||
* | ||
* Call this function to state that the given lock manager is ready to | ||
|
@@ -41,7 +46,8 @@ EXPORT_SYMBOL_GPL(locks_start_grace); | |
* Note that callers count on it being safe to call this more than once, | ||
* and the second call should be a no-op. | ||
*/ | ||
void locks_end_grace(struct lock_manager *lm) | ||
void | ||
locks_end_grace(struct lock_manager *lm) | ||
{ | ||
spin_lock(&grace_lock); | ||
list_del_init(&lm->list); | ||
|
@@ -56,10 +62,52 @@ EXPORT_SYMBOL_GPL(locks_end_grace); | |
* to answer ordinary lock requests, and when they should accept only | ||
* lock reclaims. | ||
*/ | ||
int locks_in_grace(struct net *net) | ||
int | ||
locks_in_grace(struct net *net) | ||
{ | ||
struct lockd_net *ln = net_generic(net, lockd_net_id); | ||
struct list_head *grace_list = net_generic(net, grace_net_id); | ||
|
||
return !list_empty(&ln->grace_list); | ||
return !list_empty(grace_list); | ||
} | ||
EXPORT_SYMBOL_GPL(locks_in_grace); | ||
|
||
static int __net_init | ||
grace_init_net(struct net *net) | ||
{ | ||
struct list_head *grace_list = net_generic(net, grace_net_id); | ||
|
||
INIT_LIST_HEAD(grace_list); | ||
return 0; | ||
} | ||
|
||
static void __net_exit | ||
grace_exit_net(struct net *net) | ||
{ | ||
struct list_head *grace_list = net_generic(net, grace_net_id); | ||
|
||
BUG_ON(!list_empty(grace_list)); | ||
} | ||
|
||
static struct pernet_operations grace_net_ops = { | ||
.init = grace_init_net, | ||
.exit = grace_exit_net, | ||
.id = &grace_net_id, | ||
.size = sizeof(struct list_head), | ||
}; | ||
|
||
static int __init | ||
init_grace(void) | ||
{ | ||
return register_pernet_subsys(&grace_net_ops); | ||
} | ||
|
||
static void __exit | ||
exit_grace(void) | ||
{ | ||
unregister_pernet_subsys(&grace_net_ops); | ||
} | ||
|
||
MODULE_AUTHOR("Jeff Layton <[email protected]>"); | ||
MODULE_LICENSE("GPL"); | ||
module_init(init_grace) | ||
module_exit(exit_grace) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters