Commit 043400bf authored by Patrick Mochel's avatar Patrick Mochel

[fs] Remove kobject support for filesystems

It was initially added for the immediate gain of being able to see what 
filesystems were registered in the system. However, it was done without
proper analysis of the lifetime rules associated with them. 

Someday, we should convert struct filesystem_type and struct super_block to
use kobjects, though it will take sufficent time and effort to get it right.
Until then, we go without..
parent c2e2d4f7
......@@ -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)
......
......@@ -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();
}
......@@ -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 *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment