This patch should work better, thanks Fengguang!
- Bryan
I want to initialize all of NFS v4 in a single function that will
eventually be used as the v4 module init function.
Signed-off-by: Bryan Schumaker <bjschuma@xxxxxxxxxx>
Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx>
---
v3: Don't declare exit_nfs_v4() as an __exit function
fs/nfs/Makefile | 2 +-
fs/nfs/inode.c | 67 ++++++++++++++++++++++++++++++------------------------
fs/nfs/nfs4_fs.h | 4 ++++
fs/nfs/nfs4super.c | 23 +++++++++++++++++++
4 files changed, 65 insertions(+), 31 deletions(-)
create mode 100644 fs/nfs/nfs4super.c
diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
index 7ddd45d..162a699 100644
--- a/fs/nfs/Makefile
+++ b/fs/nfs/Makefile
@@ -13,7 +13,7 @@ nfs-$(CONFIG_NFS_V2) += proc.o nfs2xdr.o
nfs-$(CONFIG_NFS_V3) += 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/inode.c b/fs/nfs/inode.c
index 28c9ebb..35f7e4b 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -32,7 +32,6 @@
#include <linux/lockd/bind.h>
#include <linux/seq_file.h>
#include <linux/mount.h>
-#include <linux/nfs_idmap.h>
#include <linux/vfs.h>
#include <linux/inet.h>
#include <linux/nfs_xdr.h>
@@ -1628,87 +1627,96 @@ static int __init init_nfs_fs(void)
{
int err;
- err = nfs_idmap_init();
- if (err < 0)
- goto out10;
-
err = nfs_dns_resolver_init();
if (err < 0)
- goto out9;
+ goto out11;
err = register_pernet_subsys(&nfs_net_ops);
if (err < 0)
- goto out8;
+ goto out10;
err = nfs_fscache_register();
if (err < 0)
- goto out7;
+ goto out9;
err = nfsiod_start();
if (err)
- goto out6;
+ goto out8;
err = nfs_fs_proc_init();
if (err)
- goto out5;
+ goto out7;
err = nfs_init_nfspagecache();
if (err)
- goto out4;
+ goto out6;
err = nfs_init_inodecache();
if (err)
- goto out3;
+ goto out5;
err = nfs_init_readpagecache();
if (err)
- goto out2;
+ goto out4;
err = nfs_init_writepagecache();
if (err)
- goto out1;
+ goto out3;
- goto out0;
+ goto out2;
#ifdef CONFIG_PROC_FS
rpc_proc_register(&init_net, &nfs_rpcstat);
#endif
+
+#ifdef CONFIG_NFS_V4
+ err = init_nfs_v4();
+ if (err)
+ goto out1;
+#endif
+
if ((err = register_nfs_fs()) != 0)
- goto out;
+ goto out0;
+
return 0;
-out:
+out0:
+#ifdef CONFIG_NFS_V4
+ exit_nfs_v4();
+out1:
+#endif
#ifdef CONFIG_PROC_FS
rpc_proc_unregister(&init_net, "nfs");
#endif
nfs_destroy_directcache();
-out0:
- nfs_destroy_writepagecache();
-out1:
- nfs_destroy_readpagecache();
out2:
- nfs_destroy_inodecache();
+ nfs_destroy_writepagecache();
out3:
- nfs_destroy_nfspagecache();
+ nfs_destroy_readpagecache();
out4:
- nfs_fs_proc_exit();
+ nfs_destroy_inodecache();
out5:
- nfsiod_stop();
+ nfs_destroy_nfspagecache();
out6:
- nfs_fscache_unregister();
+ nfs_fs_proc_exit();
out7:
- unregister_pernet_subsys(&nfs_net_ops);
+ nfsiod_stop();
out8:
- nfs_dns_resolver_destroy();
+ nfs_fscache_unregister();
out9:
- nfs_idmap_quit();
+ unregister_pernet_subsys(&nfs_net_ops);
out10:
+ nfs_dns_resolver_destroy();
+out11:
return err;
}
static void __exit exit_nfs_fs(void)
{
+#ifdef CONFIG_NFS_V4
+ exit_nfs_v4();
+#endif
nfs_destroy_directcache();
nfs_destroy_writepagecache();
nfs_destroy_readpagecache();
@@ -1717,7 +1725,6 @@ static void __exit exit_nfs_fs(void)
nfs_fscache_unregister();
unregister_pernet_subsys(&nfs_net_ops);
nfs_dns_resolver_destroy();
- nfs_idmap_quit();
#ifdef CONFIG_PROC_FS
rpc_proc_unregister(&init_net, "nfs");
#endif
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
index e2c4c72..1a6ed3f 100644
--- a/fs/nfs/nfs4_fs.h
+++ b/fs/nfs/nfs4_fs.h
@@ -364,6 +364,10 @@ extern void nfs4_free_lock_state(struct nfs_server *server, struct nfs4_lock_sta
extern const nfs4_stateid zero_stateid;
+/* nfs4super.c */
+int init_nfs_v4(void);
+void exit_nfs_v4(void);
+
/* nfs4xdr.c */
extern struct rpc_procinfo nfs4_procedures[];
diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
new file mode 100644
index 0000000..baa14d5
--- /dev/null
+++ b/fs/nfs/nfs4super.c
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2012 Bryan Schumaker <bjschuma@xxxxxxxxxx>
+ */
+#include <linux/init.h>
+#include <linux/nfs_idmap.h>
+
+int __init init_nfs_v4(void)
+{
+ int err;
+
+ err = nfs_idmap_init();
+ if (err)
+ goto out;
+
+ return 0;
+out:
+ return err;
+}
+
+void exit_nfs_v4(void)
+{
+ nfs_idmap_quit();
+}
--
1.7.11.2
On 07/16/2012 04:39 PM, bjschuma@xxxxxxxxxx wrote:
> From: Bryan Schumaker <bjschuma@xxxxxxxxxx>
>
> I want to initialize all of NFS v4 in a single function that will
> eventually be used as the v4 module init function.
>
> Signed-off-by: Bryan Schumaker <bjschuma@xxxxxxxxxx>
> ---
> fs/nfs/Makefile | 2 +-
> fs/nfs/inode.c | 67 ++++++++++++++++++++++++++++++------------------------
> fs/nfs/nfs4_fs.h | 4 ++++
> fs/nfs/nfs4super.c | 23 +++++++++++++++++++
> 4 files changed, 65 insertions(+), 31 deletions(-)
> create mode 100644 fs/nfs/nfs4super.c
>
> diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
> index 7ddd45d..162a699 100644
> --- a/fs/nfs/Makefile
> +++ b/fs/nfs/Makefile
> @@ -13,7 +13,7 @@ nfs-$(CONFIG_NFS_V2) += proc.o nfs2xdr.o
> nfs-$(CONFIG_NFS_V3) += 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/inode.c b/fs/nfs/inode.c
> index 28c9ebb..35f7e4b 100644
> --- a/fs/nfs/inode.c
> +++ b/fs/nfs/inode.c
> @@ -32,7 +32,6 @@
> #include <linux/lockd/bind.h>
> #include <linux/seq_file.h>
> #include <linux/mount.h>
> -#include <linux/nfs_idmap.h>
> #include <linux/vfs.h>
> #include <linux/inet.h>
> #include <linux/nfs_xdr.h>
> @@ -1628,87 +1627,96 @@ static int __init init_nfs_fs(void)
> {
> int err;
>
> - err = nfs_idmap_init();
> - if (err < 0)
> - goto out10;
> -
> err = nfs_dns_resolver_init();
> if (err < 0)
> - goto out9;
> + goto out11;
>
> err = register_pernet_subsys(&nfs_net_ops);
> if (err < 0)
> - goto out8;
> + goto out10;
>
> err = nfs_fscache_register();
> if (err < 0)
> - goto out7;
> + goto out9;
>
> err = nfsiod_start();
> if (err)
> - goto out6;
> + goto out8;
>
> err = nfs_fs_proc_init();
> if (err)
> - goto out5;
> + goto out7;
>
> err = nfs_init_nfspagecache();
> if (err)
> - goto out4;
> + goto out6;
>
> err = nfs_init_inodecache();
> if (err)
> - goto out3;
> + goto out5;
>
> err = nfs_init_readpagecache();
> if (err)
> - goto out2;
> + goto out4;
>
> err = nfs_init_writepagecache();
> if (err)
> - goto out1;
> + goto out3;
>
> err = nfs_init_directcache();
> if (err)
> - goto out0;
> + goto out2;
>
> #ifdef CONFIG_PROC_FS
> rpc_proc_register(&init_net, &nfs_rpcstat);
> #endif
> +
> +#ifdef CONFIG_NFS_V4
> + err = init_nfs_v4();
> + if (err)
> + goto out1;
> +#endif
> +
> if ((err = register_nfs_fs()) != 0)
> - goto out;
> + goto out0;
> +
> return 0;
> -out:
> +out0:
> +#ifdef CONFIG_NFS_V4
> + exit_nfs_v4();
> +out1:
> +#endif
> #ifdef CONFIG_PROC_FS
> rpc_proc_unregister(&init_net, "nfs");
> #endif
> nfs_destroy_directcache();
> -out0:
> - nfs_destroy_writepagecache();
> -out1:
> - nfs_destroy_readpagecache();
> out2:
> - nfs_destroy_inodecache();
> + nfs_destroy_writepagecache();
> out3:
> - nfs_destroy_nfspagecache();
> + nfs_destroy_readpagecache();
> out4:
> - nfs_fs_proc_exit();
> + nfs_destroy_inodecache();
> out5:
> - nfsiod_stop();
> + nfs_destroy_nfspagecache();
> out6:
> - nfs_fscache_unregister();
> + nfs_fs_proc_exit();
> out7:
> - unregister_pernet_subsys(&nfs_net_ops);
> + nfsiod_stop();
> out8:
> - nfs_dns_resolver_destroy();
> + nfs_fscache_unregister();
> out9:
> - nfs_idmap_quit();
> + unregister_pernet_subsys(&nfs_net_ops);
> out10:
> + nfs_dns_resolver_destroy();
> +out11:
> return err;
> }
>
> static void __exit exit_nfs_fs(void)
> {
> +#ifdef CONFIG_NFS_V4
> + exit_nfs_v4();
> +#endif
> nfs_destroy_directcache();
> nfs_destroy_writepagecache();
> nfs_destroy_readpagecache();
> @@ -1717,7 +1725,6 @@ static void __exit exit_nfs_fs(void)
> nfs_fscache_unregister();
> unregister_pernet_subsys(&nfs_net_ops);
> nfs_dns_resolver_destroy();
> - nfs_idmap_quit();
> #ifdef CONFIG_PROC_FS
> rpc_proc_unregister(&init_net, "nfs");
> #endif
> diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
> index e2c4c72..1a6ed3f 100644
> --- a/fs/nfs/nfs4_fs.h
> +++ b/fs/nfs/nfs4_fs.h
> @@ -364,6 +364,10 @@ extern void nfs4_free_lock_state(struct nfs_server *server, struct nfs4_lock_sta
>
> extern const nfs4_stateid zero_stateid;
>
> +/* nfs4super.c */
> +int init_nfs_v4(void);
> +void exit_nfs_v4(void);
> +
> /* nfs4xdr.c */
> extern struct rpc_procinfo nfs4_procedures[];
>
> diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
> new file mode 100644
> index 0000000..366e414
> --- /dev/null
> +++ b/fs/nfs/nfs4super.c
> @@ -0,0 +1,23 @@
> +/*
> + * Copyright (c) 2012 Bryan Schumaker <bjschuma@xxxxxxxxxx>
> + */
> +#include <linux/init.h>
> +#include <linux/nfs_idmap.h>
> +
> +int __init init_nfs_v4(void)
> +{
> + int err;
> +
> + err = nfs_idmap_init();
> + if (err)
> + goto out;
> +
> + return 0;
> +out:
> + return err;
> +}
> +
> +void __exit exit_nfs_v4(void)
> +{
> + nfs_idmap_quit();
> +}
>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux USB Development]
[Linux Media Development]
[Video for Linux]
[Linux NILFS]
[Linux Audio Users]
[Photo]
[Yosemite Info]
[Yosemite Photos]
[POF Sucks]
[Linux Kernel]
[Linux SCSI]
[XFree86]