summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/filesystems.c89
-rw-r--r--fs/namespace.c4
-rw-r--r--include/linux/fs.h1
3 files changed, 16 insertions, 78 deletions
diff --git a/fs/filesystems.c b/fs/filesystems.c
index cf58df08fcb3..bf2bc5f8bac6 100644
--- a/fs/filesystems.c
+++ b/fs/filesystems.c
@@ -49,38 +49,6 @@ static struct file_system_type **find_filesystem(const char *name)
return p;
}
-
-/* define fs_subsys */
-static decl_subsys(fs, NULL, NULL);
-
-static int register_fs_subsys(struct file_system_type * fs)
-{
- struct subsystem *sub = &fs->subsys;
-
- snprintf(sub->kset.kobj.name, KOBJ_NAME_LEN, "%s", fs->name);
- subsys_set_kset(fs, fs_subsys);
- return subsystem_register(sub);
-}
-
-static int unlink_fs(struct file_system_type * fs)
-{
- struct file_system_type ** tmp;
-
- write_lock(&file_systems_lock);
- tmp = &file_systems;
- while (*tmp) {
- if (fs == *tmp) {
- *tmp = fs->next;
- fs->next = NULL;
- write_unlock(&file_systems_lock);
- return 0;
- }
- tmp = &(*tmp)->next;
- }
- write_unlock(&file_systems_lock);
- return -EINVAL;
-}
-
/**
* register_filesystem - register a new filesystem
* @fs: the file system structure
@@ -111,12 +79,6 @@ int register_filesystem(struct file_system_type * fs)
else
*p = fs;
write_unlock(&file_systems_lock);
-
- if (!res) {
- /* we implicitly possess reference to @fs during registration,
- * so it cannot be unregister from under us. */
- register_fs_subsys(fs);
- }
return res;
}
@@ -134,44 +96,21 @@ int register_filesystem(struct file_system_type * fs)
int unregister_filesystem(struct file_system_type * fs)
{
- int res;
-
- res = unlink_fs(fs);
- if (!res)
- subsystem_unregister(&fs->subsys);
- return res;
-}
-
-extern int sysfs_init(void);
-
-/**
- * fs_subsys_init - initialize sysfs and fs subsystem.
- *
- * In order to register filesystems in sysfs, it has to be
- * initialized. Also, we need the base fs filesystem, so the
- * registered filesystems have a home.
- *
- * During sysfs_init(), the registration of sysfs into itself
- * will fail, since it's not mounted yet. To make sure that
- * sysfs does show up, we re-register sysfs's embedded subsystem,
- * which will get added, since sysfs is now mounted.
- */
-
-void __init fs_subsys_init(void)
-{
- struct file_system_type ** p;
-
- /* make sure sysfs is up and running */
- sysfs_init();
-
- /* register fs_subsys */
- subsystem_register(&fs_subsys);
-
- p = find_filesystem("sysfs");
+ struct file_system_type ** tmp;
- if (p)
- /* make sure it's registered */
- register_fs_subsys(*p);
+ write_lock(&file_systems_lock);
+ tmp = &file_systems;
+ while (*tmp) {
+ if (fs == *tmp) {
+ *tmp = fs->next;
+ fs->next = NULL;
+ write_unlock(&file_systems_lock);
+ return 0;
+ }
+ tmp = &(*tmp)->next;
+ }
+ write_unlock(&file_systems_lock);
+ return -EINVAL;
}
static int fs_index(const char __user * __name)
diff --git a/fs/namespace.c b/fs/namespace.c
index 3ba38cc13f33..61e5ec891363 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -24,7 +24,7 @@
#include <asm/uaccess.h>
extern int __init init_rootfs(void);
-extern int __init fs_subsys_init(void);
+extern int __init sysfs_init(void);
static struct list_head *mount_hashtable;
static int hash_mask, hash_bits;
@@ -1144,7 +1144,7 @@ void __init mnt_init(unsigned long mempages)
d++;
i--;
} while (i);
- fs_subsys_init();
+ sysfs_init();
init_rootfs();
init_mount_tree();
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 9ae05e3ff093..0f79ec6c6949 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -917,7 +917,6 @@ struct export_operations {
struct file_system_type {
const char *name;
- struct subsystem subsys;
int fs_flags;
struct super_block *(*get_sb) (struct file_system_type *, int,
const char *, void *);