Commit d5686b444ff3f72808d2b3fbd58672a86cdf38e7
1 parent
a95164d979
Exists in
master
and in
7 other branches
[PATCH] switch mtd and dm-table to lookup_bdev()
No need to open-code it... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Showing 3 changed files with 18 additions and 45 deletions Side-by-side Diff
drivers/md/dm-table.c
... | ... | @@ -316,29 +316,12 @@ |
316 | 316 | */ |
317 | 317 | static int lookup_device(const char *path, dev_t *dev) |
318 | 318 | { |
319 | - int r; | |
320 | - struct nameidata nd; | |
321 | - struct inode *inode; | |
322 | - | |
323 | - if ((r = path_lookup(path, LOOKUP_FOLLOW, &nd))) | |
324 | - return r; | |
325 | - | |
326 | - inode = nd.path.dentry->d_inode; | |
327 | - if (!inode) { | |
328 | - r = -ENOENT; | |
329 | - goto out; | |
330 | - } | |
331 | - | |
332 | - if (!S_ISBLK(inode->i_mode)) { | |
333 | - r = -ENOTBLK; | |
334 | - goto out; | |
335 | - } | |
336 | - | |
337 | - *dev = inode->i_rdev; | |
338 | - | |
339 | - out: | |
340 | - path_put(&nd.path); | |
341 | - return r; | |
319 | + struct block_device *bdev = lookup_bdev(path); | |
320 | + if (IS_ERR(bdev)) | |
321 | + return PTR_ERR(bdev); | |
322 | + *dev = bdev->bd_dev; | |
323 | + bdput(bdev); | |
324 | + return 0; | |
342 | 325 | } |
343 | 326 | |
344 | 327 | /* |
drivers/mtd/mtdsuper.c
... | ... | @@ -125,7 +125,7 @@ |
125 | 125 | int (*fill_super)(struct super_block *, void *, int), |
126 | 126 | struct vfsmount *mnt) |
127 | 127 | { |
128 | - struct nameidata nd; | |
128 | + struct block_device *bdev; | |
129 | 129 | int mtdnr, ret; |
130 | 130 | |
131 | 131 | if (!dev_name) |
132 | 132 | |
133 | 133 | |
134 | 134 | |
135 | 135 | |
... | ... | @@ -181,29 +181,20 @@ |
181 | 181 | /* try the old way - the hack where we allowed users to mount |
182 | 182 | * /dev/mtdblock$(n) but didn't actually _use_ the blockdev |
183 | 183 | */ |
184 | - ret = path_lookup(dev_name, LOOKUP_FOLLOW, &nd); | |
185 | - | |
186 | - DEBUG(1, "MTDSB: path_lookup() returned %d, inode %p\n", | |
187 | - ret, nd.path.dentry ? nd.path.dentry->d_inode : NULL); | |
188 | - | |
189 | - if (ret) | |
184 | + bdev = lookup_bdev(dev_name); | |
185 | + if (IS_ERR(bdev)) { | |
186 | + ret = PTR_ERR(bdev); | |
187 | + DEBUG(1, "MTDSB: lookup_bdev() returned %d\n", ret); | |
190 | 188 | return ret; |
191 | - | |
192 | - ret = -EINVAL; | |
193 | - | |
194 | - if (!S_ISBLK(nd.path.dentry->d_inode->i_mode)) | |
195 | - goto out; | |
196 | - | |
197 | - if (nd.path.mnt->mnt_flags & MNT_NODEV) { | |
198 | - ret = -EACCES; | |
199 | - goto out; | |
200 | 189 | } |
190 | + DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); | |
201 | 191 | |
202 | - if (imajor(nd.path.dentry->d_inode) != MTD_BLOCK_MAJOR) | |
192 | + ret = -EINVAL; | |
193 | + if (MAJOR(bdev->bd_dev) != MTD_BLOCK_MAJOR) | |
203 | 194 | goto not_an_MTD_device; |
204 | 195 | |
205 | - mtdnr = iminor(nd.path.dentry->d_inode); | |
206 | - path_put(&nd.path); | |
196 | + mtdnr = MINOR(bdev->bd_dev); | |
197 | + bdput(bdev); | |
207 | 198 | |
208 | 199 | return get_sb_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super, |
209 | 200 | mnt); |
210 | 201 | |
... | ... | @@ -213,10 +204,8 @@ |
213 | 204 | printk(KERN_NOTICE |
214 | 205 | "MTD: Attempt to mount non-MTD device \"%s\"\n", |
215 | 206 | dev_name); |
216 | -out: | |
217 | - path_put(&nd.path); | |
207 | + bdput(bdev); | |
218 | 208 | return ret; |
219 | - | |
220 | 209 | } |
221 | 210 | |
222 | 211 | EXPORT_SYMBOL_GPL(get_sb_mtd); |