* Nadia Yvette Chambers, 2002
  *
  * Copyright (C) 2002 Linus Torvalds.
+ * License: GPL
  */
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
-#include <linux/module.h>
 #include <linux/thread_info.h>
 #include <asm/current.h>
 #include <linux/sched.h>               /* remove ASAP */
        .mount          = hugetlbfs_mount,
        .kill_sb        = kill_litter_super,
 };
-MODULE_ALIAS_FS("hugetlbfs");
 
 static struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE];
 
  out2:
        return error;
 }
-
-static void __exit exit_hugetlbfs_fs(void)
-{
-       struct hstate *h;
-       int i;
-
-
-       /*
-        * Make sure all delayed rcu free inodes are flushed before we
-        * destroy cache.
-        */
-       rcu_barrier();
-       kmem_cache_destroy(hugetlbfs_inode_cachep);
-       i = 0;
-       for_each_hstate(h)
-               kern_unmount(hugetlbfs_vfsmount[i++]);
-       unregister_filesystem(&hugetlbfs_fs_type);
-}
-
-module_init(init_hugetlbfs_fs)
-module_exit(exit_hugetlbfs_fs)
-
-MODULE_LICENSE("GPL");
+fs_initcall(init_hugetlbfs_fs)
 
  */
 #include <linux/list.h>
 #include <linux/init.h>
-#include <linux/module.h>
 #include <linux/mm.h>
 #include <linux/seq_file.h>
 #include <linux/sysctl.h>
        nhs->hugepages_kobj = NULL;
 }
 
-/*
- * hugetlb module exit:  unregister hstate attributes from node devices
- * that have them.
- */
-static void hugetlb_unregister_all_nodes(void)
-{
-       int nid;
-
-       /*
-        * disable node device registrations.
-        */
-       register_hugetlbfs_with_node(NULL, NULL);
-
-       /*
-        * remove hstate attributes from any nodes that have them.
-        */
-       for (nid = 0; nid < nr_node_ids; nid++)
-               hugetlb_unregister_node(node_devices[nid]);
-}
 
 /*
  * Register hstate attributes for a single node device.
        return NULL;
 }
 
-static void hugetlb_unregister_all_nodes(void) { }
-
 static void hugetlb_register_all_nodes(void) { }
 
 #endif
 
-static void __exit hugetlb_exit(void)
-{
-       struct hstate *h;
-
-       hugetlb_unregister_all_nodes();
-
-       for_each_hstate(h) {
-               kobject_put(hstate_kobjs[hstate_index(h)]);
-       }
-
-       kobject_put(hugepages_kobj);
-       kfree(hugetlb_fault_mutex_table);
-}
-module_exit(hugetlb_exit);
-
 static int __init hugetlb_init(void)
 {
        int i;
                mutex_init(&hugetlb_fault_mutex_table[i]);
        return 0;
 }
-module_init(hugetlb_init);
+subsys_initcall(hugetlb_init);
 
 /* Should be called on processing a hugepagesz=... option */
 void __init hugetlb_add_hstate(unsigned int order)