diff options
Diffstat (limited to 'drivers/mtd/mtdsuper.c')
-rw-r--r-- | drivers/mtd/mtdsuper.c | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c index 38e2ab07e7a3..16b02a1fc100 100644 --- a/drivers/mtd/mtdsuper.c +++ b/drivers/mtd/mtdsuper.c | |||
@@ -54,11 +54,10 @@ static int get_sb_mtd_set(struct super_block *sb, void *_mtd) | |||
54 | /* | 54 | /* |
55 | * get a superblock on an MTD-backed filesystem | 55 | * get a superblock on an MTD-backed filesystem |
56 | */ | 56 | */ |
57 | static int get_sb_mtd_aux(struct file_system_type *fs_type, int flags, | 57 | static struct dentry *mount_mtd_aux(struct file_system_type *fs_type, int flags, |
58 | const char *dev_name, void *data, | 58 | const char *dev_name, void *data, |
59 | struct mtd_info *mtd, | 59 | struct mtd_info *mtd, |
60 | int (*fill_super)(struct super_block *, void *, int), | 60 | int (*fill_super)(struct super_block *, void *, int)) |
61 | struct vfsmount *mnt) | ||
62 | { | 61 | { |
63 | struct super_block *sb; | 62 | struct super_block *sb; |
64 | int ret; | 63 | int ret; |
@@ -79,57 +78,49 @@ static int get_sb_mtd_aux(struct file_system_type *fs_type, int flags, | |||
79 | ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); | 78 | ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); |
80 | if (ret < 0) { | 79 | if (ret < 0) { |
81 | deactivate_locked_super(sb); | 80 | deactivate_locked_super(sb); |
82 | return ret; | 81 | return ERR_PTR(ret); |
83 | } | 82 | } |
84 | 83 | ||
85 | /* go */ | 84 | /* go */ |
86 | sb->s_flags |= MS_ACTIVE; | 85 | sb->s_flags |= MS_ACTIVE; |
87 | simple_set_mnt(mnt, sb); | 86 | return dget(sb->s_root); |
88 | |||
89 | return 0; | ||
90 | 87 | ||
91 | /* new mountpoint for an already mounted superblock */ | 88 | /* new mountpoint for an already mounted superblock */ |
92 | already_mounted: | 89 | already_mounted: |
93 | DEBUG(1, "MTDSB: Device %d (\"%s\") is already mounted\n", | 90 | DEBUG(1, "MTDSB: Device %d (\"%s\") is already mounted\n", |
94 | mtd->index, mtd->name); | 91 | mtd->index, mtd->name); |
95 | simple_set_mnt(mnt, sb); | 92 | put_mtd_device(mtd); |
96 | ret = 0; | 93 | return dget(sb->s_root); |
97 | goto out_put; | ||
98 | 94 | ||
99 | out_error: | 95 | out_error: |
100 | ret = PTR_ERR(sb); | ||
101 | out_put: | ||
102 | put_mtd_device(mtd); | 96 | put_mtd_device(mtd); |
103 | return ret; | 97 | return ERR_CAST(sb); |
104 | } | 98 | } |
105 | 99 | ||
106 | /* | 100 | /* |
107 | * get a superblock on an MTD-backed filesystem by MTD device number | 101 | * get a superblock on an MTD-backed filesystem by MTD device number |
108 | */ | 102 | */ |
109 | static int get_sb_mtd_nr(struct file_system_type *fs_type, int flags, | 103 | static struct dentry *mount_mtd_nr(struct file_system_type *fs_type, int flags, |
110 | const char *dev_name, void *data, int mtdnr, | 104 | const char *dev_name, void *data, int mtdnr, |
111 | int (*fill_super)(struct super_block *, void *, int), | 105 | int (*fill_super)(struct super_block *, void *, int)) |
112 | struct vfsmount *mnt) | ||
113 | { | 106 | { |
114 | struct mtd_info *mtd; | 107 | struct mtd_info *mtd; |
115 | 108 | ||
116 | mtd = get_mtd_device(NULL, mtdnr); | 109 | mtd = get_mtd_device(NULL, mtdnr); |
117 | if (IS_ERR(mtd)) { | 110 | if (IS_ERR(mtd)) { |
118 | DEBUG(0, "MTDSB: Device #%u doesn't appear to exist\n", mtdnr); | 111 | DEBUG(0, "MTDSB: Device #%u doesn't appear to exist\n", mtdnr); |
119 | return PTR_ERR(mtd); | 112 | return ERR_CAST(mtd); |
120 | } | 113 | } |
121 | 114 | ||
122 | return get_sb_mtd_aux(fs_type, flags, dev_name, data, mtd, fill_super, | 115 | return mount_mtd_aux(fs_type, flags, dev_name, data, mtd, fill_super); |
123 | mnt); | ||
124 | } | 116 | } |
125 | 117 | ||
126 | /* | 118 | /* |
127 | * set up an MTD-based superblock | 119 | * set up an MTD-based superblock |
128 | */ | 120 | */ |
129 | int get_sb_mtd(struct file_system_type *fs_type, int flags, | 121 | struct dentry *mount_mtd(struct file_system_type *fs_type, int flags, |
130 | const char *dev_name, void *data, | 122 | const char *dev_name, void *data, |
131 | int (*fill_super)(struct super_block *, void *, int), | 123 | int (*fill_super)(struct super_block *, void *, int)) |
132 | struct vfsmount *mnt) | ||
133 | { | 124 | { |
134 | #ifdef CONFIG_BLOCK | 125 | #ifdef CONFIG_BLOCK |
135 | struct block_device *bdev; | 126 | struct block_device *bdev; |
@@ -138,7 +129,7 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
138 | int mtdnr; | 129 | int mtdnr; |
139 | 130 | ||
140 | if (!dev_name) | 131 | if (!dev_name) |
141 | return -EINVAL; | 132 | return ERR_PTR(-EINVAL); |
142 | 133 | ||
143 | DEBUG(2, "MTDSB: dev_name \"%s\"\n", dev_name); | 134 | DEBUG(2, "MTDSB: dev_name \"%s\"\n", dev_name); |
144 | 135 | ||
@@ -156,10 +147,10 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
156 | 147 | ||
157 | mtd = get_mtd_device_nm(dev_name + 4); | 148 | mtd = get_mtd_device_nm(dev_name + 4); |
158 | if (!IS_ERR(mtd)) | 149 | if (!IS_ERR(mtd)) |
159 | return get_sb_mtd_aux( | 150 | return mount_mtd_aux( |
160 | fs_type, flags, | 151 | fs_type, flags, |
161 | dev_name, data, mtd, | 152 | dev_name, data, mtd, |
162 | fill_super, mnt); | 153 | fill_super); |
163 | 154 | ||
164 | printk(KERN_NOTICE "MTD:" | 155 | printk(KERN_NOTICE "MTD:" |
165 | " MTD device with name \"%s\" not found.\n", | 156 | " MTD device with name \"%s\" not found.\n", |
@@ -174,9 +165,9 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
174 | /* It was a valid number */ | 165 | /* It was a valid number */ |
175 | DEBUG(1, "MTDSB: mtd%%d, mtdnr %d\n", | 166 | DEBUG(1, "MTDSB: mtd%%d, mtdnr %d\n", |
176 | mtdnr); | 167 | mtdnr); |
177 | return get_sb_mtd_nr(fs_type, flags, | 168 | return mount_mtd_nr(fs_type, flags, |
178 | dev_name, data, | 169 | dev_name, data, |
179 | mtdnr, fill_super, mnt); | 170 | mtdnr, fill_super); |
180 | } | 171 | } |
181 | } | 172 | } |
182 | } | 173 | } |
@@ -189,7 +180,7 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
189 | if (IS_ERR(bdev)) { | 180 | if (IS_ERR(bdev)) { |
190 | ret = PTR_ERR(bdev); | 181 | ret = PTR_ERR(bdev); |
191 | DEBUG(1, "MTDSB: lookup_bdev() returned %d\n", ret); | 182 | DEBUG(1, "MTDSB: lookup_bdev() returned %d\n", ret); |
192 | return ret; | 183 | return ERR_PTR(ret); |
193 | } | 184 | } |
194 | DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); | 185 | DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); |
195 | 186 | ||
@@ -202,8 +193,7 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
202 | if (major != MTD_BLOCK_MAJOR) | 193 | if (major != MTD_BLOCK_MAJOR) |
203 | goto not_an_MTD_device; | 194 | goto not_an_MTD_device; |
204 | 195 | ||
205 | return get_sb_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super, | 196 | return mount_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super); |
206 | mnt); | ||
207 | 197 | ||
208 | not_an_MTD_device: | 198 | not_an_MTD_device: |
209 | #endif /* CONFIG_BLOCK */ | 199 | #endif /* CONFIG_BLOCK */ |
@@ -212,10 +202,10 @@ not_an_MTD_device: | |||
212 | printk(KERN_NOTICE | 202 | printk(KERN_NOTICE |
213 | "MTD: Attempt to mount non-MTD device \"%s\"\n", | 203 | "MTD: Attempt to mount non-MTD device \"%s\"\n", |
214 | dev_name); | 204 | dev_name); |
215 | return -EINVAL; | 205 | return ERR_PTR(-EINVAL); |
216 | } | 206 | } |
217 | 207 | ||
218 | EXPORT_SYMBOL_GPL(get_sb_mtd); | 208 | EXPORT_SYMBOL_GPL(mount_mtd); |
219 | 209 | ||
220 | /* | 210 | /* |
221 | * destroy an MTD-based superblock | 211 | * destroy an MTD-based superblock |