diff options
Diffstat (limited to 'fs/super.c')
| -rw-r--r-- | fs/super.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/fs/super.c b/fs/super.c index 6f021a171ac6..f6a7bf1fff2b 100644 --- a/fs/super.c +++ b/fs/super.c | |||
| @@ -870,29 +870,42 @@ void kill_block_super(struct super_block *sb) | |||
| 870 | EXPORT_SYMBOL(kill_block_super); | 870 | EXPORT_SYMBOL(kill_block_super); |
| 871 | #endif | 871 | #endif |
| 872 | 872 | ||
| 873 | int get_sb_nodev(struct file_system_type *fs_type, | 873 | struct dentry *mount_nodev(struct file_system_type *fs_type, |
| 874 | int flags, void *data, | 874 | int flags, void *data, |
| 875 | int (*fill_super)(struct super_block *, void *, int), | 875 | int (*fill_super)(struct super_block *, void *, int)) |
| 876 | struct vfsmount *mnt) | ||
| 877 | { | 876 | { |
| 878 | int error; | 877 | int error; |
| 879 | struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL); | 878 | struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL); |
| 880 | 879 | ||
| 881 | if (IS_ERR(s)) | 880 | if (IS_ERR(s)) |
| 882 | return PTR_ERR(s); | 881 | return ERR_CAST(s); |
| 883 | 882 | ||
| 884 | s->s_flags = flags; | 883 | s->s_flags = flags; |
| 885 | 884 | ||
| 886 | error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); | 885 | error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); |
| 887 | if (error) { | 886 | if (error) { |
| 888 | deactivate_locked_super(s); | 887 | deactivate_locked_super(s); |
| 889 | return error; | 888 | return ERR_PTR(error); |
| 890 | } | 889 | } |
| 891 | s->s_flags |= MS_ACTIVE; | 890 | s->s_flags |= MS_ACTIVE; |
| 892 | simple_set_mnt(mnt, s); | 891 | return dget(s->s_root); |
| 893 | return 0; | ||
| 894 | } | 892 | } |
| 893 | EXPORT_SYMBOL(mount_nodev); | ||
| 894 | |||
| 895 | int get_sb_nodev(struct file_system_type *fs_type, | ||
| 896 | int flags, void *data, | ||
| 897 | int (*fill_super)(struct super_block *, void *, int), | ||
| 898 | struct vfsmount *mnt) | ||
| 899 | { | ||
| 900 | struct dentry *root; | ||
| 895 | 901 | ||
| 902 | root = mount_nodev(fs_type, flags, data, fill_super); | ||
| 903 | if (IS_ERR(root)) | ||
| 904 | return PTR_ERR(root); | ||
| 905 | mnt->mnt_root = root; | ||
| 906 | mnt->mnt_sb = root->d_sb; | ||
| 907 | return 0; | ||
| 908 | } | ||
| 896 | EXPORT_SYMBOL(get_sb_nodev); | 909 | EXPORT_SYMBOL(get_sb_nodev); |
| 897 | 910 | ||
| 898 | static int compare_single(struct super_block *s, void *p) | 911 | static int compare_single(struct super_block *s, void *p) |
