diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index 8f7fe323e049..fb99863598be 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c @@ -249,7 +249,7 @@ static struct dentry *rootfs_mount(struct file_system_type *fs_type, { static unsigned long once; - if (test_and_set_bit(1, &once)) + if (test_and_set_bit(0, &once)) return ERR_PTR(-ENODEV); return mount_nodev(fs_type, flags, data, ramfs_fill_super); @@ -275,21 +275,34 @@ static struct file_system_type rootfs_fs_type = { static int __init init_ramfs_fs(void) { - return register_filesystem(&ramfs_fs_type); -} -module_init(init_ramfs_fs) - -int __init init_rootfs(void) -{ + static unsigned long once; int err; + if (test_and_set_bit(0, &once)) + return 0; + err = bdi_init(&ramfs_backing_dev_info); if (err) return err; - err = register_filesystem(&rootfs_fs_type); + err = register_filesystem(&ramfs_fs_type); if (err) bdi_destroy(&ramfs_backing_dev_info); return err; } +module_init(init_ramfs_fs) + +int __init init_rootfs(void) +{ + int err = register_filesystem(&rootfs_fs_type); + + if (err) + return err; + + err = init_ramfs_fs(); + if (err) + unregister_filesystem(&rootfs_fs_type); + + return err; +}