[PATCH v3 04/12] NFS: Create an init_nfs_v4() function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux