Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / fs / nfsd / nfsctl.c
index 64c24af..2c53be6 100644 (file)
 #include <linux/sunrpc/clnt.h>
 #include <linux/sunrpc/gss_api.h>
 #include <linux/sunrpc/gss_krb5_enctypes.h>
+#include <linux/sunrpc/rpc_pipe_fs.h>
 #include <linux/module.h>
 
 #include "idmap.h"
 #include "nfsd.h"
 #include "cache.h"
 #include "fault_inject.h"
+#include "netns.h"
 
 /*
  *     We have a single directory with several nodes in it.
@@ -1124,14 +1126,26 @@ static int create_proc_exports_entry(void)
 }
 #endif
 
+int nfsd_net_id;
+static struct pernet_operations nfsd_net_ops = {
+       .id   = &nfsd_net_id,
+       .size = sizeof(struct nfsd_net),
+};
+
 static int __init init_nfsd(void)
 {
        int retval;
        printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n");
 
-       retval = nfsd4_init_slabs();
+       retval = register_cld_notifier();
        if (retval)
                return retval;
+       retval = register_pernet_subsys(&nfsd_net_ops);
+       if (retval < 0)
+               goto out_unregister_notifier;
+       retval = nfsd4_init_slabs();
+       if (retval)
+               goto out_unregister_pernet;
        nfs4_state_init();
        retval = nfsd_fault_inject_init(); /* nfsd fault injection controls */
        if (retval)
@@ -1169,6 +1183,10 @@ out_free_stat:
        nfsd_fault_inject_cleanup();
 out_free_slabs:
        nfsd4_free_slabs();
+out_unregister_pernet:
+       unregister_pernet_subsys(&nfsd_net_ops);
+out_unregister_notifier:
+       unregister_cld_notifier();
        return retval;
 }
 
@@ -1184,6 +1202,8 @@ static void __exit exit_nfsd(void)
        nfsd4_free_slabs();
        nfsd_fault_inject_cleanup();
        unregister_filesystem(&nfsd_fs_type);
+       unregister_pernet_subsys(&nfsd_net_ops);
+       unregister_cld_notifier();
 }
 
 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");