Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

Al Viro d5686b44 a95164d9

+18 -45
+6 -23
drivers/md/dm-table.c
··· 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 /*
+11 -22
drivers/mtd/mtdsuper.c
··· 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) ··· 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; 189 + } 190 + DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); 191 191 192 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 - } 201 - 202 - if (imajor(nd.path.dentry->d_inode) != MTD_BLOCK_MAJOR) 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); ··· 204 213 printk(KERN_NOTICE 205 214 "MTD: Attempt to mount non-MTD device \"%s\"\n", 206 215 dev_name); 207 - out: 208 - path_put(&nd.path); 216 + bdput(bdev); 209 217 return ret; 210 - 211 218 } 212 219 213 220 EXPORT_SYMBOL_GPL(get_sb_mtd);
+1
fs/block_dev.c
··· 1236 1236 bdev = ERR_PTR(error); 1237 1237 goto out; 1238 1238 } 1239 + EXPORT_SYMBOL(lookup_bdev); 1239 1240 1240 1241 /** 1241 1242 * open_bdev_excl - open a block device by name and set it up for use