#include <linux/fs.h>
 #endif
 #include <linux/isdnif.h>
+#include <net/net_namespace.h>
 #include "isdn_divert.h"
 
 
        init_waitqueue_head(&rd_queue);
 
 #ifdef CONFIG_PROC_FS
-       isdn_proc_entry = proc_mkdir("net/isdn", NULL);
+       isdn_proc_entry = proc_mkdir("isdn", init_net.proc_net);
        if (!isdn_proc_entry)
                return (-1);
        isdn_divert_entry = create_proc_entry("divert", S_IFREG | S_IRUGO, isdn_proc_entry);
        if (!isdn_divert_entry) {
-               remove_proc_entry("net/isdn", NULL);
+               remove_proc_entry("isdn", init_net.proc_net);
                return (-1);
        }
        isdn_divert_entry->proc_fops = &isdn_fops; 
 
 #ifdef CONFIG_PROC_FS
        remove_proc_entry("divert", isdn_proc_entry);
-       remove_proc_entry("net/isdn", NULL);
+       remove_proc_entry("isdn", init_net.proc_net);
 #endif /* CONFIG_PROC_FS */
 
        return (0);
 
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/proc_fs.h>
+#include <net/net_namespace.h>
 
 #include "platform.h"
 #include "di_defs.h"
 
 static int DIVA_INIT_FUNCTION create_proc(void)
 {
-       proc_net_eicon = proc_mkdir("net/eicon", NULL);
+       proc_net_eicon = proc_mkdir("eicon", init_net.proc_net);
 
        if (proc_net_eicon) {
                if ((proc_didd =
 static void remove_proc(void)
 {
        remove_proc_entry(DRIVERLNAME, proc_net_eicon);
-       remove_proc_entry("net/eicon", NULL);
+       remove_proc_entry("eicon", init_net.proc_net);
 }
 
 static int DIVA_INIT_FUNCTION divadidd_init(void)
 
 #include <linux/proc_fs.h>
 #include <linux/pci.h>
 #include <linux/smp_lock.h>
+#include <net/net_namespace.h>
 
 #include "hysdn_defs.h"
 
        hysdn_card *card;
        unsigned char conf_name[20];
 
-       hysdn_proc_entry = proc_mkdir(PROC_SUBDIR_NAME, proc_net);
+       hysdn_proc_entry = proc_mkdir(PROC_SUBDIR_NAME, init_net.proc_net);
        if (!hysdn_proc_entry) {
                printk(KERN_ERR "HYSDN: unable to create hysdn subdir\n");
                return (-1);
                card = card->next;      /* point to next card */
        }
 
-       remove_proc_entry(PROC_SUBDIR_NAME, proc_net);
+       remove_proc_entry(PROC_SUBDIR_NAME, init_net.proc_net);
 }
 
 #include <linux/if_vlan.h>
 #include <linux/if_bonding.h>
 #include <net/route.h>
+#include <net/net_namespace.h>
 #include "bonding.h"
 #include "bond_3ad.h"
 #include "bond_alb.h"
 {
        int len = strlen(DRV_NAME);
 
-       for (bond_proc_dir = proc_net->subdir; bond_proc_dir;
+       for (bond_proc_dir = init_net.proc_net->subdir; bond_proc_dir;
             bond_proc_dir = bond_proc_dir->next) {
                if ((bond_proc_dir->namelen == len) &&
                    !memcmp(bond_proc_dir->name, DRV_NAME, len)) {
        }
 
        if (!bond_proc_dir) {
-               bond_proc_dir = proc_mkdir(DRV_NAME, proc_net);
+               bond_proc_dir = proc_mkdir(DRV_NAME, init_net.proc_net);
                if (bond_proc_dir) {
                        bond_proc_dir->owner = THIS_MODULE;
                } else {
                        bond_proc_dir->owner = NULL;
                }
        } else {
-               remove_proc_entry(DRV_NAME, proc_net);
+               remove_proc_entry(DRV_NAME, init_net.proc_net);
                bond_proc_dir = NULL;
        }
 }
 
 
 #include <net/ip.h>
 #include <net/arp.h>
+#include <net/net_namespace.h>
 
 #include <linux/bpqether.h>
 
 static int __init bpq_init_driver(void)
 {
 #ifdef CONFIG_PROC_FS
-       if (!proc_net_fops_create("bpqether", S_IRUGO, &bpq_info_fops)) {
+       if (!proc_net_fops_create(&init_net, "bpqether", S_IRUGO, &bpq_info_fops)) {
                printk(KERN_ERR
                        "bpq: cannot create /proc/net/bpqether entry.\n");
                return -ENOENT;
 
        unregister_netdevice_notifier(&bpq_dev_notifier);
 
-       proc_net_remove("bpqether");
+       proc_net_remove(&init_net, "bpqether");
 
        rtnl_lock();
        while (!list_empty(&bpq_devices)) {
 
 #include <linux/seq_file.h>
 #include <linux/bitops.h>
 
+#include <net/net_namespace.h>
 #include <net/ax25.h>
 
 #include <asm/irq.h>
        }
        rtnl_unlock();
 
-       proc_net_fops_create("z8530drv", 0, &scc_net_seq_fops);
+       proc_net_fops_create(&init_net, "z8530drv", 0, &scc_net_seq_fops);
 
        return 0;
 }
        if (Vector_Latch)
                release_region(Vector_Latch, 1);
 
-       proc_net_remove("z8530drv");
+       proc_net_remove(&init_net, "z8530drv");
 }
 
 MODULE_AUTHOR("Joerg Reuter <jreuter@yaina.de>");
 
 #include <linux/kernel.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 
 #include <asm/uaccess.h>
 #include <linux/init.h>
        yam_timer.expires = jiffies + HZ / 100;
        add_timer(&yam_timer);
 
-       proc_net_fops_create("yam", S_IRUGO, &yam_info_fops);
+       proc_net_fops_create(&init_net, "yam", S_IRUGO, &yam_info_fops);
        return 0;
  error:
        while (--i >= 0) {
                kfree(p);
        }
 
-       proc_net_remove("yam");
+       proc_net_remove(&init_net, "yam");
 }
 
 /* --------------------------------------------------------------------- */
 
 #include <linux/mm.h>
 #include <linux/ethtool.h>
 #include <linux/proc_fs.h>
+#include <net/net_namespace.h>
 #include <asm/semaphore.h>
 #include <asm/hvcall.h>
 #include <asm/atomic.h>
 static struct kobj_type ktype_veth_pool;
 
 #ifdef CONFIG_PROC_FS
-#define IBMVETH_PROC_DIR "net/ibmveth"
+#define IBMVETH_PROC_DIR "ibmveth"
 static struct proc_dir_entry *ibmveth_proc_dir;
 #endif
 
 #ifdef CONFIG_PROC_FS
 static void ibmveth_proc_register_driver(void)
 {
-       ibmveth_proc_dir = proc_mkdir(IBMVETH_PROC_DIR, NULL);
+       ibmveth_proc_dir = proc_mkdir(IBMVETH_PROC_DIR, init_net.proc_net);
        if (ibmveth_proc_dir) {
                SET_MODULE_OWNER(ibmveth_proc_dir);
        }
 
 static void ibmveth_proc_unregister_driver(void)
 {
-       remove_proc_entry(IBMVETH_PROC_DIR, NULL);
+       remove_proc_entry(IBMVETH_PROC_DIR, init_net.proc_net);
 }
 
 static void *ibmveth_seq_start(struct seq_file *seq, loff_t *pos)
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 
 #include <asm/uaccess.h>
 {
        struct proc_dir_entry *p;
 
-       p = create_proc_entry("net/pppoe", S_IRUGO, NULL);
+       p = create_proc_entry("pppoe", S_IRUGO, init_net.proc_net);
        if (!p)
                return -ENOMEM;
 
        dev_remove_pack(&pppoes_ptype);
        dev_remove_pack(&pppoed_ptype);
        unregister_netdevice_notifier(&pppoe_notifier);
-       remove_proc_entry("net/pppoe", NULL);
+       remove_proc_entry("pppoe", init_net.proc_net);
        proto_unregister(&pppoe_sk_proto);
 }
 
 
 #include <linux/hash.h>
 #include <linux/sort.h>
 #include <linux/proc_fs.h>
+#include <net/net_namespace.h>
 #include <net/dst.h>
 #include <net/ip.h>
 #include <net/udp.h>
                goto out_unregister_pppol2tp_proto;
 
 #ifdef CONFIG_PROC_FS
-       pppol2tp_proc = create_proc_entry("pppol2tp", 0, proc_net);
+       pppol2tp_proc = create_proc_entry("pppol2tp", 0, init_net.proc_net);
        if (!pppol2tp_proc) {
                err = -ENOMEM;
                goto out_unregister_pppox_proto;
        unregister_pppox_proto(PX_PROTO_OL2TP);
 
 #ifdef CONFIG_PROC_FS
-       remove_proc_entry("pppol2tp", proc_net);
+       remove_proc_entry("pppol2tp", init_net.proc_net);
 #endif
        proto_unregister(&pppol2tp_sk_proto);
 }
 
 #include <linux/bitops.h>
 #include <linux/jiffies.h>
 
+#include <net/net_namespace.h>
 #include <net/checksum.h>
 
 #include <asm/io.h>
 #if STREAMER_NETWORK_MONITOR
 #ifdef CONFIG_PROC_FS
        if (!dev_streamer)
-               create_proc_read_entry("net/streamer_tr", 0, 0,
+               create_proc_read_entry("streamer_tr", 0, init_net.proc_net,
                                        streamer_proc_info, NULL); 
        streamer_priv->next = dev_streamer;
        dev_streamer = streamer_priv;
                        }
                }
                if (!dev_streamer)
-                       remove_proc_entry("net/streamer_tr", NULL);
+                       remove_proc_entry("streamer_tr", init_net.proc_net);
        }
 #endif
 #endif
 
 #include <linux/jiffies.h>
 
 #include <net/checksum.h>
+#include <net/net_namespace.h>
 
 #include <asm/io.h>
 #include <asm/system.h>
        printk("Olympic: %s registered as: %s\n",olympic_priv->olympic_card_name,dev->name);
        if (olympic_priv->olympic_network_monitor) { /* Must go after register_netdev as we need the device name */ 
                char proc_name[20] ; 
-               strcpy(proc_name,"net/olympic_") ; 
+               strcpy(proc_name,"olympic_") ;
                strcat(proc_name,dev->name) ; 
-               create_proc_read_entry(proc_name,0,NULL,olympic_proc_info,(void *)dev) ; 
+               create_proc_read_entry(proc_name,0,init_net.proc_net,olympic_proc_info,(void *)dev) ;
                printk("Olympic: Network Monitor information: /proc/%s\n",proc_name); 
        }
        return  0 ;
 
        if (olympic_priv->olympic_network_monitor) { 
                char proc_name[20] ; 
-               strcpy(proc_name,"net/olympic_") ; 
+               strcpy(proc_name,"olympic_") ;
                strcat(proc_name,dev->name) ;
-               remove_proc_entry(proc_name,NULL); 
+               remove_proc_entry(proc_name,init_net.proc_net);
        }
        unregister_netdev(dev) ; 
        iounmap(olympic_priv->olympic_mmio) ; 
 
 #include <linux/rtnetlink.h>
 #include <linux/wireless.h>
 #include <linux/etherdevice.h>
+#include <net/net_namespace.h>
 #include <net/iw_handler.h>
 #include <net/ieee80211.h>
 #include <net/ieee80211_crypt.h>
 
 static int __init hostap_init(void)
 {
-       if (proc_net != NULL) {
-               hostap_proc = proc_mkdir("hostap", proc_net);
+       if (init_net.proc_net != NULL) {
+               hostap_proc = proc_mkdir("hostap", init_net.proc_net);
                if (!hostap_proc)
                        printk(KERN_WARNING "Failed to mkdir "
                               "/proc/net/hostap\n");
 {
        if (hostap_proc != NULL) {
                hostap_proc = NULL;
-               remove_proc_entry("hostap", proc_net);
+               remove_proc_entry("hostap", init_net.proc_net);
        }
 }
 
 
 #include <linux/serialP.h>
 #include <linux/rcupdate.h>
 #include <net/arp.h>
+#include <net/net_namespace.h>
 
 #include <linux/ip.h>
 #include <linux/tcp.h>
        /*
         * Register the status file with /proc
         */
-       proc_net_fops_create("strip", S_IFREG | S_IRUGO, &strip_seq_fops);
+       proc_net_fops_create(&init_net, "strip", S_IFREG | S_IRUGO, &strip_seq_fops);
 
        return status;
 }
        }
 
        /* Unregister with the /proc/net file here. */
-       proc_net_remove("strip");
+       proc_net_remove(&init_net, "strip");
 
        if ((i = tty_unregister_ldisc(N_STRIP)))
                printk(KERN_ERR "STRIP: can't unregister line discipline (err = %d)\n", i);
 
                proc_tty.o proc_misc.o
 
 proc-$(CONFIG_PROC_SYSCTL)     += proc_sysctl.o
+proc-$(CONFIG_NET)             += proc_net.o
 proc-$(CONFIG_PROC_KCORE)      += kcore.o
 proc-$(CONFIG_PROC_VMCORE)     += vmcore.o
 proc-$(CONFIG_PROC_DEVICETREE) += proc_devtree.o
 
 #else
 static inline void proc_sys_init(void) { }
 #endif
+#ifdef CONFIG_NET
+extern int proc_net_init(void);
+#else
+static inline int proc_net_init(void) { return 0; }
+#endif
 
 struct vmalloc_info {
        unsigned long   used;
 
 
 #include "internal.h"
 
-struct proc_dir_entry *proc_net, *proc_net_stat, *proc_bus, *proc_root_fs, *proc_root_driver;
+struct proc_dir_entry *proc_bus, *proc_root_fs, *proc_root_driver;
 
 static int proc_get_sb(struct file_system_type *fs_type,
        int flags, const char *dev_name, void *data, struct vfsmount *mnt)
                return;
        }
        proc_misc_init();
-       proc_net = proc_mkdir("net", NULL);
-       proc_net_stat = proc_mkdir("net/stat", NULL);
+
+       proc_net_init();
 
 #ifdef CONFIG_SYSVIPC
        proc_mkdir("sysvipc", NULL);
 EXPORT_SYMBOL(remove_proc_entry);
 EXPORT_SYMBOL(proc_root);
 EXPORT_SYMBOL(proc_root_fs);
-EXPORT_SYMBOL(proc_net);
-EXPORT_SYMBOL(proc_net_stat);
 EXPORT_SYMBOL(proc_bus);
 EXPORT_SYMBOL(proc_root_driver);
 
 #include <linux/magic.h>
 #include <asm/atomic.h>
 
+struct net;
 struct completion;
 
 /*
 
 extern struct proc_dir_entry proc_root;
 extern struct proc_dir_entry *proc_root_fs;
-extern struct proc_dir_entry *proc_net;
-extern struct proc_dir_entry *proc_net_stat;
 extern struct proc_dir_entry *proc_bus;
 extern struct proc_dir_entry *proc_root_driver;
 extern struct proc_dir_entry *proc_root_kcore;
        if (res) res->get_info=get_info;
        return res;
 }
- 
-static inline struct proc_dir_entry *proc_net_create(const char *name,
-       mode_t mode, get_info_t *get_info)
-{
-       return create_proc_info_entry(name,mode,proc_net,get_info);
-}
 
-static inline struct proc_dir_entry *proc_net_fops_create(const char *name,
-       mode_t mode, const struct file_operations *fops)
-{
-       struct proc_dir_entry *res = create_proc_entry(name, mode, proc_net);
-       if (res)
-               res->proc_fops = fops;
-       return res;
-}
-
-static inline void proc_net_remove(const char *name)
-{
-       remove_proc_entry(name,proc_net);
-}
+extern struct proc_dir_entry *proc_net_create(struct net *net,
+       const char *name, mode_t mode, get_info_t *get_info);
+extern struct proc_dir_entry *proc_net_fops_create(struct net *net,
+       const char *name, mode_t mode, const struct file_operations *fops);
+extern void proc_net_remove(struct net *net, const char *name);
 
 #else
 
 #define proc_root_driver NULL
-#define proc_net NULL
 #define proc_bus NULL
 
-#define proc_net_fops_create(name, mode, fops)  ({ (void)(mode), NULL; })
-#define proc_net_create(name, mode, info)      ({ (void)(mode), NULL; })
-static inline void proc_net_remove(const char *name) {}
+#define proc_net_fops_create(net, name, mode, fops)  ({ (void)(mode), NULL; })
+#define proc_net_create(net, name, mode, info) ({ (void)(mode), NULL; })
+static inline void proc_net_remove(struct net *net, const char *name) {}
 
 static inline void proc_flush_task(struct task_struct *task) { }
 
        return PROC_I(inode)->pde;
 }
 
+static inline struct net *PDE_NET(struct proc_dir_entry *pde)
+{
+       return pde->parent->data;
+}
+
+static inline struct net *PROC_NET(const struct inode *inode)
+{
+       return PDE_NET(PDE(inode));
+}
+
 struct proc_maps_private {
        struct pid *pid;
        struct task_struct *task;
 
 #include <linux/workqueue.h>
 #include <linux/list.h>
 
+struct proc_dir_entry;
 struct net {
        atomic_t                count;          /* To decided when the network
                                                 *  namespace should be freed.
                                                 */
        struct list_head        list;           /* list of network namespaces */
        struct work_struct      work;           /* work struct for freeing */
+
+       struct proc_dir_entry   *proc_net;
+       struct proc_dir_entry   *proc_net_stat;
+       struct proc_dir_entry   *proc_net_root;
 };
 
 extern struct net init_net;
 
 #include <linux/seq_file.h>
 #include <linux/init.h>
 #include <net/arp.h>
+#include <net/net_namespace.h>
 
 static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev);
 static void rif_check_expire(unsigned long dummy);
        rif_timer.function = rif_check_expire;
        add_timer(&rif_timer);
 
-       proc_net_fops_create("tr_rif", S_IRUGO, &rif_seq_fops);
+       proc_net_fops_create(&init_net, "tr_rif", S_IRUGO, &rif_seq_fops);
        return 0;
 }
 
 
 #include <linux/fs.h>
 #include <linux/netdevice.h>
 #include <linux/if_vlan.h>
+#include <net/net_namespace.h>
 #include "vlanproc.h"
 #include "vlan.h"
 
                remove_proc_entry(name_conf, proc_vlan_dir);
 
        if (proc_vlan_dir)
-               proc_net_remove(name_root);
+               proc_net_remove(&init_net, name_root);
 
        /* Dynamically added entries should be cleaned up as their vlan_device
         * is removed, so we should not have to take care of it here...
 
 int __init vlan_proc_init(void)
 {
-       proc_vlan_dir = proc_mkdir(name_root, proc_net);
+       proc_vlan_dir = proc_mkdir(name_root, init_net.proc_net);
        if (proc_vlan_dir) {
                proc_vlan_conf = create_proc_entry(name_conf,
                                                   S_IFREG|S_IRUSR|S_IWUSR,
 
 #include <linux/init.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <linux/atalk.h>
 
        struct proc_dir_entry *p;
        int rc = -ENOMEM;
 
-       atalk_proc_dir = proc_mkdir("atalk", proc_net);
+       atalk_proc_dir = proc_mkdir("atalk", init_net.proc_net);
        if (!atalk_proc_dir)
                goto out;
        atalk_proc_dir->owner = THIS_MODULE;
 out_route:
        remove_proc_entry("interface", atalk_proc_dir);
 out_interface:
-       remove_proc_entry("atalk", proc_net);
+       remove_proc_entry("atalk", init_net.proc_net);
        goto out;
 }
 
        remove_proc_entry("route", atalk_proc_dir);
        remove_proc_entry("socket", atalk_proc_dir);
        remove_proc_entry("arp", atalk_proc_dir);
-       remove_proc_entry("atalk", proc_net);
+       remove_proc_entry("atalk", init_net.proc_net);
 }
 
 #include <linux/netdevice.h>
 #include <linux/atmclip.h>
 #include <linux/init.h> /* for __init */
+#include <net/net_namespace.h>
 #include <net/atmclip.h>
 #include <asm/uaccess.h>
 #include <asm/atomic.h>
                if (e->dirent)
                        remove_proc_entry(e->name, atm_proc_root);
        }
-       remove_proc_entry("net/atm", NULL);
+       remove_proc_entry("atm", init_net.proc_net);
 }
 
 int __init atm_proc_init(void)
        static struct atm_proc_entry *e;
        int ret;
 
-       atm_proc_root = proc_mkdir("net/atm",NULL);
+       atm_proc_root = proc_mkdir("atm", init_net.proc_net);
        if (!atm_proc_root)
                goto err_out;
        for (e = atm_proc_ents; e->name; e++) {
 
 #include <linux/sysctl.h>
 #include <linux/init.h>
 #include <linux/spinlock.h>
+#include <net/net_namespace.h>
 #include <net/tcp_states.h>
 #include <net/ip.h>
 #include <net/arp.h>
        register_netdevice_notifier(&ax25_dev_notifier);
        ax25_register_sysctl();
 
-       proc_net_fops_create("ax25_route", S_IRUGO, &ax25_route_fops);
-       proc_net_fops_create("ax25", S_IRUGO, &ax25_info_fops);
-       proc_net_fops_create("ax25_calls", S_IRUGO, &ax25_uid_fops);
+       proc_net_fops_create(&init_net, "ax25_route", S_IRUGO, &ax25_route_fops);
+       proc_net_fops_create(&init_net, "ax25", S_IRUGO, &ax25_info_fops);
+       proc_net_fops_create(&init_net, "ax25_calls", S_IRUGO, &ax25_uid_fops);
 out:
        return rc;
 }
 
 static void __exit ax25_exit(void)
 {
-       proc_net_remove("ax25_route");
-       proc_net_remove("ax25");
-       proc_net_remove("ax25_calls");
+       proc_net_remove(&init_net, "ax25_route");
+       proc_net_remove(&init_net, "ax25");
+       proc_net_remove(&init_net, "ax25_calls");
        ax25_rt_free();
        ax25_uid_free();
        ax25_dev_free();
 
 #include <linux/etherdevice.h>
 #include <linux/notifier.h>
 #include <linux/skbuff.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <linux/rtnetlink.h>
 #include <linux/proc_fs.h>
 {
        int rc = -ENOMEM;
 
-       if (!proc_net_fops_create("dev", S_IRUGO, &dev_seq_fops))
+       if (!proc_net_fops_create(&init_net, "dev", S_IRUGO, &dev_seq_fops))
                goto out;
-       if (!proc_net_fops_create("softnet_stat", S_IRUGO, &softnet_seq_fops))
+       if (!proc_net_fops_create(&init_net, "softnet_stat", S_IRUGO, &softnet_seq_fops))
                goto out_dev;
-       if (!proc_net_fops_create("ptype", S_IRUGO, &ptype_seq_fops))
-               goto out_dev2;
+       if (!proc_net_fops_create(&init_net, "ptype", S_IRUGO, &ptype_seq_fops))
+               goto out_softnet;
 
        if (wext_proc_init())
-               goto out_softnet;
+               goto out_ptype;
        rc = 0;
 out:
        return rc;
+out_ptype:
+       proc_net_remove(&init_net, "ptype");
 out_softnet:
-       proc_net_remove("ptype");
-out_dev2:
-       proc_net_remove("softnet_stat");
+       proc_net_remove(&init_net, "softnet_stat");
 out_dev:
-       proc_net_remove("dev");
+       proc_net_remove(&init_net, "dev");
        goto out;
 }
 #else
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/init.h>
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/route.h>
 #include <linux/skbuff.h>
 
 void __init dev_mcast_init(void)
 {
-       proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops);
+       proc_net_fops_create(&init_net, "dev_mcast", 0, &dev_mc_seq_fops);
 }
 
 EXPORT_SYMBOL(dev_mc_add);
 
 #include <linux/sysctl.h>
 #endif
 #include <linux/times.h>
+#include <net/net_namespace.h>
 #include <net/neighbour.h>
 #include <net/dst.h>
 #include <net/sock.h>
                panic("cannot create neighbour cache statistics");
 
 #ifdef CONFIG_PROC_FS
-       tbl->pde = create_proc_entry(tbl->id, 0, proc_net_stat);
+       tbl->pde = create_proc_entry(tbl->id, 0, init_net.proc_net_stat);
        if (!tbl->pde)
                panic("cannot create neighbour proc dir entry");
        tbl->pde->proc_fops = &neigh_stat_seq_fops;
 
 #include <linux/wait.h>
 #include <linux/etherdevice.h>
 #include <linux/kthread.h>
+#include <net/net_namespace.h>
 #include <net/checksum.h>
 #include <net/ipv6.h>
 #include <net/addrconf.h>
 
        printk(KERN_INFO "%s", version);
 
-       pg_proc_dir = proc_mkdir(PG_PROC_DIR, proc_net);
+       pg_proc_dir = proc_mkdir(PG_PROC_DIR, init_net.proc_net);
        if (!pg_proc_dir)
                return -ENODEV;
        pg_proc_dir->owner = THIS_MODULE;
        if (pe == NULL) {
                printk(KERN_ERR "pktgen: ERROR: cannot create %s "
                       "procfs entry.\n", PGCTRL);
-               proc_net_remove(PG_PROC_DIR);
+               proc_net_remove(&init_net, PG_PROC_DIR);
                return -EINVAL;
        }
 
                       "all threads\n");
                unregister_netdevice_notifier(&pktgen_notifier_block);
                remove_proc_entry(PGCTRL, pg_proc_dir);
-               proc_net_remove(PG_PROC_DIR);
+               proc_net_remove(&init_net, PG_PROC_DIR);
                return -ENODEV;
        }
 
 
        /* Clean up proc file system */
        remove_proc_entry(PGCTRL, pg_proc_dir);
-       proc_net_remove(PG_PROC_DIR);
+       proc_net_remove(&init_net, PG_PROC_DIR);
 }
 
 module_init(pg_init);
 
 #include <linux/netdevice.h>
 #include <net/protocol.h>
 #include <linux/skbuff.h>
+#include <net/net_namespace.h>
 #include <net/request_sock.h>
 #include <net/sock.h>
 #include <net/xfrm.h>
 static int __init proto_init(void)
 {
        /* register /proc/net/protocols */
-       return proc_net_fops_create("protocols", S_IRUGO, &proto_seq_fops) == NULL ? -ENOBUFS : 0;
+       return proc_net_fops_create(&init_net, "protocols", S_IRUGO, &proto_seq_fops) == NULL ? -ENOBUFS : 0;
 }
 
 subsys_initcall(proto_init);
 
 #include <linux/module.h>
 #include <linux/kfifo.h>
 #include <linux/vmalloc.h>
+#include <net/net_namespace.h>
 
 #include "dccp.h"
 #include "ccid.h"
        if (IS_ERR(dccpw.fifo))
                return PTR_ERR(dccpw.fifo);
 
-       if (!proc_net_fops_create(procname, S_IRUSR, &dccpprobe_fops))
+       if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &dccpprobe_fops))
                goto err0;
 
        ret = register_jprobe(&dccp_send_probe);
        pr_info("DCCP watch registered (port=%d)\n", port);
        return 0;
 err1:
-       proc_net_remove(procname);
+       proc_net_remove(&init_net, procname);
 err0:
        kfifo_free(dccpw.fifo);
        return ret;
 static __exit void dccpprobe_exit(void)
 {
        kfifo_free(dccpw.fifo);
-       proc_net_remove(procname);
+       proc_net_remove(&init_net, procname);
        unregister_jprobe(&dccp_send_probe);
 
 }
 
 #include <linux/stat.h>
 #include <linux/init.h>
 #include <linux/poll.h>
+#include <net/net_namespace.h>
 #include <net/neighbour.h>
 #include <net/dst.h>
 #include <net/fib_rules.h>
        dev_add_pack(&dn_dix_packet_type);
        register_netdevice_notifier(&dn_dev_notifier);
 
-       proc_net_fops_create("decnet", S_IRUGO, &dn_socket_seq_fops);
+       proc_net_fops_create(&init_net, "decnet", S_IRUGO, &dn_socket_seq_fops);
        dn_register_sysctl();
 out:
        return rc;
        dn_neigh_cleanup();
        dn_fib_cleanup();
 
-       proc_net_remove("decnet");
+       proc_net_remove(&init_net, "decnet");
 
        proto_unregister(&dn_proto);
 }
 
 #include <linux/notifier.h>
 #include <asm/uaccess.h>
 #include <asm/system.h>
+#include <net/net_namespace.h>
 #include <net/neighbour.h>
 #include <net/dst.h>
 #include <net/flow.h>
        rtnl_register(PF_DECnet, RTM_DELADDR, dn_nl_deladdr, NULL);
        rtnl_register(PF_DECnet, RTM_GETADDR, NULL, dn_nl_dump_ifaddr);
 
-       proc_net_fops_create("decnet_dev", S_IRUGO, &dn_dev_seq_fops);
+       proc_net_fops_create(&init_net, "decnet_dev", S_IRUGO, &dn_dev_seq_fops);
 
 #ifdef CONFIG_SYSCTL
        {
        }
 #endif /* CONFIG_SYSCTL */
 
-       proc_net_remove("decnet_dev");
+       proc_net_remove(&init_net, "decnet_dev");
 
        dn_dev_devices_off();
 }
 
 #include <linux/rcupdate.h>
 #include <linux/jhash.h>
 #include <asm/atomic.h>
+#include <net/net_namespace.h>
 #include <net/neighbour.h>
 #include <net/dst.h>
 #include <net/flow.h>
 void __init dn_neigh_init(void)
 {
        neigh_table_init(&dn_neigh_table);
-       proc_net_fops_create("decnet_neigh", S_IRUGO, &dn_neigh_seq_fops);
+       proc_net_fops_create(&init_net, "decnet_neigh", S_IRUGO, &dn_neigh_seq_fops);
 }
 
 void __exit dn_neigh_cleanup(void)
 {
-       proc_net_remove("decnet_neigh");
+       proc_net_remove(&init_net, "decnet_neigh");
        neigh_table_clear(&dn_neigh_table);
 }
 
 #include <linux/rcupdate.h>
 #include <linux/times.h>
 #include <asm/errno.h>
+#include <net/net_namespace.h>
 #include <net/netlink.h>
 #include <net/neighbour.h>
 #include <net/dst.h>
 
        dn_dst_ops.gc_thresh = (dn_rt_hash_mask + 1);
 
-       proc_net_fops_create("decnet_cache", S_IRUGO, &dn_rt_cache_seq_fops);
+       proc_net_fops_create(&init_net, "decnet_cache", S_IRUGO, &dn_rt_cache_seq_fops);
 
 #ifdef CONFIG_DECNET_ROUTER
        rtnl_register(PF_DECnet, RTM_GETROUTE, dn_cache_getroute, dn_fib_dump);
        del_timer(&dn_route_timer);
        dn_run_flush(0);
 
-       proc_net_remove("decnet_cache");
+       proc_net_remove(&init_net, "decnet_cache");
 }
 
 
 #include <linux/wireless.h>
 #include <linux/etherdevice.h>
 #include <asm/uaccess.h>
+#include <net/net_namespace.h>
 #include <net/arp.h>
 
 #include <net/ieee80211.h>
        struct proc_dir_entry *e;
 
        ieee80211_debug_level = debug;
-       ieee80211_proc = proc_mkdir(DRV_NAME, proc_net);
+       ieee80211_proc = proc_mkdir(DRV_NAME, init_net.proc_net);
        if (ieee80211_proc == NULL) {
                IEEE80211_ERROR("Unable to create " DRV_NAME
                                " proc directory\n");
        e = create_proc_entry("debug_level", S_IFREG | S_IRUGO | S_IWUSR,
                              ieee80211_proc);
        if (!e) {
-               remove_proc_entry(DRV_NAME, proc_net);
+               remove_proc_entry(DRV_NAME, init_net.proc_net);
                ieee80211_proc = NULL;
                return -EIO;
        }
 #ifdef CONFIG_IEEE80211_DEBUG
        if (ieee80211_proc) {
                remove_proc_entry("debug_level", ieee80211_proc);
-               remove_proc_entry(DRV_NAME, proc_net);
+               remove_proc_entry(DRV_NAME, init_net.proc_net);
                ieee80211_proc = NULL;
        }
 #endif                         /* CONFIG_IEEE80211_DEBUG */
 
 #include <linux/sysctl.h>
 #endif
 
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/icmp.h>
 #include <net/route.h>
 
 static int __init arp_proc_init(void)
 {
-       if (!proc_net_fops_create("arp", S_IRUGO, &arp_seq_fops))
+       if (!proc_net_fops_create(&init_net, "arp", S_IRUGO, &arp_seq_fops))
                return -ENOMEM;
        return 0;
 }
 
 #include <linux/netlink.h>
 #include <linux/init.h>
 
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/protocol.h>
 #include <net/route.h>
 
 int __init fib_proc_init(void)
 {
-       if (!proc_net_fops_create("route", S_IRUGO, &fib_seq_fops))
+       if (!proc_net_fops_create(&init_net, "route", S_IRUGO, &fib_seq_fops))
                return -ENOMEM;
        return 0;
 }
 
 void __init fib_proc_exit(void)
 {
-       proc_net_remove("route");
+       proc_net_remove(&init_net, "route");
 }
 #endif /* CONFIG_PROC_FS */
 
 #include <linux/netlink.h>
 #include <linux/init.h>
 #include <linux/list.h>
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/protocol.h>
 #include <net/route.h>
 
 int __init fib_proc_init(void)
 {
-       if (!proc_net_fops_create("fib_trie", S_IRUGO, &fib_trie_fops))
+       if (!proc_net_fops_create(&init_net, "fib_trie", S_IRUGO, &fib_trie_fops))
                goto out1;
 
-       if (!proc_net_fops_create("fib_triestat", S_IRUGO, &fib_triestat_fops))
+       if (!proc_net_fops_create(&init_net, "fib_triestat", S_IRUGO, &fib_triestat_fops))
                goto out2;
 
-       if (!proc_net_fops_create("route", S_IRUGO, &fib_route_fops))
+       if (!proc_net_fops_create(&init_net, "route", S_IRUGO, &fib_route_fops))
                goto out3;
 
        return 0;
 
 out3:
-       proc_net_remove("fib_triestat");
+       proc_net_remove(&init_net, "fib_triestat");
 out2:
-       proc_net_remove("fib_trie");
+       proc_net_remove(&init_net, "fib_trie");
 out1:
        return -ENOMEM;
 }
 
 void __init fib_proc_exit(void)
 {
-       proc_net_remove("fib_trie");
-       proc_net_remove("fib_triestat");
-       proc_net_remove("route");
+       proc_net_remove(&init_net, "fib_trie");
+       proc_net_remove(&init_net, "fib_triestat");
+       proc_net_remove(&init_net, "route");
 }
 
 #endif /* CONFIG_PROC_FS */
 
 #include <linux/rtnetlink.h>
 #include <linux/times.h>
 
+#include <net/net_namespace.h>
 #include <net/arp.h>
 #include <net/ip.h>
 #include <net/protocol.h>
 
 int __init igmp_mc_proc_init(void)
 {
-       proc_net_fops_create("igmp", S_IRUGO, &igmp_mc_seq_fops);
-       proc_net_fops_create("mcfilter", S_IRUGO, &igmp_mcf_seq_fops);
+       proc_net_fops_create(&init_net, "igmp", S_IRUGO, &igmp_mc_seq_fops);
+       proc_net_fops_create(&init_net, "mcfilter", S_IRUGO, &igmp_mcf_seq_fops);
        return 0;
 }
 #endif
 
 #include <linux/root_dev.h>
 #include <linux/delay.h>
 #include <linux/nfs_fs.h>
+#include <net/net_namespace.h>
 #include <net/arp.h>
 #include <net/ip.h>
 #include <net/ipconfig.h>
        __be32 addr;
 
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("pnp", S_IRUGO, &pnp_seq_fops);
+       proc_net_fops_create(&init_net, "pnp", S_IRUGO, &pnp_seq_fops);
 #endif /* CONFIG_PROC_FS */
 
        if (!ic_enable)
 
 #include <linux/mroute.h>
 #include <linux/init.h>
 #include <linux/if_ether.h>
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/protocol.h>
 #include <linux/skbuff.h>
        ipmr_expire_timer.function=ipmr_expire_process;
        register_netdevice_notifier(&ip_mr_notifier);
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("ip_mr_vif", 0, &ipmr_vif_fops);
-       proc_net_fops_create("ip_mr_cache", 0, &ipmr_mfc_fops);
+       proc_net_fops_create(&init_net, "ip_mr_vif", 0, &ipmr_vif_fops);
+       proc_net_fops_create(&init_net, "ip_mr_cache", 0, &ipmr_mfc_fops);
 #endif
 }
 
 #include <linux/skbuff.h>
 #include <linux/in.h>
 #include <linux/ip.h>
+#include <net/net_namespace.h>
 #include <net/protocol.h>
 #include <net/tcp.h>
 #include <asm/system.h>
 int ip_vs_app_init(void)
 {
        /* we will replace it with proc_net_ipvs_create() soon */
-       proc_net_fops_create("ip_vs_app", 0, &ip_vs_app_fops);
+       proc_net_fops_create(&init_net, "ip_vs_app", 0, &ip_vs_app_fops);
        return 0;
 }
 
 
 void ip_vs_app_cleanup(void)
 {
-       proc_net_remove("ip_vs_app");
+       proc_net_remove(&init_net, "ip_vs_app");
 }
 
 #include <linux/jhash.h>
 #include <linux/random.h>
 
+#include <net/net_namespace.h>
 #include <net/ip_vs.h>
 
 
                rwlock_init(&__ip_vs_conntbl_lock_array[idx].l);
        }
 
-       proc_net_fops_create("ip_vs_conn", 0, &ip_vs_conn_fops);
+       proc_net_fops_create(&init_net, "ip_vs_conn", 0, &ip_vs_conn_fops);
 
        /* calculate the random value for connection hash */
        get_random_bytes(&ip_vs_conn_rnd, sizeof(ip_vs_conn_rnd));
 
        /* Release the empty cache */
        kmem_cache_destroy(ip_vs_conn_cachep);
-       proc_net_remove("ip_vs_conn");
+       proc_net_remove(&init_net, "ip_vs_conn");
        vfree(ip_vs_conn_tab);
 }
 
 #include <linux/netfilter_ipv4.h>
 #include <linux/mutex.h>
 
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/route.h>
 #include <net/sock.h>
                return ret;
        }
 
-       proc_net_fops_create("ip_vs", 0, &ip_vs_info_fops);
-       proc_net_fops_create("ip_vs_stats",0, &ip_vs_stats_fops);
+       proc_net_fops_create(&init_net, "ip_vs", 0, &ip_vs_info_fops);
+       proc_net_fops_create(&init_net, "ip_vs_stats",0, &ip_vs_stats_fops);
 
        sysctl_header = register_sysctl_table(vs_root_table);
 
        cancel_work_sync(&defense_work.work);
        ip_vs_kill_estimator(&ip_vs_stats);
        unregister_sysctl_table(sysctl_header);
-       proc_net_remove("ip_vs_stats");
-       proc_net_remove("ip_vs");
+       proc_net_remove(&init_net, "ip_vs_stats");
+       proc_net_remove(&init_net, "ip_vs");
        nf_unregister_sockopt(&ip_vs_sockopts);
        LeaveFunction(2);
 }
 
 #include <linux/sysctl.h>
 /* for proc_net_create/proc_net_remove */
 #include <linux/proc_fs.h>
+#include <net/net_namespace.h>
 
 #include <net/ip_vs.h>
 
        INIT_LIST_HEAD(&ip_vs_lblcr_scheduler.n_list);
        sysctl_header = register_sysctl_table(lblcr_root_table);
 #ifdef CONFIG_IP_VS_LBLCR_DEBUG
-       proc_net_create("ip_vs_lblcr", 0, ip_vs_lblcr_getinfo);
+       proc_net_create(&init_net, "ip_vs_lblcr", 0, ip_vs_lblcr_getinfo);
 #endif
        return register_ip_vs_scheduler(&ip_vs_lblcr_scheduler);
 }
 static void __exit ip_vs_lblcr_cleanup(void)
 {
 #ifdef CONFIG_IP_VS_LBLCR_DEBUG
-       proc_net_remove("ip_vs_lblcr");
+       proc_net_remove(&init_net, "ip_vs_lblcr");
 #endif
        unregister_sysctl_table(sysctl_header);
        unregister_ip_vs_scheduler(&ip_vs_lblcr_scheduler);
 
 #include <linux/proc_fs.h>
 #include <linux/security.h>
 #include <linux/mutex.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/route.h>
 
                goto cleanup_netlink_notifier;
        }
 
-       proc = proc_net_create(IPQ_PROC_FS_NAME, 0, ipq_get_info);
+       proc = proc_net_create(&init_net, IPQ_PROC_FS_NAME, 0, ipq_get_info);
        if (proc)
                proc->owner = THIS_MODULE;
        else {
 cleanup_sysctl:
        unregister_sysctl_table(ipq_sysctl_header);
        unregister_netdevice_notifier(&ipq_dev_notifier);
-       proc_net_remove(IPQ_PROC_FS_NAME);
-
+       proc_net_remove(&init_net, IPQ_PROC_FS_NAME);
 cleanup_ipqnl:
        sock_release(ipqnl->sk_socket);
        mutex_lock(&ipqnl_mutex);
 
        unregister_sysctl_table(ipq_sysctl_header);
        unregister_netdevice_notifier(&ipq_dev_notifier);
-       proc_net_remove(IPQ_PROC_FS_NAME);
+       proc_net_remove(&init_net, IPQ_PROC_FS_NAME);
 
        sock_release(ipqnl->sk_socket);
        mutex_lock(&ipqnl_mutex);
 
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ipt_CLUSTERIP.h>
 #include <net/netfilter/nf_conntrack.h>
+#include <net/net_namespace.h>
 #include <net/checksum.h>
 
 #define CLUSTERIP_VERSION "0.8"
                goto cleanup_target;
 
 #ifdef CONFIG_PROC_FS
-       clusterip_procdir = proc_mkdir("ipt_CLUSTERIP", proc_net);
+       clusterip_procdir = proc_mkdir("ipt_CLUSTERIP", init_net.proc_net);
        if (!clusterip_procdir) {
                printk(KERN_ERR "CLUSTERIP: Unable to proc dir entry\n");
                ret = -ENOMEM;
 
 #include <linux/bitops.h>
 #include <linux/skbuff.h>
 #include <linux/inet.h>
+#include <net/net_namespace.h>
 
 #include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_recent.h>
 #ifdef CONFIG_PROC_FS
        if (err)
                return err;
-       proc_dir = proc_mkdir("ipt_recent", proc_net);
+       proc_dir = proc_mkdir("ipt_recent", init_net.proc_net);
        if (proc_dir == NULL) {
                xt_unregister_match(&recent_match);
                err = -ENOMEM;
        BUG_ON(!list_empty(&tables));
        xt_unregister_match(&recent_match);
 #ifdef CONFIG_PROC_FS
-       remove_proc_entry("ipt_recent", proc_net);
+       remove_proc_entry("ipt_recent", init_net.proc_net);
 #endif
 }
 
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/percpu.h>
+#include <net/net_namespace.h>
 
 #include <linux/netfilter.h>
 #include <net/netfilter/nf_conntrack_core.h>
 {
        struct proc_dir_entry *proc, *proc_exp, *proc_stat;
 
-       proc = proc_net_fops_create("ip_conntrack", 0440, &ct_file_ops);
+       proc = proc_net_fops_create(&init_net, "ip_conntrack", 0440, &ct_file_ops);
        if (!proc)
                goto err1;
 
-       proc_exp = proc_net_fops_create("ip_conntrack_expect", 0440,
+       proc_exp = proc_net_fops_create(&init_net, "ip_conntrack_expect", 0440,
                                        &ip_exp_file_ops);
        if (!proc_exp)
                goto err2;
 
-       proc_stat = create_proc_entry("ip_conntrack", S_IRUGO, proc_net_stat);
+       proc_stat = create_proc_entry("ip_conntrack", S_IRUGO, init_net.proc_net_stat);
        if (!proc_stat)
                goto err3;
 
        return 0;
 
 err3:
-       proc_net_remove("ip_conntrack_expect");
+       proc_net_remove(&init_net, "ip_conntrack_expect");
 err2:
-       proc_net_remove("ip_conntrack");
+       proc_net_remove(&init_net, "ip_conntrack");
 err1:
        return -ENOMEM;
 }
 
 void __exit nf_conntrack_ipv4_compat_fini(void)
 {
-       remove_proc_entry("ip_conntrack", proc_net_stat);
-       proc_net_remove("ip_conntrack_expect");
-       proc_net_remove("ip_conntrack");
+       remove_proc_entry("ip_conntrack", init_net.proc_net_stat);
+       proc_net_remove(&init_net, "ip_conntrack_expect");
+       proc_net_remove(&init_net, "ip_conntrack");
 }
 
  *             2 of the License, or (at your option) any later version.
  */
 #include <linux/types.h>
+#include <net/net_namespace.h>
 #include <net/icmp.h>
 #include <net/protocol.h>
 #include <net/tcp.h>
 {
        int rc = 0;
 
-       if (!proc_net_fops_create("netstat", S_IRUGO, &netstat_seq_fops))
+       if (!proc_net_fops_create(&init_net, "netstat", S_IRUGO, &netstat_seq_fops))
                goto out_netstat;
 
-       if (!proc_net_fops_create("snmp", S_IRUGO, &snmp_seq_fops))
+       if (!proc_net_fops_create(&init_net, "snmp", S_IRUGO, &snmp_seq_fops))
                goto out_snmp;
 
-       if (!proc_net_fops_create("sockstat", S_IRUGO, &sockstat_seq_fops))
+       if (!proc_net_fops_create(&init_net, "sockstat", S_IRUGO, &sockstat_seq_fops))
                goto out_sockstat;
 out:
        return rc;
 out_sockstat:
-       proc_net_remove("snmp");
+       proc_net_remove(&init_net, "snmp");
 out_snmp:
-       proc_net_remove("netstat");
+       proc_net_remove(&init_net, "netstat");
 out_netstat:
        rc = -ENOMEM;
        goto out;
 
 #include <linux/in_route.h>
 #include <linux/route.h>
 #include <linux/skbuff.h>
+#include <net/net_namespace.h>
 #include <net/dst.h>
 #include <net/sock.h>
 #include <linux/gfp.h>
 
 int __init raw_proc_init(void)
 {
-       if (!proc_net_fops_create("raw", S_IRUGO, &raw_seq_fops))
+       if (!proc_net_fops_create(&init_net, "raw", S_IRUGO, &raw_seq_fops))
                return -ENOMEM;
        return 0;
 }
 
 void __init raw_proc_exit(void)
 {
-       proc_net_remove("raw");
+       proc_net_remove(&init_net, "raw");
 }
 #endif /* CONFIG_PROC_FS */
 
 #include <linux/jhash.h>
 #include <linux/rcupdate.h>
 #include <linux/times.h>
+#include <net/net_namespace.h>
 #include <net/protocol.h>
 #include <net/ip.h>
 #include <net/route.h>
 #ifdef CONFIG_PROC_FS
        {
        struct proc_dir_entry *rtstat_pde = NULL; /* keep gcc happy */
-       if (!proc_net_fops_create("rt_cache", S_IRUGO, &rt_cache_seq_fops) ||
+       if (!proc_net_fops_create(&init_net, "rt_cache", S_IRUGO, &rt_cache_seq_fops) ||
            !(rtstat_pde = create_proc_entry("rt_cache", S_IRUGO,
-                                            proc_net_stat))) {
+                                            init_net.proc_net_stat))) {
                return -ENOMEM;
        }
        rtstat_pde->proc_fops = &rt_cpu_seq_fops;
        }
 #ifdef CONFIG_NET_CLS_ROUTE
-       create_proc_read_entry("rt_acct", 0, proc_net, ip_rt_acct_read, NULL);
+       create_proc_read_entry("rt_acct", 0, init_net.proc_net, ip_rt_acct_read, NULL);
 #endif
 #endif
 #ifdef CONFIG_XFRM
 
 #include <linux/init.h>
 #include <linux/times.h>
 
+#include <net/net_namespace.h>
 #include <net/icmp.h>
 #include <net/inet_hashtables.h>
 #include <net/tcp.h>
        afinfo->seq_fops->llseek        = seq_lseek;
        afinfo->seq_fops->release       = seq_release_private;
 
-       p = proc_net_fops_create(afinfo->name, S_IRUGO, afinfo->seq_fops);
+       p = proc_net_fops_create(&init_net, afinfo->name, S_IRUGO, afinfo->seq_fops);
        if (p)
                p->data = afinfo;
        else
 {
        if (!afinfo)
                return;
-       proc_net_remove(afinfo->name);
+       proc_net_remove(&init_net, afinfo->name);
        memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops));
 }
 
 
 #include <linux/module.h>
 #include <linux/ktime.h>
 #include <linux/time.h>
+#include <net/net_namespace.h>
 
 #include <net/tcp.h>
 
        if (!tcp_probe.log)
                goto err0;
 
-       if (!proc_net_fops_create(procname, S_IRUSR, &tcpprobe_fops))
+       if (!proc_net_fops_create(&init_net, procname, S_IRUSR, &tcpprobe_fops))
                goto err0;
 
        ret = register_jprobe(&tcp_jprobe);
        pr_info("TCP probe registered (port=%d)\n", port);
        return 0;
  err1:
-       proc_net_remove(procname);
+       proc_net_remove(&init_net, procname);
  err0:
        kfree(tcp_probe.log);
        return ret;
 
 static __exit void tcpprobe_exit(void)
 {
-       proc_net_remove(procname);
+       proc_net_remove(&init_net, procname);
        unregister_jprobe(&tcp_jprobe);
        kfree(tcp_probe.log);
 }
 
 #include <linux/skbuff.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 #include <net/icmp.h>
 #include <net/route.h>
 #include <net/checksum.h>
        afinfo->seq_fops->llseek        = seq_lseek;
        afinfo->seq_fops->release       = seq_release_private;
 
-       p = proc_net_fops_create(afinfo->name, S_IRUGO, afinfo->seq_fops);
+       p = proc_net_fops_create(&init_net, afinfo->name, S_IRUGO, afinfo->seq_fops);
        if (p)
                p->data = afinfo;
        else
 {
        if (!afinfo)
                return;
-       proc_net_remove(afinfo->name);
+       proc_net_remove(&init_net, afinfo->name);
        memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops));
 }
 
 
 #include <linux/notifier.h>
 #include <linux/string.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/snmp.h>
 
 
 int __init if6_proc_init(void)
 {
-       if (!proc_net_fops_create("if_inet6", S_IRUGO, &if6_fops))
+       if (!proc_net_fops_create(&init_net, "if_inet6", S_IRUGO, &if6_fops))
                return -ENOMEM;
        return 0;
 }
 
 void if6_proc_exit(void)
 {
-       proc_net_remove("if_inet6");
+       proc_net_remove(&init_net, "if_inet6");
 }
 #endif /* CONFIG_PROC_FS */
 
        rtnl_unlock();
 
 #ifdef CONFIG_PROC_FS
-       proc_net_remove("if_inet6");
+       proc_net_remove(&init_net, "if_inet6");
 #endif
 }
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/snmp.h>
 
 
 int __init ac6_proc_init(void)
 {
-       if (!proc_net_fops_create("anycast6", S_IRUGO, &ac6_seq_fops))
+       if (!proc_net_fops_create(&init_net, "anycast6", S_IRUGO, &ac6_seq_fops))
                return -ENOMEM;
 
        return 0;
 
 void ac6_proc_exit(void)
 {
-       proc_net_remove("anycast6");
+       proc_net_remove(&init_net, "anycast6");
 }
 #endif
 
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 
 #include <net/ipv6.h>
 void ip6_flowlabel_init(void)
 {
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("ip6_flowlabel", S_IRUGO, &ip6fl_seq_fops);
+       proc_net_fops_create(&init_net, "ip6_flowlabel", S_IRUGO, &ip6fl_seq_fops);
 #endif
 }
 
 {
        del_timer(&ip6_fl_gc_timer);
 #ifdef CONFIG_PROC_FS
-       proc_net_remove("ip6_flowlabel");
+       proc_net_remove(&init_net, "ip6_flowlabel");
 #endif
 }
 
 #include <linux/netfilter.h>
 #include <linux/netfilter_ipv6.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/snmp.h>
 
        np->hop_limit = 1;
 
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("igmp6", S_IRUGO, &igmp6_mc_seq_fops);
-       proc_net_fops_create("mcfilter6", S_IRUGO, &igmp6_mcf_seq_fops);
+       proc_net_fops_create(&init_net, "igmp6", S_IRUGO, &igmp6_mc_seq_fops);
+       proc_net_fops_create(&init_net, "mcfilter6", S_IRUGO, &igmp6_mcf_seq_fops);
 #endif
 
        return 0;
        igmp6_socket = NULL; /* for safety */
 
 #ifdef CONFIG_PROC_FS
-       proc_net_remove("mcfilter6");
-       proc_net_remove("igmp6");
+       proc_net_remove(&init_net, "mcfilter6");
+       proc_net_remove(&init_net, "igmp6");
 #endif
 }
 
 #include <linux/sysctl.h>
 #include <linux/proc_fs.h>
 #include <linux/mutex.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/ipv6.h>
 #include <net/ip6_route.h>
                goto cleanup_netlink_notifier;
        }
 
-       proc = proc_net_create(IPQ_PROC_FS_NAME, 0, ipq_get_info);
+       proc = proc_net_create(&init_net, IPQ_PROC_FS_NAME, 0, ipq_get_info);
        if (proc)
                proc->owner = THIS_MODULE;
        else {
 cleanup_sysctl:
        unregister_sysctl_table(ipq_sysctl_header);
        unregister_netdevice_notifier(&ipq_dev_notifier);
-       proc_net_remove(IPQ_PROC_FS_NAME);
+       proc_net_remove(&init_net, IPQ_PROC_FS_NAME);
 
 cleanup_ipqnl:
        sock_release(ipqnl->sk_socket);
 
        unregister_sysctl_table(ipq_sysctl_header);
        unregister_netdevice_notifier(&ipq_dev_notifier);
-       proc_net_remove(IPQ_PROC_FS_NAME);
+       proc_net_remove(&init_net, IPQ_PROC_FS_NAME);
 
        sock_release(ipqnl->sk_socket);
        mutex_lock(&ipqnl_mutex);
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/stddef.h>
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/sock.h>
 #include <net/tcp.h>
 {
        int rc = 0;
 
-       if (!proc_net_fops_create("snmp6", S_IRUGO, &snmp6_seq_fops))
+       if (!proc_net_fops_create(&init_net, "snmp6", S_IRUGO, &snmp6_seq_fops))
                goto proc_snmp6_fail;
 
-       proc_net_devsnmp6 = proc_mkdir("dev_snmp6", proc_net);
+       proc_net_devsnmp6 = proc_mkdir("dev_snmp6", init_net.proc_net);
        if (!proc_net_devsnmp6)
                goto proc_dev_snmp6_fail;
 
-       if (!proc_net_fops_create("sockstat6", S_IRUGO, &sockstat6_seq_fops))
+       if (!proc_net_fops_create(&init_net, "sockstat6", S_IRUGO, &sockstat6_seq_fops))
                goto proc_sockstat6_fail;
 out:
        return rc;
 
 proc_sockstat6_fail:
-       proc_net_remove("dev_snmp6");
+       proc_net_remove(&init_net, "dev_snmp6");
 proc_dev_snmp6_fail:
-       proc_net_remove("snmp6");
+       proc_net_remove(&init_net, "snmp6");
 proc_snmp6_fail:
        rc = -ENOMEM;
        goto out;
 
 void ipv6_misc_proc_exit(void)
 {
-       proc_net_remove("sockstat6");
-       proc_net_remove("dev_snmp6");
-       proc_net_remove("snmp6");
+       proc_net_remove(&init_net, "sockstat6");
+       proc_net_remove(&init_net, "dev_snmp6");
+       proc_net_remove(&init_net, "snmp6");
 }
 
 
 #include <asm/uaccess.h>
 #include <asm/ioctls.h>
 
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/sock.h>
 #include <net/snmp.h>
 
 int __init raw6_proc_init(void)
 {
-       if (!proc_net_fops_create("raw6", S_IRUGO, &raw6_seq_fops))
+       if (!proc_net_fops_create(&init_net, "raw6", S_IRUGO, &raw6_seq_fops))
                return -ENOMEM;
        return 0;
 }
 
 void raw6_proc_exit(void)
 {
-       proc_net_remove("raw6");
+       proc_net_remove(&init_net, "raw6");
 }
 #endif /* CONFIG_PROC_FS */
 
 #include <linux/seq_file.h>
 #endif
 
+#include <net/net_namespace.h>
 #include <net/snmp.h>
 #include <net/ipv6.h>
 #include <net/ip6_fib.h>
 
        fib6_init();
 #ifdef         CONFIG_PROC_FS
-       p = proc_net_create("ipv6_route", 0, rt6_proc_info);
+       p = proc_net_create(&init_net, "ipv6_route", 0, rt6_proc_info);
        if (p)
                p->owner = THIS_MODULE;
 
-       proc_net_fops_create("rt6_stats", S_IRUGO, &rt6_stats_seq_fops);
+       proc_net_fops_create(&init_net, "rt6_stats", S_IRUGO, &rt6_stats_seq_fops);
 #endif
 #ifdef CONFIG_XFRM
        xfrm6_init();
        fib6_rules_cleanup();
 #endif
 #ifdef CONFIG_PROC_FS
-       proc_net_remove("ipv6_route");
-       proc_net_remove("rt6_stats");
+       proc_net_remove(&init_net, "ipv6_route");
+       proc_net_remove(&init_net, "rt6_stats");
 #endif
 #ifdef CONFIG_XFRM
        xfrm6_fini();
 
 #include <linux/proc_fs.h>
 #include <linux/spinlock.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 #include <net/tcp_states.h>
 #include <net/ipx.h>
 
        struct proc_dir_entry *p;
        int rc = -ENOMEM;
 
-       ipx_proc_dir = proc_mkdir("ipx", proc_net);
+       ipx_proc_dir = proc_mkdir("ipx", init_net.proc_net);
 
        if (!ipx_proc_dir)
                goto out;
 out_route:
        remove_proc_entry("interface", ipx_proc_dir);
 out_interface:
-       remove_proc_entry("ipx", proc_net);
+       remove_proc_entry("ipx", init_net.proc_net);
        goto out;
 }
 
        remove_proc_entry("interface", ipx_proc_dir);
        remove_proc_entry("route", ipx_proc_dir);
        remove_proc_entry("socket", ipx_proc_dir);
-       remove_proc_entry("ipx", proc_net);
+       remove_proc_entry("ipx", init_net.proc_net);
 }
 
 #else /* CONFIG_PROC_FS */
 
 #include <linux/seq_file.h>
 #include <linux/module.h>
 #include <linux/init.h>
+#include <net/net_namespace.h>
 
 #include <net/irda/irda.h>
 #include <net/irda/irlap.h>
        int i;
        struct proc_dir_entry *d;
 
-       proc_irda = proc_mkdir("irda", proc_net);
+       proc_irda = proc_mkdir("irda", init_net.proc_net);
        if (proc_irda == NULL)
                return;
        proc_irda->owner = THIS_MODULE;
                for (i=0; i<ARRAY_SIZE(irda_dirs); i++)
                        remove_proc_entry(irda_dirs[i].name, proc_irda);
 
-               remove_proc_entry("irda", proc_net);
+               remove_proc_entry("irda", init_net.proc_net);
                proc_irda = NULL;
        }
 }
 
 #include <linux/in6.h>
 #include <linux/proc_fs.h>
 #include <linux/init.h>
+#include <net/net_namespace.h>
 #include <net/xfrm.h>
 
 #include <net/sock.h>
 static void __exit ipsec_pfkey_exit(void)
 {
        xfrm_unregister_km(&pfkeyv2_mgr);
-       remove_proc_entry("net/pfkey", NULL);
+       remove_proc_entry("pfkey", init_net.proc_net);
        sock_unregister(PF_KEY);
        proto_unregister(&key_proto);
 }
                goto out_unregister_key_proto;
 #ifdef CONFIG_PROC_FS
        err = -ENOMEM;
-       if (create_proc_read_entry("net/pfkey", 0, NULL, pfkey_read_proc, NULL) == NULL)
+       if (create_proc_read_entry("pfkey", 0, init_net.proc_net, pfkey_read_proc, NULL) == NULL)
                goto out_sock_unregister;
 #endif
        err = xfrm_register_km(&pfkeyv2_mgr);
 
 #include <linux/proc_fs.h>
 #include <linux/errno.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/llc.h>
 #include <net/llc_c_ac.h>
        int rc = -ENOMEM;
        struct proc_dir_entry *p;
 
-       llc_proc_dir = proc_mkdir("llc", proc_net);
+       llc_proc_dir = proc_mkdir("llc", init_net.proc_net);
        if (!llc_proc_dir)
                goto out;
        llc_proc_dir->owner = THIS_MODULE;
 out_core:
        remove_proc_entry("socket", llc_proc_dir);
 out_socket:
-       remove_proc_entry("llc", proc_net);
+       remove_proc_entry("llc", init_net.proc_net);
        goto out;
 }
 
 {
        remove_proc_entry("socket", llc_proc_dir);
        remove_proc_entry("core", llc_proc_dir);
-       remove_proc_entry("llc", proc_net);
+       remove_proc_entry("llc", init_net.proc_net);
 }
 
 #include <linux/inetdevice.h>
 #include <linux/proc_fs.h>
 #include <linux/mutex.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 
 #include "nf_internals.h"
        }
 
 #ifdef CONFIG_PROC_FS
-       proc_net_netfilter = proc_mkdir("netfilter", proc_net);
+       proc_net_netfilter = proc_mkdir("netfilter", init_net.proc_net);
        if (!proc_net_netfilter)
                panic("cannot create netfilter proc entry");
 #endif
 
 #include <linux/percpu.h>
 #include <linux/kernel.h>
 #include <linux/jhash.h>
+#include <net/net_namespace.h>
 
 #include <net/netfilter/nf_conntrack.h>
 #include <net/netfilter/nf_conntrack_core.h>
 #ifdef CONFIG_PROC_FS
        struct proc_dir_entry *proc;
 
-       proc = proc_net_fops_create("nf_conntrack_expect", 0440, &exp_file_ops);
+       proc = proc_net_fops_create(&init_net, "nf_conntrack_expect", 0440, &exp_file_ops);
        if (!proc)
                return -ENOMEM;
 #endif /* CONFIG_PROC_FS */
 static void exp_proc_remove(void)
 {
 #ifdef CONFIG_PROC_FS
-       proc_net_remove("nf_conntrack_expect");
+       proc_net_remove(&init_net, "nf_conntrack_expect");
 #endif /* CONFIG_PROC_FS */
 }
 
 
 #include <linux/seq_file.h>
 #include <linux/percpu.h>
 #include <linux/netdevice.h>
+#include <net/net_namespace.h>
 #ifdef CONFIG_SYSCTL
 #include <linux/sysctl.h>
 #endif
                return ret;
 
 #ifdef CONFIG_PROC_FS
-       proc = proc_net_fops_create("nf_conntrack", 0440, &ct_file_ops);
+       proc = proc_net_fops_create(&init_net, "nf_conntrack", 0440, &ct_file_ops);
        if (!proc) goto cleanup_init;
 
-       proc_stat = create_proc_entry("nf_conntrack", S_IRUGO, proc_net_stat);
+       proc_stat = create_proc_entry("nf_conntrack", S_IRUGO, init_net.proc_net_stat);
        if (!proc_stat)
                goto cleanup_proc;
 
  cleanup_proc_stat:
 #endif
 #ifdef CONFIG_PROC_FS
-       remove_proc_entry("nf_conntrack", proc_net_stat);
+       remove_proc_entry("nf_conntrack", init_net. proc_net_stat);
  cleanup_proc:
-       proc_net_remove("nf_conntrack");
+       proc_net_remove(&init_net, "nf_conntrack");
  cleanup_init:
 #endif /* CNFIG_PROC_FS */
        nf_conntrack_cleanup();
        unregister_sysctl_table(nf_ct_sysctl_header);
 #endif
 #ifdef CONFIG_PROC_FS
-       remove_proc_entry("nf_conntrack", proc_net_stat);
-       proc_net_remove("nf_conntrack");
+       remove_proc_entry("nf_conntrack", init_net.proc_net_stat);
+       proc_net_remove(&init_net, "nf_conntrack");
 #endif /* CNFIG_PROC_FS */
        nf_conntrack_cleanup();
 }
 
 #include <linux/vmalloc.h>
 #include <linux/mutex.h>
 #include <linux/mm.h>
+#include <net/net_namespace.h>
 
 #include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_arp.h>
 #ifdef CONFIG_PROC_FS
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_TABLES, sizeof(buf));
-       proc = proc_net_fops_create(buf, 0440, &xt_file_ops);
+       proc = proc_net_fops_create(&init_net, buf, 0440, &xt_file_ops);
        if (!proc)
                goto out;
        proc->data = (void *) ((unsigned long) af | (TABLE << 16));
 
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_MATCHES, sizeof(buf));
-       proc = proc_net_fops_create(buf, 0440, &xt_file_ops);
+       proc = proc_net_fops_create(&init_net, buf, 0440, &xt_file_ops);
        if (!proc)
                goto out_remove_tables;
        proc->data = (void *) ((unsigned long) af | (MATCH << 16));
 
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_TARGETS, sizeof(buf));
-       proc = proc_net_fops_create(buf, 0440, &xt_file_ops);
+       proc = proc_net_fops_create(&init_net, buf, 0440, &xt_file_ops);
        if (!proc)
                goto out_remove_matches;
        proc->data = (void *) ((unsigned long) af | (TARGET << 16));
 out_remove_matches:
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_MATCHES, sizeof(buf));
-       proc_net_remove(buf);
+       proc_net_remove(&init_net, buf);
 
 out_remove_tables:
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_TABLES, sizeof(buf));
-       proc_net_remove(buf);
+       proc_net_remove(&init_net, buf);
 out:
        return -1;
 #endif
 
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_TABLES, sizeof(buf));
-       proc_net_remove(buf);
+       proc_net_remove(&init_net, buf);
 
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_TARGETS, sizeof(buf));
-       proc_net_remove(buf);
+       proc_net_remove(&init_net, buf);
 
        strlcpy(buf, xt_prefix[af], sizeof(buf));
        strlcat(buf, FORMAT_MATCHES, sizeof(buf));
-       proc_net_remove(buf);
+       proc_net_remove(&init_net, buf);
 #endif /*CONFIG_PROC_FS*/
 }
 EXPORT_SYMBOL_GPL(xt_proto_fini);
 
 #include <linux/in.h>
 #include <linux/ip.h>
 #include <linux/ipv6.h>
+#include <net/net_namespace.h>
 
 #include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
                printk(KERN_ERR "xt_hashlimit: unable to create slab cache\n");
                goto err2;
        }
-       hashlimit_procdir4 = proc_mkdir("ipt_hashlimit", proc_net);
+       hashlimit_procdir4 = proc_mkdir("ipt_hashlimit", init_net.proc_net);
        if (!hashlimit_procdir4) {
                printk(KERN_ERR "xt_hashlimit: unable to create proc dir "
                                "entry\n");
                goto err3;
        }
-       hashlimit_procdir6 = proc_mkdir("ip6t_hashlimit", proc_net);
+       hashlimit_procdir6 = proc_mkdir("ip6t_hashlimit", init_net.proc_net);
        if (!hashlimit_procdir6) {
                printk(KERN_ERR "xt_hashlimit: unable to create proc dir "
                                "entry\n");
        }
        return 0;
 err4:
-       remove_proc_entry("ipt_hashlimit", proc_net);
+       remove_proc_entry("ipt_hashlimit", init_net.proc_net);
 err3:
        kmem_cache_destroy(hashlimit_cachep);
 err2:
 
 static void __exit xt_hashlimit_fini(void)
 {
-       remove_proc_entry("ipt_hashlimit", proc_net);
-       remove_proc_entry("ip6t_hashlimit", proc_net);
+       remove_proc_entry("ipt_hashlimit", init_net.proc_net);
+       remove_proc_entry("ip6t_hashlimit", init_net.proc_net);
        kmem_cache_destroy(hashlimit_cachep);
        xt_unregister_matches(xt_hashlimit, ARRAY_SIZE(xt_hashlimit));
 }
 
 #include <linux/selinux.h>
 #include <linux/mutex.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/scm.h>
 #include <net/netlink.h>
 
        sock_register(&netlink_family_ops);
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("netlink", 0, &netlink_seq_fops);
+       proc_net_fops_create(&init_net, "netlink", 0, &netlink_seq_fops);
 #endif
        /* The netlink device handler may be needed early. */
        rtnetlink_init();
 
 #include <linux/netdevice.h>
 #include <linux/if_arp.h>
 #include <linux/skbuff.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <asm/uaccess.h>
 #include <asm/system.h>
 
        nr_loopback_init();
 
-       proc_net_fops_create("nr", S_IRUGO, &nr_info_fops);
-       proc_net_fops_create("nr_neigh", S_IRUGO, &nr_neigh_fops);
-       proc_net_fops_create("nr_nodes", S_IRUGO, &nr_nodes_fops);
+       proc_net_fops_create(&init_net, "nr", S_IRUGO, &nr_info_fops);
+       proc_net_fops_create(&init_net, "nr_neigh", S_IRUGO, &nr_neigh_fops);
+       proc_net_fops_create(&init_net, "nr_nodes", S_IRUGO, &nr_nodes_fops);
 out:
        return rc;
 fail:
 {
        int i;
 
-       proc_net_remove("nr");
-       proc_net_remove("nr_neigh");
-       proc_net_remove("nr_nodes");
+       proc_net_remove(&init_net, "nr");
+       proc_net_remove(&init_net, "nr_neigh");
+       proc_net_remove(&init_net, "nr_nodes");
        nr_loopback_clear();
 
        nr_rt_free();
 
 #include <linux/wireless.h>
 #include <linux/kernel.h>
 #include <linux/kmod.h>
+#include <net/net_namespace.h>
 #include <net/ip.h>
 #include <net/protocol.h>
 #include <linux/skbuff.h>
 
 static void __exit packet_exit(void)
 {
-       proc_net_remove("packet");
+       proc_net_remove(&init_net, "packet");
        unregister_netdevice_notifier(&packet_netdev_notifier);
        sock_unregister(PF_PACKET);
        proto_unregister(&packet_proto);
 
        sock_register(&packet_family_ops);
        register_netdevice_notifier(&packet_netdev_notifier);
-       proc_net_fops_create("packet", 0, &packet_seq_fops);
+       proc_net_fops_create(&init_net, "packet", 0, &packet_seq_fops);
 out:
        return rc;
 }
 
 #include <linux/sockios.h>
 #include <linux/net.h>
 #include <linux/stat.h>
+#include <net/net_namespace.h>
 #include <net/ax25.h>
 #include <linux/inet.h>
 #include <linux/netdevice.h>
 
        rose_add_loopback_neigh();
 
-       proc_net_fops_create("rose", S_IRUGO, &rose_info_fops);
-       proc_net_fops_create("rose_neigh", S_IRUGO, &rose_neigh_fops);
-       proc_net_fops_create("rose_nodes", S_IRUGO, &rose_nodes_fops);
-       proc_net_fops_create("rose_routes", S_IRUGO, &rose_routes_fops);
+       proc_net_fops_create(&init_net, "rose", S_IRUGO, &rose_info_fops);
+       proc_net_fops_create(&init_net, "rose_neigh", S_IRUGO, &rose_neigh_fops);
+       proc_net_fops_create(&init_net, "rose_nodes", S_IRUGO, &rose_nodes_fops);
+       proc_net_fops_create(&init_net, "rose_routes", S_IRUGO, &rose_routes_fops);
 out:
        return rc;
 fail:
 {
        int i;
 
-       proc_net_remove("rose");
-       proc_net_remove("rose_neigh");
-       proc_net_remove("rose_nodes");
-       proc_net_remove("rose_routes");
+       proc_net_remove(&init_net, "rose");
+       proc_net_remove(&init_net, "rose_neigh");
+       proc_net_remove(&init_net, "rose_nodes");
+       proc_net_remove(&init_net, "rose_routes");
        rose_loopback_clear();
 
        rose_rt_free();
 
 #include <linux/skbuff.h>
 #include <linux/poll.h>
 #include <linux/proc_fs.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/af_rxrpc.h>
 #include "ar-internal.h"
        }
 
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("rxrpc_calls", 0, &rxrpc_call_seq_fops);
-       proc_net_fops_create("rxrpc_conns", 0, &rxrpc_connection_seq_fops);
+       proc_net_fops_create(&init_net, "rxrpc_calls", 0, &rxrpc_call_seq_fops);
+       proc_net_fops_create(&init_net, "rxrpc_conns", 0, &rxrpc_connection_seq_fops);
 #endif
        return 0;
 
 
        _debug("flush scheduled work");
        flush_workqueue(rxrpc_workqueue);
-       proc_net_remove("rxrpc_conns");
-       proc_net_remove("rxrpc_calls");
+       proc_net_remove(&init_net, "rxrpc_conns");
+       proc_net_remove(&init_net, "rxrpc_calls");
        destroy_workqueue(rxrpc_workqueue);
        kmem_cache_destroy(rxrpc_call_jar);
        _leave("");
 
 #include <linux/list.h>
 #include <linux/hrtimer.h>
 
+#include <net/net_namespace.h>
 #include <net/netlink.h>
 #include <net/pkt_sched.h>
 
 {
        register_qdisc(&pfifo_qdisc_ops);
        register_qdisc(&bfifo_qdisc_ops);
-       proc_net_fops_create("psched", 0, &psched_fops);
+       proc_net_fops_create(&init_net, "psched", 0, &psched_fops);
 
        rtnl_register(PF_UNSPEC, RTM_NEWQDISC, tc_modify_qdisc, NULL);
        rtnl_register(PF_UNSPEC, RTM_DELQDISC, tc_get_qdisc, NULL);
 
 #include <linux/inetdevice.h>
 #include <linux/seq_file.h>
 #include <linux/bootmem.h>
+#include <net/net_namespace.h>
 #include <net/protocol.h>
 #include <net/ip.h>
 #include <net/ipv6.h>
 {
        if (!proc_net_sctp) {
                struct proc_dir_entry *ent;
-               ent = proc_mkdir("net/sctp", NULL);
+               ent = proc_mkdir("sctp", init_net.proc_net);
                if (ent) {
                        ent->owner = THIS_MODULE;
                        proc_net_sctp = ent;
 
        if (proc_net_sctp) {
                proc_net_sctp = NULL;
-               remove_proc_entry("net/sctp", NULL);
+               remove_proc_entry("sctp", init_net.proc_net);
        }
 }
 
 
 #include <linux/sunrpc/clnt.h>
 #include <linux/sunrpc/svcsock.h>
 #include <linux/sunrpc/metrics.h>
+#include <net/net_namespace.h>
 
 #define RPCDBG_FACILITY        RPCDBG_MISC
 
        dprintk("RPC:       registering /proc/net/rpc\n");
        if (!proc_net_rpc) {
                struct proc_dir_entry *ent;
-               ent = proc_mkdir("rpc", proc_net);
+               ent = proc_mkdir("rpc", init_net.proc_net);
                if (ent) {
                        ent->owner = THIS_MODULE;
                        proc_net_rpc = ent;
        dprintk("RPC:       unregistering /proc/net/rpc\n");
        if (proc_net_rpc) {
                proc_net_rpc = NULL;
-               remove_proc_entry("net/rpc", NULL);
+               remove_proc_entry("rpc", init_net.proc_net);
        }
 }
 
 
 #include <asm/uaccess.h>
 #include <linux/skbuff.h>
 #include <linux/netdevice.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/tcp_states.h>
 #include <net/af_unix.h>
 
        sock_register(&unix_family_ops);
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("unix", 0, &unix_seq_fops);
+       proc_net_fops_create(&init_net, "unix", 0, &unix_seq_fops);
 #endif
        unix_sysctl_register();
 out:
 {
        sock_unregister(PF_UNIX);
        unix_sysctl_unregister();
-       proc_net_remove("unix");
+       proc_net_remove(&init_net, "unix");
        proto_unregister(&unix_proto);
 }
 
 
 #include <linux/seq_file.h>
 #include <linux/smp_lock.h>
 
+#include <net/net_namespace.h>
 #include <asm/io.h>
 
 #define PROC_STATS_FORMAT "%30s: %12lu\n"
 int __init wanrouter_proc_init(void)
 {
        struct proc_dir_entry *p;
-       proc_router = proc_mkdir(ROUTER_NAME, proc_net);
+       proc_router = proc_mkdir(ROUTER_NAME, init_net.proc_net);
        if (!proc_router)
                goto fail;
 
 fail_stat:
        remove_proc_entry("config", proc_router);
 fail_config:
-       remove_proc_entry(ROUTER_NAME, proc_net);
+       remove_proc_entry(ROUTER_NAME, init_net.proc_net);
 fail:
        return -ENOMEM;
 }
 {
        remove_proc_entry("config", proc_router);
        remove_proc_entry("status", proc_router);
-       remove_proc_entry(ROUTER_NAME, proc_net);
+       remove_proc_entry(ROUTER_NAME, init_net.proc_net);
 }
 
 /*
 
 #include <linux/if_arp.h>              /* ARPHRD_ETHER */
 #include <linux/etherdevice.h>         /* compare_ether_addr */
 #include <linux/interrupt.h>
+#include <net/net_namespace.h>
 
 #include <linux/wireless.h>            /* Pretty obvious */
 #include <net/iw_handler.h>            /* New driver API */
 int __init wext_proc_init(void)
 {
        /* Create /proc/net/wireless entry */
-       if (!proc_net_fops_create("wireless", S_IRUGO, &wireless_seq_fops))
+       if (!proc_net_fops_create(&init_net, "wireless", S_IRUGO, &wireless_seq_fops))
                return -ENOMEM;
 
        return 0;
 
 #include <linux/init.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/x25.h>
 
        struct proc_dir_entry *p;
        int rc = -ENOMEM;
 
-       x25_proc_dir = proc_mkdir("x25", proc_net);
+       x25_proc_dir = proc_mkdir("x25", init_net.proc_net);
        if (!x25_proc_dir)
                goto out;
 
 out_socket:
        remove_proc_entry("route", x25_proc_dir);
 out_route:
-       remove_proc_entry("x25", proc_net);
+       remove_proc_entry("x25", init_net.proc_net);
        goto out;
 }
 
        remove_proc_entry("forward", x25_proc_dir);
        remove_proc_entry("route", x25_proc_dir);
        remove_proc_entry("socket", x25_proc_dir);
-       remove_proc_entry("x25", proc_net);
+       remove_proc_entry("x25", init_net.proc_net);
 }
 
 #else /* CONFIG_PROC_FS */