From: "J. Bruce Fields" <bfields@fieldses.org>
To: Jeff Layton <jlayton@primarydata.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH v2 1/5] lockd: move lockd's grace period handling into its own module
Date: Thu, 28 Aug 2014 16:01:00 -0400 [thread overview]
Message-ID: <20140828200059.GB25203@fieldses.org> (raw)
In-Reply-To: <1408473509-14010-2-git-send-email-jlayton@primarydata.com>
On Tue, Aug 19, 2014 at 02:38:25PM -0400, Jeff Layton wrote:
> 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.
Thanks, applying this one for 3.18 indepedently of the others.
--b.
>
> Signed-off-by: Jeff Layton <jlayton@primarydata.com>
> ---
> fs/Kconfig | 6 +++-
> fs/lockd/Makefile | 2 +-
> fs/lockd/netns.h | 1 -
> fs/lockd/svc.c | 1 -
> fs/nfs_common/Makefile | 3 +-
> fs/{lockd => nfs_common}/grace.c | 68 ++++++++++++++++++++++++++++++++++------
> fs/nfsd/Kconfig | 1 +
> include/linux/proc_fs.h | 2 ++
> 8 files changed, 69 insertions(+), 15 deletions(-)
> rename fs/{lockd => nfs_common}/grace.c (50%)
>
> diff --git a/fs/Kconfig b/fs/Kconfig
> index 312393f32948..db5dc1598716 100644
> --- a/fs/Kconfig
> +++ b/fs/Kconfig
> @@ -233,9 +233,13 @@ if NETWORK_FILESYSTEMS
> source "fs/nfs/Kconfig"
> source "fs/nfsd/Kconfig"
>
> +config GRACE_PERIOD
> + tristate
> +
> config LOCKD
> tristate
> depends on FILE_LOCKING
> + select GRACE_PERIOD
>
> config LOCKD_V4
> bool
> @@ -249,7 +253,7 @@ config NFS_ACL_SUPPORT
>
> config NFS_COMMON
> bool
> - depends on NFSD || NFS_FS
> + depends on NFSD || NFS_FS || LOCKD
> default y
>
> source "net/sunrpc/Kconfig"
> diff --git a/fs/lockd/Makefile b/fs/lockd/Makefile
> index ca58d64374ca..6a0b351ce30e 100644
> --- a/fs/lockd/Makefile
> +++ b/fs/lockd/Makefile
> @@ -5,6 +5,6 @@
> obj-$(CONFIG_LOCKD) += lockd.o
>
> lockd-objs-y := clntlock.o clntproc.o clntxdr.o host.o svc.o svclock.o \
> - svcshare.o svcproc.o svcsubs.o mon.o xdr.o grace.o
> + svcshare.o svcproc.o svcsubs.o mon.o xdr.o
> lockd-objs-$(CONFIG_LOCKD_V4) += clnt4xdr.o xdr4.o svc4proc.o
> lockd-objs := $(lockd-objs-y)
> diff --git a/fs/lockd/netns.h b/fs/lockd/netns.h
> index 5010b55628b4..097bfa3adb1c 100644
> --- a/fs/lockd/netns.h
> +++ b/fs/lockd/netns.h
> @@ -11,7 +11,6 @@ struct lockd_net {
>
> struct delayed_work grace_period_end;
> struct lock_manager lockd_manager;
> - struct list_head grace_list;
>
> spinlock_t nsm_clnt_lock;
> unsigned int nsm_users;
> diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
> index 8f27c93f8d2e..3599c9ca28ae 100644
> --- a/fs/lockd/svc.c
> +++ b/fs/lockd/svc.c
> @@ -583,7 +583,6 @@ 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);
> spin_lock_init(&ln->nsm_clnt_lock);
> return 0;
> }
> diff --git a/fs/nfs_common/Makefile b/fs/nfs_common/Makefile
> index f689ed82af3a..d153ca3ea577 100644
> --- a/fs/nfs_common/Makefile
> +++ b/fs/nfs_common/Makefile
> @@ -3,5 +3,6 @@
> #
>
> obj-$(CONFIG_NFS_ACL_SUPPORT) += nfs_acl.o
> -
> nfs_acl-objs := nfsacl.o
> +
> +obj-$(CONFIG_GRACE_PERIOD) += grace.o
> diff --git a/fs/lockd/grace.c b/fs/nfs_common/grace.c
> similarity index 50%
> rename from fs/lockd/grace.c
> rename to fs/nfs_common/grace.c
> index 6d1ee7204c88..ae6e58ea4de5 100644
> --- a/fs/lockd/grace.c
> +++ b/fs/nfs_common/grace.c
> @@ -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 <jlayton@primarydata.com>");
> +MODULE_LICENSE("GPL");
> +module_init(init_grace)
> +module_exit(exit_grace)
> diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
> index f994e750e0d1..4fa98764de21 100644
> --- a/fs/nfsd/Kconfig
> +++ b/fs/nfsd/Kconfig
> @@ -71,6 +71,7 @@ config NFSD_V4
> select FS_POSIX_ACL
> select SUNRPC_GSS
> select CRYPTO
> + select GRACE_PERIOD
> help
> This option enables support in your system's NFS server for
> version 4 of the NFS protocol (RFC 3530).
> diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
> index 9d117f61d976..b97bf2ef996e 100644
> --- a/include/linux/proc_fs.h
> +++ b/include/linux/proc_fs.h
> @@ -74,6 +74,8 @@ static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *p
>
> #endif /* CONFIG_PROC_FS */
>
> +struct net;
> +
> static inline struct proc_dir_entry *proc_net_mkdir(
> struct net *net, const char *name, struct proc_dir_entry *parent)
> {
> --
> 1.9.3
>
next prev parent reply other threads:[~2014-08-28 20:01 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-19 18:38 [PATCH v2 0/5] nfsd: support for lifting grace period early Jeff Layton
2014-08-19 18:38 ` [PATCH v2 1/5] lockd: move lockd's grace period handling into its own module Jeff Layton
2014-08-28 20:01 ` J. Bruce Fields [this message]
2014-08-28 20:24 ` J. Bruce Fields
2014-08-28 23:53 ` Jeff Layton
2014-09-03 21:54 ` J. Bruce Fields
2014-09-15 22:08 ` J. Bruce Fields
2014-09-15 22:09 ` J. Bruce Fields
2014-09-15 22:10 ` J. Bruce Fields
2014-09-15 23:19 ` Jeff Layton
2014-09-16 0:19 ` J. Bruce Fields
2014-09-15 23:11 ` Jeff Layton
2014-08-19 18:38 ` [PATCH v2 2/5] lockd: add a /proc/fs/lockd/nlm_end_grace file Jeff Layton
2014-09-04 19:52 ` J. Bruce Fields
2014-08-19 18:38 ` [PATCH v2 3/5] nfsd: add a v4_end_grace file to /proc/fs/nfsd Jeff Layton
2014-09-04 19:54 ` J. Bruce Fields
2014-09-05 11:40 ` Jeff Layton
2014-08-19 18:38 ` [PATCH v2 4/5] nfsd: remove redundant boot_time parm from grace_done client tracking op Jeff Layton
2014-09-04 19:54 ` J. Bruce Fields
2014-08-19 18:38 ` [PATCH v2 5/5] nfsd: pass extra info in env vars to upcalls to allow for early grace period end Jeff Layton
2014-09-04 19:59 ` J. Bruce Fields
2014-09-05 11:43 ` Jeff Layton
2014-09-05 15:58 ` J. Bruce Fields
2014-09-26 18:39 ` [PATCH v2 0/5] nfsd: support for lifting grace period early J. Bruce Fields
2014-09-26 18:54 ` Jeff Layton
2014-09-26 19:46 ` J. Bruce Fields
2014-09-26 20:37 ` Trond Myklebust
2014-09-26 20:45 ` J. Bruce Fields
2014-09-26 20:58 ` Trond Myklebust
2014-09-26 21:47 ` J. Bruce Fields
2014-09-26 22:17 ` Trond Myklebust
2014-09-26 22:35 ` Trond Myklebust
2014-09-27 13:04 ` Jeff Layton
2014-09-29 16:44 ` J. Bruce Fields
2014-09-29 16:53 ` Trond Myklebust
2014-09-29 17:11 ` Jeff Layton
2014-09-29 17:55 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140828200059.GB25203@fieldses.org \
--to=bfields@fieldses.org \
--cc=jlayton@primarydata.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).