From: Bryan Schumaker <bjschuma@netapp.com>
To: "Myklebust, Trond" <Trond.Myklebust@netapp.com>
Cc: "Schumaker, Bryan" <Bryan.Schumaker@netapp.com>,
"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH v4 03/23] NFS: Add version registering framework
Date: Wed, 21 Mar 2012 12:36:01 -0400 [thread overview]
Message-ID: <4F6A0371.3090907@netapp.com> (raw)
In-Reply-To: <1332345449.5779.5.camel@lade.trondhjem.org>
On 03/21/2012 11:57 AM, Myklebust, Trond wrote:
> On Wed, 2012-03-21 at 11:20 -0400, bjschuma@netapp.com wrote:
>> From: Bryan Schumaker <bjschuma@netapp.com>
>>
>> This patch adds in the code to track multiple versions of the NFS
>> protocol. I created default structures for v2, v3 and v4 so that each
>> version can continue to work while I convert them into kernel modules.
>> I also removed the const parameter from the rpc_version array so that I
>> can change it at runtime.
>>
>> Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
>> ---
>> fs/lockd/clnt4xdr.c | 2 +-
>> fs/lockd/clntxdr.c | 6 +--
>> fs/lockd/mon.c | 4 +-
>> fs/nfs/Makefile | 6 +--
>> fs/nfs/client.c | 111 ++++++++++++++++++++++++++++++++++---------
>> fs/nfs/inode.c | 2 +
>> fs/nfs/mount_clnt.c | 6 +--
>> fs/nfs/nfs.h | 35 ++++++++++++++
>> fs/nfs/nfs2super.c | 31 ++++++++++++
>> fs/nfs/nfs2xdr.c | 2 +-
>> fs/nfs/nfs3super.c | 31 ++++++++++++
>> fs/nfs/nfs3xdr.c | 4 +-
>> fs/nfs/nfs4super.c | 31 ++++++++++++
>> fs/nfs/nfs4xdr.c | 2 +-
>> fs/nfs/super.c | 48 ++++++++++++++-----
>> fs/nfsd/nfs4callback.c | 2 +-
>> include/linux/lockd/xdr4.h | 2 +-
>> include/linux/nfs_xdr.h | 8 ++--
>> include/linux/sunrpc/clnt.h | 2 +-
>> net/sunrpc/rpcb_clnt.c | 8 ++--
>> 20 files changed, 280 insertions(+), 63 deletions(-)
>> create mode 100644 fs/nfs/nfs.h
>> create mode 100644 fs/nfs/nfs2super.c
>> create mode 100644 fs/nfs/nfs3super.c
>> create mode 100644 fs/nfs/nfs4super.c
>>
>> diff --git a/fs/lockd/clnt4xdr.c b/fs/lockd/clnt4xdr.c
>> index 3ddcbb1..580dbe2 100644
>> --- a/fs/lockd/clnt4xdr.c
>> +++ b/fs/lockd/clnt4xdr.c
>> @@ -598,7 +598,7 @@ static struct rpc_procinfo nlm4_procedures[] = {
>> PROC(GRANTED_RES, res, norep),
>> };
>>
>> -const struct rpc_version nlm_version4 = {
>> +struct rpc_version nlm_version4 = {
>> .number = 4,
>> .nrprocs = ARRAY_SIZE(nlm4_procedures),
>> .procs = nlm4_procedures,
>> diff --git a/fs/lockd/clntxdr.c b/fs/lockd/clntxdr.c
>> index 3d35e3e..78e80c4 100644
>> --- a/fs/lockd/clntxdr.c
>> +++ b/fs/lockd/clntxdr.c
>> @@ -596,19 +596,19 @@ static struct rpc_procinfo nlm_procedures[] = {
>> PROC(GRANTED_RES, res, norep),
>> };
>>
>> -static const struct rpc_version nlm_version1 = {
>
> Why shouldn't these (and the mount protocol equivalents etc) still be
> declared constant?
I didn't think I'd be allowed to change them if they were const. I removed it from the rpc_ops structure first, and then followed the compiler errors to change the rest.
>
>> +static struct rpc_version nlm_version1 = {
>> .number = 1,
>> .nrprocs = ARRAY_SIZE(nlm_procedures),
>> .procs = nlm_procedures,
>> };
>>
>> -static const struct rpc_version nlm_version3 = {
>> +static struct rpc_version nlm_version3 = {
>> .number = 3,
>> .nrprocs = ARRAY_SIZE(nlm_procedures),
>> .procs = nlm_procedures,
>> };
>>
>> -static const struct rpc_version *nlm_versions[] = {
>> +static struct rpc_version *nlm_versions[] = {
>> [1] = &nlm_version1,
>> [3] = &nlm_version3,
>> #ifdef CONFIG_LOCKD_V4
>> diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
>> index 7ef14b3..888d1ef 100644
>> --- a/fs/lockd/mon.c
>> +++ b/fs/lockd/mon.c
>> @@ -535,13 +535,13 @@ static struct rpc_procinfo nsm_procedures[] = {
>> },
>> };
>>
>> -static const struct rpc_version nsm_version1 = {
>> +static struct rpc_version nsm_version1 = {
>> .number = 1,
>> .nrprocs = ARRAY_SIZE(nsm_procedures),
>> .procs = nsm_procedures
>> };
>>
>> -static const struct rpc_version *nsm_version[] = {
>> +static struct rpc_version *nsm_version[] = {
>> [1] = &nsm_version1,
>> };
>>
>> diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
>> index 7ddd45d..c6e7844 100644
>> --- a/fs/nfs/Makefile
>> +++ b/fs/nfs/Makefile
>> @@ -9,11 +9,11 @@ nfs-y := client.o dir.o file.o getroot.o inode.o super.o \
>> write.o namespace.o mount_clnt.o \
>> dns_resolve.o cache_lib.o
>> nfs-$(CONFIG_ROOT_NFS) += nfsroot.o
>> -nfs-$(CONFIG_NFS_V2) += proc.o nfs2xdr.o
>> -nfs-$(CONFIG_NFS_V3) += nfs3proc.o nfs3xdr.o
>> +nfs-$(CONFIG_NFS_V2) += nfs2super.o proc.o nfs2xdr.o
>> +nfs-$(CONFIG_NFS_V3) += nfs3super.o nfs3proc.o nfs3xdr.o
>> nfs-$(CONFIG_NFS_V3_ACL) += nfs3acl.o
>> nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \
>> - delegation.o idmap.o \
>> + nfs4super.o delegation.o idmap.o \
>> callback.o callback_xdr.o callback_proc.o \
>> nfs4namespace.o
>> nfs-$(CONFIG_NFS_V4_1) += pnfs.o pnfs_dev.o
>> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
>> index 4d793b2..0fafedd 100644
>> --- a/fs/nfs/client.c
>> +++ b/fs/nfs/client.c
>> @@ -51,11 +51,14 @@
>> #include "internal.h"
>> #include "fscache.h"
>> #include "pnfs.h"
>> +#include "nfs.h"
>> #include "netns.h"
>>
>> #define NFSDBG_FACILITY NFSDBG_CLIENT
>>
>> static DECLARE_WAIT_QUEUE_HEAD(nfs_client_active_wq);
>> +static DEFINE_SPINLOCK(nfs_version_lock);
>> +static LIST_HEAD(nfs_versions);
>> #ifdef CONFIG_NFS_V4
>>
>> /*
>> @@ -89,16 +92,10 @@ static bool nfs4_disable_idmapping = true;
>> /*
>> * RPC cruft for NFS
>> */
>> -static const struct rpc_version *nfs_version[5] = {
>> -#ifdef CONFIG_NFS_V2
>> - [2] = &nfs_version2,
>> -#endif
>> -#ifdef CONFIG_NFS_V3
>> - [3] = &nfs_version3,
>> -#endif
>> -#ifdef CONFIG_NFS_V4
>> - [4] = &nfs_version4,
>> -#endif
>> +static struct rpc_version *nfs_version[5] = {
>> + [2] = NULL,
>> + [3] = NULL,
>> + [4] = NULL,
>> };
>>
>> const struct rpc_program nfs_program = {
>> @@ -114,10 +111,9 @@ struct rpc_stat nfs_rpcstat = {
>> .program = &nfs_program
>> };
>>
>> -
>> #ifdef CONFIG_NFS_V3_ACL
>> static struct rpc_stat nfsacl_rpcstat = { &nfsacl_program };
>> -static const struct rpc_version *nfsacl_version[] = {
>> +static struct rpc_version *nfsacl_version[] = {
>> [3] = &nfsacl_version3,
>> };
>>
>> @@ -140,6 +136,81 @@ struct nfs_client_initdata {
>> struct net *net;
>> };
>>
>> +static int find_nfs_version(struct nfs_subversion **nfs, unsigned int version)
>> +{
>> + struct nfs_subversion *tmp;
>> + spin_lock(&nfs_version_lock);
>> +
>> + list_for_each_entry_safe((*nfs), tmp, &nfs_versions, list) {
>> + if ((*nfs)->version == version) {
>> + spin_unlock(&nfs_version_lock);
>> + return 1;
>> + }
>> + };
>> +
>> + spin_unlock(&nfs_version_lock);
>> + return 0;
>> +}
>> +
>> +struct nfs_subversion *get_nfs_version(unsigned int version)
>> +{
>> + struct nfs_subversion *nfs;
>> +
>> + if (try_then_request_module(find_nfs_version(&nfs, version), "nfs%d", version))
>> + return nfs;
>> + return ERR_PTR(-EPROTONOSUPPORT);
>> +}
>> +
>> +inline struct nfs_subversion *get_nfs_client_version(struct nfs_client *clp)
>> +{
>> + return get_nfs_version(clp->rpc_ops->version);
>> +}
>> +
>> +inline struct nfs_subversion *get_nfs_server_version(struct nfs_server *srv)
>> +{
>> + return get_nfs_client_version(srv->nfs_client);
>> +}
>> +
>> +void register_nfs_version(struct nfs_subversion *nfs)
>> +{
>> + spin_lock(&nfs_version_lock);
>> +
>> + list_add(&nfs->list, &nfs_versions);
>> + nfs_version[nfs->version] = nfs->rpc_vers;
>> +
>> + spin_unlock(&nfs_version_lock);
>> +}
>> +EXPORT_SYMBOL_GPL(register_nfs_version);
>> +
>> +void unregister_nfs_version(struct nfs_subversion *nfs)
>> +{
>> + spin_lock(&nfs_version_lock);
>> +
>> + nfs_version[nfs->version] = NULL;
>> + list_del(&nfs->list);
>> +
>> + spin_unlock(&nfs_version_lock);
>> +}
>> +EXPORT_SYMBOL_GPL(unregister_nfs_version);
>> +
>> +/*
>> + * Preload all configured NFS versions during module init.
>> + * This function should be edited after each protocol is converted,
>> + * and eventually removed.
>> + */
>> +void __init nfs_register_versions(void)
>> +{
>> +#ifdef CONFIG_NFS_V2
>> + init_nfs_v2();
>> +#endif
>> +#ifdef CONFIG_NFS_V3
>> + init_nfs_v3();
>> +#endif
>> +#ifdef CONFIG_NFS_V4
>> + init_nfs_v4();
>> +#endif
>> +}
>> +
>> /*
>> * Allocate a shared client record
>> *
>> @@ -855,21 +926,15 @@ static int nfs_init_server(struct nfs_server *server,
>> };
>> struct rpc_timeout timeparms;
>> struct nfs_client *clp;
>> + struct nfs_subversion *nfs_mod;
>> int error;
>>
>> dprintk("--> nfs_init_server()\n");
>>
>> -
>> -#ifdef CONFIG_NFS_V2
>> - if (data->version == 2)
>> - cl_init.rpc_ops = &nfs_v2_clientops;
>> -#endif
>> -#ifdef CONFIG_NFS_V3
>> - if (data->version == 3)
>> - cl_init.rpc_ops = &nfs_v3_clientops;
>> -#endif
>> - if (cl_init.rpc_ops == NULL)
>> - return -EPROTONOSUPPORT;
>> + nfs_mod = get_nfs_version(data->version);
>> + if (IS_ERR(nfs_mod))
>> + return PTR_ERR(nfs_mod);
>> + cl_init.rpc_ops = nfs_mod->rpc_ops;
>>
>> nfs_init_timeout_values(&timeparms, data->nfs_server.protocol,
>> data->timeo, data->retrans);
>> diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
>> index 7bb4d13..02a1c43 100644
>> --- a/fs/nfs/inode.c
>> +++ b/fs/nfs/inode.c
>> @@ -52,6 +52,7 @@
>> #include "fscache.h"
>> #include "dns_resolve.h"
>> #include "pnfs.h"
>> +#include "nfs.h"
>> #include "netns.h"
>>
>> #define NFSDBG_FACILITY NFSDBG_VFS
>> @@ -1695,6 +1696,7 @@ static int __init init_nfs_fs(void)
>> #endif
>> if ((err = register_nfs_fs()) != 0)
>> goto out;
>> + nfs_register_versions();
>> return 0;
>> out:
>> #ifdef CONFIG_PROC_FS
>> diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c
>> index 8e65c7f..ddc7d19 100644
>> --- a/fs/nfs/mount_clnt.c
>> +++ b/fs/nfs/mount_clnt.c
>> @@ -488,19 +488,19 @@ static struct rpc_procinfo mnt3_procedures[] = {
>> };
>>
>>
>> -static const struct rpc_version mnt_version1 = {
>> +static struct rpc_version mnt_version1 = {
>> .number = 1,
>> .nrprocs = ARRAY_SIZE(mnt_procedures),
>> .procs = mnt_procedures,
>> };
>>
>> -static const struct rpc_version mnt_version3 = {
>> +static struct rpc_version mnt_version3 = {
>> .number = 3,
>> .nrprocs = ARRAY_SIZE(mnt3_procedures),
>> .procs = mnt3_procedures,
>> };
>>
>> -static const struct rpc_version *mnt_version[] = {
>> +static struct rpc_version *mnt_version[] = {
>> NULL,
>> &mnt_version1,
>> NULL,
>> diff --git a/fs/nfs/nfs.h b/fs/nfs/nfs.h
>> new file mode 100644
>> index 0000000..05f6849
>> --- /dev/null
>> +++ b/fs/nfs/nfs.h
>> @@ -0,0 +1,35 @@
>> +/*
>> + * Copyright (c) 2012 Netapp, Inc. All rights reserved.
>> + *
>> + * Function and structures exported by the NFS module
>> + * for use by NFS version-specific modules.
>> + */
>> +#ifndef __LINUX_INTERNAL_NFS_H
>> +#define __LINUX_INTERNAL_NFS_H
>> +
>> +#include <linux/fs.h>
>> +#include <linux/sunrpc/sched.h>
>> +#include <linux/nfs_xdr.h>
>> +
>> +struct nfs_subversion {
>> + unsigned int version; /* Protocol number */
> Won't this be a duplicate of what we already have in the rpc_ops?
Yeah, it would. I can change the register() / unregister() functions to take an int in addition to the subversion pointer.
>
>> + struct rpc_version *rpc_vers; /* NFS version information */
>> + const struct nfs_rpc_ops *rpc_ops; /* NFS operations */
>> + struct list_head list; /* List of NFS versions */
>> +
>> + void (*reference)(void); /* For reference counting */
>> + void (*unreference)(void); /* Also for reference counting */
>
> You are always just going to pin and unpin the module, so why do they
> need to be function pointers? Just have each module store a pointer to
> THIS_MODULE in the above structure instead.
That makes sense, I'll change it.
>
>> +};
>> +
>> +void nfs_register_versions(void);
>> +int init_nfs_v2(void);
>> +int init_nfs_v3(void);
>> +int init_nfs_v4(void);
>> +
>> +struct nfs_subversion *get_nfs_version(unsigned int);
>> +struct nfs_subversion *get_nfs_client_version(struct nfs_client *);
>> +struct nfs_subversion *get_nfs_server_version(struct nfs_server *);
>> +void register_nfs_version(struct nfs_subversion *);
>> +void unregister_nfs_version(struct nfs_subversion *);
>> +
>> +#endif /* __LINUX_INTERNAL_NFS_H */
>> diff --git a/fs/nfs/nfs2super.c b/fs/nfs/nfs2super.c
>> new file mode 100644
>> index 0000000..12fa906
>> --- /dev/null
>> +++ b/fs/nfs/nfs2super.c
>> @@ -0,0 +1,31 @@
>> +/*
>> + * Copyright (c) 2012 Netapp, Inc. All rights reserved.
>> + */
>> +#include <linux/module.h>
>> +#include <linux/nfs_fs.h>
>> +#include "nfs.h"
>> +
>> +static void nfs2_reference(void)
>> +{
>> + try_module_get(THIS_MODULE);
>> +}
>> +
>> +static void nfs2_unreference(void)
>> +{
>> + module_put(THIS_MODULE);
>> +}
>> +
>> +static struct nfs_subversion nfs_v2 = {
>> + .version = 2,
>> + .rpc_vers = &nfs_version2,
>> + .rpc_ops = &nfs_v2_clientops,
>> +
>> + .reference = nfs2_reference,
>> + .unreference = nfs2_unreference,
>> +};
>> +
>> +int __init init_nfs_v2(void)
>> +{
>> + register_nfs_version(&nfs_v2);
>> + return 0;
>> +}
>> diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c
>> index a01084d..5d9ec8b 100644
>> --- a/fs/nfs/nfs2xdr.c
>> +++ b/fs/nfs/nfs2xdr.c
>> @@ -1086,7 +1086,7 @@ struct rpc_procinfo nfs_procedures[] = {
>> PROC(STATFS, fhandle, statfsres, 0),
>> };
>>
>> -const struct rpc_version nfs_version2 = {
>> +struct rpc_version nfs_version2 = {
>> .number = 2,
>> .nrprocs = ARRAY_SIZE(nfs_procedures),
>> .procs = nfs_procedures
>> diff --git a/fs/nfs/nfs3super.c b/fs/nfs/nfs3super.c
>> new file mode 100644
>> index 0000000..a02c815
>> --- /dev/null
>> +++ b/fs/nfs/nfs3super.c
>> @@ -0,0 +1,31 @@
>> +/*
>> + * Copyright (c) 2012 Netapp, Inc. All rights reserved.
>> + */
>> +#include <linux/module.h>
>> +#include <linux/nfs_fs.h>
>> +#include "nfs.h"
>> +
>> +static void nfs3_reference(void)
>> +{
>> + try_module_get(THIS_MODULE);
>> +}
>> +
>> +static void nfs3_unreference(void)
>> +{
>> + module_put(THIS_MODULE);
>> +}
>> +
>> +static struct nfs_subversion nfs_v3 = {
>> + .version = 3,
>> + .rpc_vers = &nfs_version3,
>> + .rpc_ops = &nfs_v3_clientops,
>> +
>> + .reference = nfs3_reference,
>> + .unreference = nfs3_unreference,
>> +};
>> +
>> +int __init init_nfs_v3(void)
>> +{
>> + register_nfs_version(&nfs_v3);
>> + return 0;
>> +}
>> diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
>> index a77cc9a..5f9aabd 100644
>> --- a/fs/nfs/nfs3xdr.c
>> +++ b/fs/nfs/nfs3xdr.c
>> @@ -2461,7 +2461,7 @@ struct rpc_procinfo nfs3_procedures[] = {
>> PROC(COMMIT, commit, commit, 5),
>> };
>>
>> -const struct rpc_version nfs_version3 = {
>> +struct rpc_version nfs_version3 = {
>> .number = 3,
>> .nrprocs = ARRAY_SIZE(nfs3_procedures),
>> .procs = nfs3_procedures
>> @@ -2489,7 +2489,7 @@ static struct rpc_procinfo nfs3_acl_procedures[] = {
>> },
>> };
>>
>> -const struct rpc_version nfsacl_version3 = {
>> +struct rpc_version nfsacl_version3 = {
>> .number = 3,
>> .nrprocs = sizeof(nfs3_acl_procedures)/
>> sizeof(nfs3_acl_procedures[0]),
>> diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
>> new file mode 100644
>> index 0000000..9b2a679
>> --- /dev/null
>> +++ b/fs/nfs/nfs4super.c
>> @@ -0,0 +1,31 @@
>> +/*
>> + * Copyright (c) 2012 Netapp, Inc. All rights reserved.
>> + */
>> +#include <linux/module.h>
>> +#include <linux/nfs_fs.h>
>> +#include "nfs.h"
>> +
>> +static void nfs4_reference(void)
>> +{
>> + try_module_get(THIS_MODULE);
>> +}
>> +
>> +static void nfs4_unreference(void)
>> +{
>> + module_put(THIS_MODULE);
>> +}
>> +
>> +static struct nfs_subversion nfs_v4 = {
>> + .version = 4,
>> + .rpc_vers = &nfs_version4,
>> + .rpc_ops = &nfs_v4_clientops,
>> +
>> + .reference = nfs4_reference,
>> + .unreference = nfs4_unreference,
>> +};
>> +
>> +int __init init_nfs_v4(void)
>> +{
>> + register_nfs_version(&nfs_v4);
>> + return 0;
>> +}
>> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
>> index c74fdb1..cfd333c 100644
>> --- a/fs/nfs/nfs4xdr.c
>> +++ b/fs/nfs/nfs4xdr.c
>> @@ -7071,7 +7071,7 @@ struct rpc_procinfo nfs4_procedures[] = {
>> #endif /* CONFIG_NFS_V4_1 */
>> };
>>
>> -const struct rpc_version nfs_version4 = {
>> +struct rpc_version nfs_version4 = {
>> .number = 4,
>> .nrprocs = ARRAY_SIZE(nfs4_procedures),
>> .procs = nfs4_procedures
>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>> index aac4030..5ab7c0d 100644
>> --- a/fs/nfs/super.c
>> +++ b/fs/nfs/super.c
>> @@ -65,6 +65,7 @@
>> #include "internal.h"
>> #include "fscache.h"
>> #include "pnfs.h"
>> +#include "nfs.h"
>>
>> #define NFSDBG_FACILITY NFSDBG_VFS
>>
>> @@ -2284,6 +2285,22 @@ static int nfs_bdi_register(struct nfs_server *server)
>> return bdi_register_dev(&server->backing_dev_info, server->s_dev);
>> }
>>
>> +static int nfs_register(struct nfs_server *server)
>> +{
>> + struct nfs_subversion *nfs_mod = get_nfs_server_version(server);
>> + int err = nfs_bdi_register(server);
>> + if (!err)
>> + nfs_mod->reference();
>> + return err;
>> +}
>> +
>> +static void nfs_unregister(struct nfs_server *server)
>> +{
>> + struct nfs_subversion *nfs_mod = get_nfs_server_version(server);
>> + bdi_unregister(&server->backing_dev_info);
>> + nfs_mod->unreference();
>> +}
>> +
>> static struct dentry *nfs_fs_mount(struct file_system_type *fs_type,
>> int flags, const char *dev_name, void *raw_data)
>> {
>> @@ -2296,6 +2313,7 @@ static struct dentry *nfs_fs_mount(struct file_system_type *fs_type,
>> struct nfs_sb_mountdata sb_mntdata = {
>> .mntflags = flags,
>> };
>> + struct nfs_subversion *nfs_mod;
>> int error;
>>
>> data = nfs_alloc_parsed_mount_data(NFS_DEFAULT_VERSION);
>> @@ -2310,6 +2328,12 @@ static struct dentry *nfs_fs_mount(struct file_system_type *fs_type,
>> goto out;
>> }
>>
>> + nfs_mod = get_nfs_version(data->version);
>> + if (IS_ERR(nfs_mod)) {
>> + mntroot = (struct dentry *)nfs_mod;
>> + goto out;
>> + }
>> +
>> #ifdef CONFIG_NFS_V4
>> if (data->version == 4) {
>> mntroot = nfs4_try_mount(flags, dev_name, data);
>> @@ -2343,7 +2367,7 @@ static struct dentry *nfs_fs_mount(struct file_system_type *fs_type,
>> nfs_free_server(server);
>> server = NULL;
>> } else {
>> - error = nfs_bdi_register(server);
>> + error = nfs_register(server);
>> if (error) {
>> mntroot = ERR_PTR(error);
>> goto error_splat_bdi;
>> @@ -2380,7 +2404,7 @@ error_splat_root:
>> mntroot = ERR_PTR(error);
>> error_splat_super:
>> if (server && !s->s_root)
>> - bdi_unregister(&server->backing_dev_info);
>> + nfs_unregister(server);
>> error_splat_bdi:
>> deactivate_locked_super(s);
>> goto out;
>> @@ -2392,9 +2416,7 @@ error_splat_bdi:
>> */
>> static void nfs_put_super(struct super_block *s)
>> {
>> - struct nfs_server *server = NFS_SB(s);
>> -
>> - bdi_unregister(&server->backing_dev_info);
>> + nfs_unregister(NFS_SB(s));
>> }
>>
>> /*
>> @@ -2454,7 +2476,7 @@ nfs_xdev_mount(struct file_system_type *fs_type, int flags,
>> nfs_free_server(server);
>> server = NULL;
>> } else {
>> - error = nfs_bdi_register(server);
>> + error = nfs_register(server);
>> if (error)
>> goto error_splat_bdi;
>> }
>> @@ -2492,7 +2514,7 @@ out_err_noserver:
>>
>> error_splat_super:
>> if (server && !s->s_root)
>> - bdi_unregister(&server->backing_dev_info);
>> + nfs_unregister(server);
>> error_splat_bdi:
>> deactivate_locked_super(s);
>> dprintk("<-- nfs_xdev_mount() = %d [splat]\n", error);
>> @@ -2717,7 +2739,7 @@ nfs4_remote_mount(struct file_system_type *fs_type, int flags,
>> nfs_free_server(server);
>> server = NULL;
>> } else {
>> - error = nfs_bdi_register(server);
>> + error = nfs_register(server);
>> if (error)
>> goto error_splat_bdi;
>> }
>> @@ -2755,7 +2777,7 @@ error_splat_root:
>> dput(mntroot);
>> error_splat_super:
>> if (server && !s->s_root)
>> - bdi_unregister(&server->backing_dev_info);
>> + nfs_unregister(server);
>> error_splat_bdi:
>> deactivate_locked_super(s);
>> goto out;
>> @@ -2977,7 +2999,7 @@ nfs4_xdev_mount(struct file_system_type *fs_type, int flags,
>> nfs_free_server(server);
>> server = NULL;
>> } else {
>> - error = nfs_bdi_register(server);
>> + error = nfs_register(server);
>> if (error)
>> goto error_splat_bdi;
>> }
>> @@ -3014,7 +3036,7 @@ out_err_noserver:
>>
>> error_splat_super:
>> if (server && !s->s_root)
>> - bdi_unregister(&server->backing_dev_info);
>> + nfs_unregister(server);
>> error_splat_bdi:
>> deactivate_locked_super(s);
>> dprintk("<-- nfs4_xdev_mount() = %d [splat]\n", error);
>> @@ -3068,7 +3090,7 @@ nfs4_remote_referral_mount(struct file_system_type *fs_type, int flags,
>> nfs_free_server(server);
>> server = NULL;
>> } else {
>> - error = nfs_bdi_register(server);
>> + error = nfs_register(server);
>> if (error)
>> goto error_splat_bdi;
>> }
>> @@ -3108,7 +3130,7 @@ out_err_nofh:
>>
>> error_splat_super:
>> if (server && !s->s_root)
>> - bdi_unregister(&server->backing_dev_info);
>> + nfs_unregister(server);
>> error_splat_bdi:
>> deactivate_locked_super(s);
>> nfs_free_fhandle(mntfh);
>> diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
>> index 0e262f3..74d19d4 100644
>> --- a/fs/nfsd/nfs4callback.c
>> +++ b/fs/nfsd/nfs4callback.c
>> @@ -605,7 +605,7 @@ static struct rpc_version nfs_cb_version4 = {
>> .procs = nfs4_cb_procedures
>> };
>>
>> -static const struct rpc_version *nfs_cb_version[] = {
>> +static struct rpc_version *nfs_cb_version[] = {
>> &nfs_cb_version4,
>> };
>>
>> diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h
>> index e58c88b..7353821 100644
>> --- a/include/linux/lockd/xdr4.h
>> +++ b/include/linux/lockd/xdr4.h
>> @@ -42,6 +42,6 @@ int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
>> int nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *);
>> int nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *);
>> */
>> -extern const struct rpc_version nlm_version4;
>> +extern struct rpc_version nlm_version4;
>>
>> #endif /* LOCKD_XDR4_H */
>> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
>> index bfd0d1b..a52ddd5 100644
>> --- a/include/linux/nfs_xdr.h
>> +++ b/include/linux/nfs_xdr.h
>> @@ -1300,11 +1300,11 @@ struct nfs_rpc_ops {
>> extern const struct nfs_rpc_ops nfs_v2_clientops;
>> extern const struct nfs_rpc_ops nfs_v3_clientops;
>> extern const struct nfs_rpc_ops nfs_v4_clientops;
>> -extern const struct rpc_version nfs_version2;
>> -extern const struct rpc_version nfs_version3;
>> -extern const struct rpc_version nfs_version4;
>> +extern struct rpc_version nfs_version2;
>> +extern struct rpc_version nfs_version3;
>> +extern struct rpc_version nfs_version4;
>>
>> -extern const struct rpc_version nfsacl_version3;
>> +extern struct rpc_version nfsacl_version3;
>> extern const struct rpc_program nfsacl_program;
>>
>> #endif
>> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
>> index 523547e..624d8e3 100644
>> --- a/include/linux/sunrpc/clnt.h
>> +++ b/include/linux/sunrpc/clnt.h
>> @@ -72,7 +72,7 @@ struct rpc_program {
>> const char * name; /* protocol name */
>> u32 number; /* program number */
>> unsigned int nrvers; /* number of versions */
>> - const struct rpc_version ** version; /* version array */
>> + struct rpc_version ** version; /* version array */
>
> This shouldn't be necessary.
Ok, I'll take it out (probably with the rest of the const changes).
- Bryan
>
>> struct rpc_stat * stats; /* statistics */
>> const char * pipe_dir_name; /* path to rpc_pipefs dir */
>> };
>> diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
>> index 207a746..227b5fb 100644
>> --- a/net/sunrpc/rpcb_clnt.c
>> +++ b/net/sunrpc/rpcb_clnt.c
>> @@ -1081,25 +1081,25 @@ static const struct rpcb_info rpcb_next_version6[] = {
>> },
>> };
>>
>> -static const struct rpc_version rpcb_version2 = {
>> +static struct rpc_version rpcb_version2 = {
>> .number = RPCBVERS_2,
>> .nrprocs = ARRAY_SIZE(rpcb_procedures2),
>> .procs = rpcb_procedures2
>> };
>>
>> -static const struct rpc_version rpcb_version3 = {
>> +static struct rpc_version rpcb_version3 = {
>> .number = RPCBVERS_3,
>> .nrprocs = ARRAY_SIZE(rpcb_procedures3),
>> .procs = rpcb_procedures3
>> };
>>
>> -static const struct rpc_version rpcb_version4 = {
>> +static struct rpc_version rpcb_version4 = {
>> .number = RPCBVERS_4,
>> .nrprocs = ARRAY_SIZE(rpcb_procedures4),
>> .procs = rpcb_procedures4
>> };
>>
>> -static const struct rpc_version *rpcb_version[] = {
>> +static struct rpc_version *rpcb_version[] = {
>> NULL,
>> NULL,
>> &rpcb_version2,
>
next prev parent reply other threads:[~2012-03-21 16:36 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-21 15:20 [PATCH v4 00/23] NFS: Create NFS Modules bjschuma
2012-03-21 15:20 ` [PATCH v4 01/23] NFS: Relocate the stat_to_errno() function bjschuma
2012-03-21 15:20 ` [PATCH v4 02/23] NFS: Make v2 configurable bjschuma
2012-03-21 15:20 ` [PATCH v4 03/23] NFS: Add version registering framework bjschuma
2012-03-21 15:57 ` Myklebust, Trond
2012-03-21 16:36 ` Bryan Schumaker [this message]
2012-03-21 16:03 ` Myklebust, Trond
2012-03-21 16:38 ` Bryan Schumaker
2012-03-21 15:20 ` [PATCH v4 04/23] NFS: Convert v2 into a module bjschuma
2012-03-21 15:20 ` [PATCH v4 05/23] NFS: Break up the nfs_fs_mount function bjschuma
2012-03-21 15:20 ` [PATCH v4 06/23] NFS: Create a single nfs_clone_super() function bjschuma
2012-03-21 15:20 ` [PATCH v4 07/23] NFS: Version specific xdev mounting bjschuma
2012-03-21 15:20 ` [PATCH v4 08/23] NFS: Only initialize the ACL client in the v3 case bjschuma
2012-03-21 15:20 ` [PATCH v4 09/23] NFS: Convert v3 into a module bjschuma
2012-03-21 15:20 ` [PATCH v4 10/23] NFS: Initialize NFS v4 from nfs4super.c bjschuma
2012-03-21 15:20 ` [PATCH v4 11/23] NFS: Move lots of code from super.c bjschuma
2012-03-21 15:20 ` [PATCH v4 12/23] NFS: module-specific submount function bjschuma
2012-03-21 15:20 ` [PATCH v4 13/23] NFS: Custom alloc and free client functions for modules bjschuma
2012-03-21 15:20 ` [PATCH v4 14/23] NFS: Move nfs4_set_client() and support code to nfs4client.c bjschuma
2012-03-21 15:20 ` [PATCH v4 15/23] NFS: Move the nfs4_init_client() " bjschuma
2012-03-21 15:20 ` [PATCH v4 16/23] NFS: Move the v4 getroot code to nfs4getroot.c bjschuma
2012-03-21 15:20 ` [PATCH v4 17/23] NFS: Deal with delegations bjschuma
2012-03-21 15:20 ` [PATCH v4 18/23] NFS: Create a v4-specific fsync function bjschuma
2012-03-21 15:20 ` [PATCH v4 19/23] NFS: Create custom NFS v4 write_inode() function bjschuma
2012-03-21 15:20 ` [PATCH v4 20/23] NFS: Create custom init_read() and init_write() functions bjschuma
2012-03-21 15:20 ` [PATCH v4 21/23] NFS: Give modules a custom set / unset layoutdriver functions bjschuma
2012-03-21 15:20 ` [PATCH v4 22/23] NFS: Use the IS_ENABLED macro for CONFIG_NFS_V4 bjschuma
2012-03-21 15:20 ` [PATCH v4 23/23] NFS: Convert v4 into a module bjschuma
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=4F6A0371.3090907@netapp.com \
--to=bjschuma@netapp.com \
--cc=Bryan.Schumaker@netapp.com \
--cc=Trond.Myklebust@netapp.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.