diff options
| -rw-r--r-- | fs/filesystems.c | 89 | ||||
| -rw-r--r-- | fs/namespace.c | 4 | ||||
| -rw-r--r-- | include/linux/fs.h | 1 |
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 *); |
